为什么 256 或 512 的 CUDA 块大小比其他块大小能提供更好的性能?

发布于 2024-12-06 02:59:44 字数 147 浏览 0 评论 0原文

我在 Windows 7 上用 CUDA C 编写了一些程序。我对块大小进行了实验。我发现在大多数情况下,256 或 512 的块大小比其他块大小提供更好的性能。谁能告诉我其背后的确切技术原因吗?或指出任何需要了解的资源。由于其他块大小为 32(扭曲)的倍数时性能较差。提前致谢。

I ve written few programs in CUDA C on windows 7. I did the experimentation with the block size. I found that in most of the cases block size of 256 or 512 gives better performance than other. Can any body tell me the exact technical reason behind it? or point out any resource to know. Since other block sizes multiples of 32 (warp) gives less performance. Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

最佳男配角 2024-12-13 02:59:44

如果没有实际测量,就无法确定给定芯片的最佳块大小。例如,如果您正在进行 2D 纹理处理,则 16x4 块恰好可以很好地工作。在您的情况下,512 可能恰好是芯片中内存分区数量的倍数。 (在具有 6 个内存分区的 GeForce 8800 GTX 上,384 对于带宽受限的内核来说是一个非常好的块大小)。

占用只是影响性能的众多考虑因素之一 - 更多线程并不总是更好 - 对于可以使用寄存器(而不是共享内存)来保存中间结果的工作负载,使用更多寄存器和更少线程的块效果最好。

抱歉,我无法给出更明确的答案,但这是一个复杂的问题。

Without actual measurements, there's no way to be sure of the optimal block size for a given chip. If you are doing 2D texturing, for example, a 16x4 block happens to work really well. In your case, it's possible that 512 happens to be a multiple of the number of memory partitions in the chip. (On the GeForce 8800 GTX, with 6 memory partitions, 384 was a really good block size for bandwidth-bound kernels).

Occupancy is just one of many considerations that affect performance - more threads isn't always better - for workloads that can use registers (instead of shared memory) to hold intermediate results, blocks that use more registers and fewer threads work best.

Sorry I can't give a more definitive answer, but it is a complicated issue.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文