CUDA學習(三十五)

2021-08-16 20:44:47 字數 1211 閱讀 9385

建議和最佳做法:

整體效能優化策略:

效能優化圍繞三個基本策略展開:

- 最大限度地平行執行

- 優化記憶體使用量以實現最大記憶體頻寬

- 優化指令使用率以實現最大指令吞吐量

最大化並行執行從構建演算法開始,盡可能多地暴露資料並行。 一旦演算法的並行性暴露出來,它就需要盡可能有效地對映到硬體。 這是通過仔細選擇每個核心啟動的執行配置來完成的。 應用程式還應該通過流顯式公開裝置上的併發執行以及最大化主機和裝置之間的併發執行,從而最大限度地提高並行執行的水平。

優化記憶體使用開始於最小化主機和裝置之間的資料傳輸,因為這些傳輸比內部裝置資料傳輸具有更低的頻寬。 核心對全域性記憶體的訪問也應通過最大限度地使用裝置上的共享記憶體來最小化。 有時候,最好的優化甚至可以首先通過簡單地重新計算資料來避免任何資料傳輸。

根據每種儲存器的訪問模式,有效頻寬可以變化乙個數量級。 因此,優化記憶體使用的下一步是根據最佳記憶體訪問模式來組織記憶體訪問。 這種優化對於全域性記憶體訪問尤其重要,因為訪問延遲需要花費數百個時鐘週期。 共同的記憶體訪問通常只有在存在高度銀行衝突時才值得優化。

至於優化指令的使用,應該避免使用吞吐量低的算術指令。 這表明在不影響最終結果時速度的交易精度,例如使用內在函式而不是常規函式或單精度而不是雙精度。 最後,由於裝置的simt(單指令多執行緒)性質,必須特別注意控制流程指令。

nvcc編譯器開關:

nvcc:

nvidia nvcc編譯器驅動程式將.cu檔案轉換為c,用於主機系統和cuda程式集或裝置的二進位制指令。 它支援許多命令列引數,其中以下對於優化和相關的最佳實踐特別有用:

‣-maxrregcount = n指定核心在每個檔案級別可以使用的最大暫存器數量。 見註冊壓力。 (另請參閱cuda c程式設計指南的「執行配置」中討論的launch_bounds限定符,以控制每個核心基礎上使用的暫存器數量。)

‣–ptxas-options = -v或-xptxas = -v列出每個核心的暫存器,共享和常量記憶體使用情況。

‣-ftz = true(非規格化數字被重新整理為零)

‣-prec-div = false(不太精確的劃分)

‣-prec-sqrt = false(不精確的平方根)

n -use_fast_math nvcc的編譯器選項強制每個functionname()呼叫等效的__functionname()呼叫。 這使得**執行速度更快,代價是精度和準確性降低。 請參閱數學庫。

CUDA學習(三十五)

constant constant 記憶體空間說明符 可選 與 device 一起使用,宣告乙個變數 shared shared 記憶體空間說明符,可以與 device 一起使用,宣告乙個變數 有塊的生命週期,每塊有乙個獨特的物件,只能從塊中的所有執行緒訪問 將共享記憶體中的變數宣告為外部陣列 如 ...

出差(三十五)

今天早晨到會議室後便買好了明天回公司的車票,長達乙個多月的出差生活即將告一段落,利用假期回去休息幾天,換換心情。經過這乙個多月的封閉式開發,對專案,對團隊有了進一步了解,感受到了創業公司的不易,也再次體驗了三點一線的生活方式,已經遠超996的工作模式,即使這樣依舊離目標有很大距離,主要原因還是缺少乙...

隨筆三十五 迴圈

1 do while 迴圈 do while 語句的通用形式如下 do body statement while test expr do while 的通用形式可以翻譯成如下所示的條件和 goto 語句 loop body statement t test expr if t goto loop ...