0
設備GeForce GTX 680哪個更好?循環內核或循環內核的CUDA GPU
在程序中,我有很長的數組在內核中處理(約1 GB的整數)。根據需要,我的數組被分開按順序重疊成塊,並有一些重疊(塊之間的重疊爲k)。每個塊的固定大小(塊大小爲m)。現在,數組將依次分爲(0,m)(mk,(mk)+ m),....)
按照上面的計算,我的程序中所需的塊數將大約爲(1GB/m) 由於GPU中塊的總數量是有限的,我該如何有效地做到這一點? 我應該從主機迭代方式調用內核,而內核中沒有任何循環? 或者我應該調用內核一次,然後在內核循環多次迭代? 或者我應該只調用內核一次,總塊數=(1 GB/m)?
什麼可以作爲這個程序的塊數和什麼方法的最佳值?
那麼對於每個內核,理想的內核調用和塊數應該是多少? – GoT
我認爲一個好的經驗法則是至少有一個線程來填充每個核心中管道中的每個插槽。比這更多的線程不會傷害性能,但也無濟於事。在那個時候,這對你來說是最方便的。據我所知,NVIDIA並沒有透露管道延遲,但可能在10個鐘左右。如果是這樣,您應該嘗試安排至少1536個內核* 10個時鐘延遲=每個內核15360個線程。 –
很難說每塊應該有多少個線程。您可以使用CUDA佔用率計算器(包含在CUDA中)獲取有關此號碼的建議。但是,與計算器提供的數量和計算結果的時間相比,您還應該嘗試對其進行上下調整。通常使用128和256。你希望這個數字可以被32整除。 –