CUDA学习----sp, sm, thread, block, grid, warp概念
CUDA學(xué)習(xí)----sp, sm, thread, block, grid, warp概念??
2017-01-11 17:14:28|??分類: HPC&CUDA優(yōu)化 |??標(biāo)簽:cuda??gpu??hpc?? |舉報(bào) |字號?訂閱
下載LOFTER 我的照片書??| 掌握部分硬件知識,有助于程序員編寫更好性能的CUDA程序,本文目的是理清sp,sm,thread,block,grid,warp之間的關(guān)系。? 首先我們要明確:SP(streaming Process),SM(streaming multiprocessor)是硬件(GPU hardware)概念。而thread,block,grid,warp是軟件上的(CUDA)概念。從硬件看
- SP:最基本的處理單元,streaming processor,也稱為CUDA core。最后具體的指令和任務(wù)都是在SP上處理的。GPU進(jìn)行并行計(jì)算,也就是很多個(gè)SP同時(shí)做處理。
- SM:多個(gè)SP加上其他的一些資源組成一個(gè)streaming multiprocessor。也叫GPU大核,其他資源如:warp scheduler,register,shared memory等。SM可以看做GPU的心臟(對比CPU核心),register和shared memory是SM的稀缺資源。CUDA將這些資源分配給所有駐留在SM中的threads。因此,這些有限的資源就使每個(gè)SM中 active warps有非常嚴(yán)格的限制,也就限制了并行能力。
從軟件看
thread,block,grid,warp是CUDA編程上的概念,以方便程序員軟件設(shè)計(jì),組織線程,同樣的我們給出一個(gè)示意圖來表示。
- thread:一個(gè)CUDA的并行程序會被以許多個(gè)threads來執(zhí)行。
- block:數(shù)個(gè)threads會被群組成一個(gè)block,同一個(gè)block中的threads可以同步,也可以通過shared memory通信。
- grid:多個(gè)blocks則會再構(gòu)成grid。
- warp:GPU執(zhí)行程序時(shí)的調(diào)度單位,目前cuda的warp的大小為32,同在一個(gè)warp的線程,以不同數(shù)據(jù)資源執(zhí)行相同的指令,這就是所謂 SIMT(單指令多線程)。
對應(yīng)關(guān)系
GPU中每個(gè)sm都設(shè)計(jì)成支持?jǐn)?shù)以百計(jì)的線程并行執(zhí)行,并且每個(gè)GPU都包含了很多的SM,所以GPU支持成百上千的線程并行執(zhí)行。當(dāng)一個(gè)kernel啟動后,thread會被分配到這些SM中執(zhí)行。大量的thread可能會被分配到不同的SM,同一個(gè)block中的threads必然在同一個(gè)SM中并行(SIMT)執(zhí)行。每個(gè)thread擁有它自己的程序計(jì)數(shù)器和狀態(tài)寄存器,并且用該線程自己的數(shù)據(jù)執(zhí)行指令,這就是所謂的Single Instruction Multiple Thread。?
一個(gè)SP可以執(zhí)行一個(gè)thread,但是實(shí)際上并不是所有的thread能夠在同一時(shí)刻執(zhí)行。Nvidia把32個(gè)threads組成一個(gè)warp,warp是調(diào)度和運(yùn)行的基本單元。warp中所有threads并行的執(zhí)行相同的指令。一個(gè)warp需要占用一個(gè)SM運(yùn)行,多個(gè)warps需要輪流進(jìn)入SM。由SM的硬件warp scheduler負(fù)責(zé)調(diào)度。目前每個(gè)warp包含32個(gè)threads(NVIDIA保留修改數(shù)量的權(quán)利)。所以,一個(gè)GPU上resident thread最多只有 SM*warp個(gè)。?
SIMT和SIMD
CUDA是一種典型的SIMT架構(gòu)(單指令多線程架構(gòu)),SIMT和SIMD(Single Instruction, Multiple Data)類似,SIMT應(yīng)該算是SIMD的升級版(SIMD < SIMT < SMT),更靈活,但效率略低,SIMT是NVIDIA提出的GPU新概念。二者都通過將同樣的指令廣播給多個(gè)執(zhí)行單元來實(shí)現(xiàn)并行。一個(gè)主要的不同就是,SIMD要求所有的vector element在一個(gè)統(tǒng)一的同步組里同步的執(zhí)行,而SIMT允許線程們在一個(gè)warp中獨(dú)立的執(zhí)行。SIMT有三個(gè)SIMD沒有的主要特征:?
- 每個(gè)thread擁有自己的instruction address counter
- 每個(gè)thread擁有自己的狀態(tài)寄存器
- 每個(gè)thread可以有自己獨(dú)立的執(zhí)行路徑
SIMD、SIMT和SMT區(qū)別和聯(lián)系:SIMT、SIMD、SMT區(qū)別
總結(jié)
以上是生活随笔為你收集整理的CUDA学习----sp, sm, thread, block, grid, warp概念的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java对时间使用des加密_Java如
- 下一篇: CUDA性能优化----线程配置