1. 程式人生 > >Ubuntu16.04:CUDA學習筆記(一):GPU背景知識

Ubuntu16.04:CUDA學習筆記(一):GPU背景知識

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

by breaksoftware)

參考

  1. 《CUDA高效能平行計算》機械工業出版社
  2. CUDA_C_Programming-Guide
  3. CUDA高效能程式設計入門