CUDA的硬體架構
CUDA core:最基本的處理單元,在AMD被稱為streaming processor,最后具體的指令和任務都是在CUDA core上處理的,GPU進行并行計算,也就是很多個CUDA core同時做處理,
SM:多個CUDA core加上其他的一些資源組成一個streaming multiprocessor,也叫GPU大核,其他資源如:warp scheduler,register,shared memory等,register和shared memory是SM的稀缺資源,CUDA將這些資源分配給所有駐留在SM中的threads,因此,這些有限的資源就使每個SM中active warps有非常嚴格的限制,也就限制了并行能力
可以使用cudaGetDeviceProperties查看SM和CUDA core的個數
我的顯卡是GTX950m,有5個Mutiprocessors(SM,也稱GPU大核),每個SM有128個CUDA core(SP),總計5*128=640個CUDA core,

CUDA編程模型
CUDA的編程模型包括以下幾個概念:
thread:一個CUDA的并行程式會被以許多個threads來執行,
block:多個threads組成一個block,同一個block中的threads可以同步,也可以通過shared memory通信,
grid:多個blocks構成grid,
warp:每32個執行緒組成一個warp,warp是GPU執行程式時的調度單位,同在一個warp的執行緒,以不同資料資源執行相同的指令,這就是所謂 SIMT,
每個塊的執行緒數是有限制的,因為一個塊的所有執行緒都駐留在同一個處理器核心上,并且必須共享該核心的有限記憶體資源,
我的顯卡允許每個執行緒塊中最多1024個執行緒,每個SM中最多2048個執行緒,

There is a limit to the number of threads per block, since all threads
of a block are expected to reside on the same processor core and must
share the limited memory resources of that core. On current GPUs, a
thread block may contain up to 1024 threads.
聯系起來看
GPU中每個SM都設計成支持數以百計的執行緒并行執行,并且每個GPU都包含了多個SM,所以GPU支持成百上千的執行緒并行執行,
當一個kernel啟動后,thread會被分配到這些SM中執行,大量的thread可能會被分配到不同的SM,同一個block中的threads必然在同一個SM中并行(SIMT)執行,每個thread擁有它自己的程式計數器和狀態暫存器,并且用該執行緒自己的資料執行指令,這就是所謂的Single Instruction Multiple Thread,
一個CUDA core可以執行一個thread,但是實際上并不是所有的thread能夠在同一時刻執行,Nvidia把32個threads組成一個warp,warp是調度和運行的基本單元,warp中所有threads并行的執行相同的指令,一個warp需要占用一個SM運行,多個warps需要輪流進入SM,由SM的硬體warp scheduler負責調度,因此,一個GPU上resident thread最多只有 SM*warp個,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/280246.html
標籤:區塊鏈
下一篇:FastPlanner編譯錯誤
