學習cuda編程時的疑問

1、thread,block,grid,warp,sp,sm概念以及關係?

答:sp: 最基本的處理單元,streaming processor  最後具體的指令和任務都是在sp上處理的。GPU進行並行計算,也就是很多個sp同時做處理。

sm:多個SP加上其他的一些資源組成一個streaming multiprocessor。也叫GPU大核,其他資源如:warp scheduler,register,shared memory等。SM可以看做GPU的心臟(對比CPU核心),register和shared memory是SM的稀缺資源。CUDA將這些資源分配給所有駐留在SM中的threads。因此,這些有限的資源就使每個SM中active warps有非常嚴格的限制,也就限制了並行能力。

warp:GPU執行程序時的調度單位,目前cuda的warp的大小爲32,同在一個warp的線程,以不同數據資源執行相同的指令。

grid、block、thread:在利用cuda進行編程時,一個grid分爲多個block,而一個block分爲多個thread.其中任務劃分到是否影響最後的執行效果。劃分的依據是任務特性和GPU本身的硬件特性

首先我們要明確:SP(streaming Process),SM(streaming multiprocessor)是硬件(GPU hardware)概念。而thread,block,grid,warp是軟件上的(CUDA)概念。所以在資料時注意討論的是硬件還是編程。

從硬件來看,每個SM包含的SP數量依據GPU架構而不同,Fermi架構GF100是32個,GF10X是48個,Kepler架構都是192個,Maxwell都是128個。相同架構的GPU包含的SM數量則根據GPU的中高低端來定。下圖給出Nvidia GTX980 的一個SM示意圖,圖中每個綠色框框表示一個SP。注意,在Maxwell架構中,Nvidia已經把SM改叫SMM。下圖表示的僅僅是一個SMM,一個GPU可以有多個SM(比如16個),最終一個GPU可能包含有上千個SP。這麼多核心“同時運行”,速度可想而知,這個引號只是想表明實際上,軟件邏輯上是所有SP是並行的,但是物理上並不是所有SP都能同時執行計算,因爲有些會處於掛起,就緒等其他狀態,這有關GPU的線程調度。

從軟件看,thread,block,grid,warp是CUDA編程上的概念,以方便程序員軟件設計,組織線程,同樣的我們給出一個示意圖來表示。

它們的關係,從軟件上看,SM更像一個獨立的CPU core。SM(Streaming Multiprocessors)是GPU架構中非常重要的部分,GPU硬件的並行性就是由SM決定的。以Fermi架構爲例,其包含以下主要組成部分:

  •     CUDA cores
  •     Shared Memory/L1Cache
  •     Register File
  •     Load/Store Units
  •     Special Function Units
  •     Warp Scheduler

GPU中每個sm都設計成支持數以百計的線程並行執行,並且每個GPU都包含了很多的SM,所以GPU支持成百上千的線程並行執行。當一個kernel啓動後,thread會被分配到這些SM中執行。大量的thread可能會被分配到不同的SM,同一個block中的threads必然在同一個SM中並行(SIMT)執行。每個thread擁有它自己的程序計數器和狀態寄存器,並且用該線程自己的數據執行指令,這就是所謂的Single Instruction Multiple Thread。

一個SP可以執行一個thread,但是實際上並不是所有的thread能夠在同一時刻執行。Nvidia把32個threads組成一個warp,warp是調度和運行的基本單元。warp中所有threads並行的執行相同的指令。一個warp需要佔用一個SM運行,多個warps需要輪流進入SM。由SM的硬件warp scheduler負責調度。目前每個warp包含32個threads(Nvidia保留修改數量的權利)。所以,一個GPU上resident thread最多隻有 SM*warp個。

2、如何劃分block,thread的數量纔是最優?

3、SP使用SM中的寄存器是否就是本地內存的物理單元?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章