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

为什么CUDA块大小为256或512比其他块提供更好的性能?,cuda,Cuda,我在Windows7上用CUDA C编写了一些程序。我做了块大小的实验。我发现在大多数情况下,256或512的块大小比其他块大小提供更好的性能。有谁能告诉我背后确切的技术原因吗?或者指出任何需要了解的资源。由于其他块大小为32的倍数(扭曲),因此性能较差。提前感谢。如果没有实际测量,就无法确定给定芯片的最佳块大小。例如,如果您正在进行2D纹理处理,则16x4块恰好工作得非常好。在您的情况下,512可能恰好是芯片中内存分区数的倍数。(在GeForce 8800 GTX上,有6个内存分区,384对于

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

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

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


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

尝试使用查看哪些块大小最适合您的内核。它可能只是你写的内核。虽然,根据我的经验,blocksize 256确实是一个非常好的选择,但我没有找到任何解释。谢谢!您已经给出了一个非常重要的线索,即“内存分区”块大小和内存分区可以以某种方式相互关联。非常感谢。