寫CUDA到底難在哪？
cuda目前主要事利用GPU的特性進行加速，使用cuda進行加速有幾個重要點需要考慮： 1、並行思想。 如果一個演算法無法透過並行加速，那麼可以考慮放棄用cuda實現，因為這樣cuda實現沒有太大的效益。（當然還有一種想法就是解放cpu，而不在乎效能）。並行思想也是gpu程式設計的基礎 2、獨立顯示卡的資料傳輸耗時 對於獨顯還要考慮如何減少host端（cpu）的記憶體到device端（gpu）的記憶體傳輸耗時（獨立顯示卡由自己的視訊記憶體，一般透過pcie來傳輸cpu和gpu，資料量大時候耗時明顯） 3、演算法特性與架構特性 區分是計算密集型還是IO密集型演算法，IO密集型的演算法：要考慮GPU的快取/共享記憶體如何使用來達到減少頻寬傳輸耗時；還要考慮記憶體的合併訪問問題，記憶體合併訪問幾乎是現階段所有GPU程式設計中非常重要而基礎的一個技術細節等。計算密集型演算法：要考慮如何減少指令數量等。 4、精度與效能 有些演算法可以透過犧牲精度來提升效能。例如有些GPU的float16效能往往能翻倍，可以嘗試用低精度的資料型別看看能否滿足需要，cuda一樣有這樣的情況 5、使用fast-math編譯選項 cuda內部有實現一些快速函式，可以嘗試開啟fast-math編譯選項，或許有很明顯的提升 6、使用release版本進行效能測試 cuda程式碼儘可能用release版本，對於在windows開發的同學應該深有感觸，debug和relWithDebinfo的版本效能下降達到1個數量級 7、必備cuda相關開發工具 工欲善其事，必先利其器。cuda開發有比較完整的除錯和最佳化工具能大大提高開發和調優效率，例如最新的有nsight compute，cuda debugger，nsight system。