CUDA学习----sp, sm, thread, block, grid, warp概念
CUDA學習----sp, sm, thread, block, grid, warp概念??
2017-01-11 17:14:28|??分類: HPC&CUDA優化 |??標簽:cuda??gpu??hpc?? |舉報 |字號?訂閱
下載LOFTER 我的照片書??| 掌握部分硬件知識,有助于程序員編寫更好性能的CUDA程序,本文目的是理清sp,sm,thread,block,grid,warp之間的關系。? 首先我們要明確:SP(streaming Process),SM(streaming multiprocessor)是硬件(GPU hardware)概念。而thread,block,grid,warp是軟件上的(CUDA)概念。從硬件看
- SP:最基本的處理單元,streaming processor,也稱為CUDA core。最后具體的指令和任務都是在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有非常嚴格的限制,也就限制了并行能力。
從軟件看
thread,block,grid,warp是CUDA編程上的概念,以方便程序員軟件設計,組織線程,同樣的我們給出一個示意圖來表示。
- thread:一個CUDA的并行程序會被以許多個threads來執行。
- block:數個threads會被群組成一個block,同一個block中的threads可以同步,也可以通過shared memory通信。
- grid:多個blocks則會再構成grid。
- warp:GPU執行程序時的調度單位,目前cuda的warp的大小為32,同在一個warp的線程,以不同數據資源執行相同的指令,這就是所謂 SIMT(單指令多線程)。
對應關系
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個。?
SIMT和SIMD
CUDA是一種典型的SIMT架構(單指令多線程架構),SIMT和SIMD(Single Instruction, Multiple Data)類似,SIMT應該算是SIMD的升級版(SIMD < SIMT < SMT),更靈活,但效率略低,SIMT是NVIDIA提出的GPU新概念。二者都通過將同樣的指令廣播給多個執行單元來實現并行。一個主要的不同就是,SIMD要求所有的vector element在一個統一的同步組里同步的執行,而SIMT允許線程們在一個warp中獨立的執行。SIMT有三個SIMD沒有的主要特征:?
- 每個thread擁有自己的instruction address counter
- 每個thread擁有自己的狀態寄存器
- 每個thread可以有自己獨立的執行路徑
SIMD、SIMT和SMT區別和聯系:SIMT、SIMD、SMT區別
總結
以上是生活随笔為你收集整理的CUDA学习----sp, sm, thread, block, grid, warp概念的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java对时间使用des加密_Java如
- 下一篇: CUDA性能优化----线程配置