Abstract: 本文介紹CUDA執行模型,只比硬體高一層的抽象
Keywords: CUDA SM,SIMT,SIMD,Fermi,Kepler
開篇廢話
今天晚上本來都該睡覺了,但是還是決定把這篇文章寫出來,畢竟昨天就沒寫。
這一篇開始我們開始接近CUDA最核心的部分,就是有關硬體,和程序的執行模型,用CUDA的目的其實說白了就是為計算速度快,所以壓榨性能,提高效率其實就是CUDA學習的最終目的,沒人學CUDA為了去顯示Hello world。前面幾篇我們學了編寫,啟動核函數,計時,統計時間,然後學習了線程,內存模型,線程內存部分我們會在後面用幾章的篇幅進行大書特書,而本章,我們介紹最底層最優理論指導意義的知識。什麼時候我們沿著硬體設計的思路設計程序,我們就會得到百戰百勝;什麼時候我們背離了硬體設計的思路去設計程序,我們就會得不到好結果。
概述
CUDA執行模型揭示了GPU並行架構的抽象視圖,再設計硬體的時候,其功能和特性都已經被設計好了,然後去開發硬體,如果這個過程模型特性或功能與硬體設計有衝突,雙方就會進行商討妥協,知道最後產品定型量產,功能和特性算是全部定型,而這些功能和特性就是變成模型的設計基礎,而編程模型又直接反應了硬體設計,從而反映了設備的硬體特性。
比如最直觀的一個就是內存,線程的層次結構幫助我們控制大規模並行,這個特性就是硬體設計最初設計好,然後集成電路工程師拿去設計,定型後程序員開發驅動,然後在上層可以直接使用這種執行模型來控制硬體。所以了解CUDA的執行模型,可以幫助我們優化指令吞吐量,和內存使用來獲得極限速度。
GPU架構概述
GPU架構是圍繞一個流式多處理器(SM)的擴展陣列搭建的。通過複製這種結構來實現GPU的硬體並行。