Ubuntu16.04:CUDA學習筆記(一):GPU背景知識
阿新 • • 發佈:2018-11-13
host:CPU,記憶體
device:GPU,視訊記憶體
我是純粹小白,裡面的一些圖是根據我自己的理解畫的,可能並不一定對
一,GPU和CPU執行程式的區別
(圖片來源:CUDA_C_Programming-Guide)
可以看到GPU有跟多的cores,你可以先把cores理解成計算的最小的單元。
通常來說,訪問資料的時間隨著計算核和儲存資料的記憶體位置的距離而增加
Latency延遲
是核等待資料的時間。
CPU是通過大量的告訴快取cache來縮短這個時間的,也就是儘可能減少時間t來減小延遲,CPU關注單個核心的執行速度
如果warp1所需要的而資料不可以獲得的話,那麼SM就會轉向一個可以獲得資料的執行緒束。GPU所關注的是整體的運算吞吐量,而不是單個核心的執行速度
如何產生大量的執行緒?
CUDA通過一種叫做核函式(kernel)的特殊函式去實現的,這個函式會產生大量的可以分配SM的計算執行緒
二,GPU的背景知識
GPU的每一個core(計算核心)都有兩個計算單元
輸出指令之後GPU執行程式的流程,也就是所謂的SIMT
(single instruction multiple threads)
SM中每一個core執行的具體的運算是不一樣的,有CUDA統一排程
SM是借用一種特殊的函式–核函式(kernel)去執行的。具體執行的時候是這樣去做的:
(圖片來源:https://blog.csdn.net/breaksoftware/article/details/79302590
參考
- 《CUDA高效能平行計算》機械工業出版社
- CUDA_C_Programming-Guide
- CUDA高效能程式設計入門