最優的cuda線程配置

1 每一個SM上面失少要有192個激活線程,寄存器寫後讀的數據依賴才能被掩蓋
 
2 將 寄存器 的bank衝突降到最低,應儘可能使每一個block含有的線程數是64的倍數
 
3 block的數量應設置得令可用的計算資源被充分的利用。因爲每一個block映射到一個sm上面,因此至少應該讓block的數目跟sm的數目同樣多。
 
4 當Block中的線程被同步時或者等待讀取設備存儲器時,相應的SM會閒置。一般讓block的數目是sm的2倍以上,使其在時間軸上重疊
 
5 若是block的數目足夠多,則每一個Block裏的線程數應設置成warp尺寸的整數倍,以避免太小的warp浪費計算資源。
 
6 給每一個block分配越多的線程,能更高效的讓他們在時間片上工做。可是相應的每一個線程的寄存器也就越少。當寄存器過少,有可能由於訪問溢出的寄存器,而致使數據的存儲變慢。
 
7 當每一個線程佔用的寄存器較多時,不宜在Block內分配過多的線程,不然也會減小block的數目。從而使SM的工做效率下降
 
8 每一個block內的線程數應遵循 相應的 計算能力等級中的規定數目。
 
原文來自《GPGPU編程技術--從GLSL、CUDA到OPENCL》
相關文章
相關標籤/搜索