CUDA程序性能的提升 與 流
1. CUDA程序性能的提升
- 在本節中,我們會看到用來遵循的基本的一些性能來提升準則,我們會逐一解釋它們
1.1 使用適當的塊數量和線程數量
- 研究表明,如果塊的數量是 GPU 的流多處理器數量的兩倍,則會給出最佳性能,不過,塊和線程的數量與具體的算法實現有關
- GPU 的流多處理器則可以通過獲取設備屬性的方法獲得
1.2 最大化數學運算效率
-
數學運算效率的定義是,數學運算操作和訪存操作的比率
-
常見的內核執行有3個瓶頸:卡在計算瓶頸上、卡在訪存上和卡在延遲掩蓋上:
- 如果卡在計算上,則應當考慮將一些計算等效的轉換成訪存,例如一些運算可以嘗試轉換成存儲器查表
- 如果卡在訪存上,則可以將一些訪存轉換成對應的計算,例如一些數據不是重新載入,而是直接計算出來
-
緩存的使用也有助于減少存儲器訪問時間,最終一定程度地輔助達成減少(內核的)全局內存的帶寬需求就能減少花費在訪存上的時間的目的。高效的使用存儲器對提升CUDA程序性能非常重要,當顯存帶寬是瓶頸的時候,減少帶寬需求有助于提升性能
1.3 使用合并的或跨步式的訪存
- 合并訪存大致意味著線程束(warp)整體讀取或者寫入連續的存儲器區域,這種對存儲器的訪問對GPU來說是最高效的。
- 如果 warp 的線程固定步長地離散式訪問某段存儲器區域,這叫做跨步式訪存,