CUDA總體優化策略

yyfn風辰發表於2010-03-15
Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE一、選擇程式中最耗時的部分,對它進行並行化,道理就是如果你選擇了消耗執行時間10%的部分來並行化,就算你達到了10倍的加速,現在的執行時間還是以前的91%,但是如果你並行的是消耗執行時間90%的部分,則現在的時間是以前的19%

 

二、最大化並行,就是在你選擇的部分,使用盡可能多的執行緒來處理它,並且讓每個執行緒儘可能多的計算,因為如果資料傳輸的時間太大的話,無論你提高多少倍也沒多大作用,對於資料傳輸,首先要保證傳輸次數少,其次傳輸量要小,可以使用cudaMallocHost來加速傳輸。當然,這和問題本身,演算法,硬體都有關係。

 

三、儘量保證全域性記憶體融合,儘量使用cuda已經定義好的向量,他們往往已經對齊了,而且cutil_math.h中還有相關的操作符過載,對自己定義的結構體要使用對齊,如果實在無法實現記憶體融合的話,使用texture

 

四、使用shareconstant儲存器,同時保證share不出現memory bank,就算有嚴重的bank conflictshared通常也快於global

 

五、優化register的使用,可以檢視cubin檔案,如果使用了lmem,那麼你就得考慮這個問題了,解決這個問題的方法,使用share,減小block尺寸,後一條可能更實用。

 

六、注意條件分支語句,儘量少用分支;展開迴圈,使用inline減少函式呼叫。

 

七、優化指令使用,儘量使用吞吐量大的指令,而不是相反,比如use-fast-math編譯選項。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23057064/viewspace-629488/,如需轉載,請註明出處,否則將追究法律責任。

相關文章