2011-09-23 15 views
1

我在Windows 7上用CUDA C編寫了幾個程序。我做了塊大小的實驗。我發現在大多數情況下,256或512的塊大小比其他塊的性能更好。任何機構能告訴我背後的確切技術原因嗎?或者指出要知道的任何資源。由於其他塊大小的倍數32(warp)會降低性能。提前致謝。爲什麼CUDA 256或512的塊大小與其他的相比,性能更好?

+0

嘗試使用[Cuda佔用率計算器](http://developer.download.nvidia.com/compute/cuda/CUDA_Occupancy_calculator.xls)查看哪些塊大小最適合您的內核。它可能只是你寫的內核。儘管如此,根據我的經驗,blocksize 256確實常常是最佳選擇,只是巧合,但我還沒有找到任何解釋。 – aland

回答

1

如果沒有實際測量,就無法確定給定芯片的最佳塊大小。例如,如果您正在進行2D紋理處理,則16x4塊會非常好地工作。就你而言,512可能恰好是芯片內存分區數的倍數。 (在GeForce 8800 GTX上,有6個內存分區,384對帶寬綁定的內核來說是一個非常好的塊大小)。

佔用率只是影響性能的許多注意事項之一 - 對於可以使用寄存器(而不是共享內存)來保存中間結果的工作負載,使用更多寄存器和更少線程的塊工作得最好的工作負載,更多線程並不總是更好。

對不起,我不能給出更明確的答案,但這是一個複雜的問題。

+0

謝謝!您已經給出了一個非常重要的線索,即「內存分區」塊大小和內存分區可以以某種方式關聯。非常感謝。 – user961614

相關問題