日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CUDA学习----sp, sm, thread, block, grid, warp概念

發(fā)布時間:2025/3/15 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CUDA学习----sp, sm, thread, block, grid, warp概念 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

CUDA學(xué)習(xí)----sp, sm, thread, block, grid, warp概念??

2017-01-11 17:14:28|??分類: HPC&CUDA優(yōu)化 |??標(biāo)簽:cuda??gpu??hpc?? |舉報 |字號?訂閱

? ? ? ? 下載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)行并行計算,也就是很多個SP同時做處理。
  • SM:多個SP加上其他的一些資源組成一個streaming multiprocessor。也叫GPU大核,其他資源如:warp scheduler,register,shared memory等。SM可以看做GPU的心臟(對比CPU核心),register和shared memory是SM的稀缺資源。CUDA將這些資源分配給所有駐留在SM中的threads。因此,這些有限的資源就使每個SM中 active warps有非常嚴(yán)格的限制,也就限制了并行能力。
需要指出,每個SM包含的SP數(shù)量依據(jù)GPU架構(gòu)而不同,Fermi架構(gòu)GF100是32個,GF10X是48個,Kepler架構(gòu)GK110都是192個,Maxwell都是128個。相同架構(gòu)的GPU包含的SM數(shù)量則根據(jù)GPU的中高低端來定。 軟件邏輯上是所有SP是并行的,但是物理上并不是所有SP都能同時執(zhí)行計算,因?yàn)橛行幱趻炱?#xff0c;就緒等其他狀態(tài)。

從軟件看


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

  • thread:一個CUDA的并行程序會被以許多個threads來執(zhí)行。
  • block:數(shù)個threads會被群組成一個block,同一個block中的threads可以同步,也可以通過shared memory通信。
  • grid:多個blocks則會再構(gòu)成grid。
  • warp:GPU執(zhí)行程序時的調(diào)度單位,目前cuda的warp的大小為32,同在一個warp的線程,以不同數(shù)據(jù)資源執(zhí)行相同的指令,這就是所謂 SIMT(單指令多線程)。
?

對應(yīng)關(guān)系


GPU中每個sm都設(shè)計成支持?jǐn)?shù)以百計的線程并行執(zhí)行,并且每個GPU都包含了很多的SM,所以GPU支持成百上千的線程并行執(zhí)行。當(dāng)一個kernel啟動后,thread會被分配到這些SM中執(zhí)行。大量的thread可能會被分配到不同的SM,同一個block中的threads必然在同一個SM中并行(SIMT)執(zhí)行。每個thread擁有它自己的程序計數(shù)器和狀態(tài)寄存器,并且用該線程自己的數(shù)據(jù)執(zhí)行指令,這就是所謂的Single Instruction Multiple Thread。?

  一個SP可以執(zhí)行一個thread,但是實(shí)際上并不是所有的thread能夠在同一時刻執(zhí)行。Nvidia把32個threads組成一個warp,warp是調(diào)度和運(yùn)行的基本單元。warp中所有threads并行的執(zhí)行相同的指令。一個warp需要占用一個SM運(yùn)行,多個warps需要輪流進(jìn)入SM。由SM的硬件warp scheduler負(fù)責(zé)調(diào)度。目前每個warp包含32個threads(NVIDIA保留修改數(shù)量的權(quán)利)。所以,一個GPU上resident thread最多只有 SM*warp個。?

SIMT和SIMD


  CUDA是一種典型的SIMT架構(gòu)(單指令多線程架構(gòu)),SIMT和SIMD(Single Instruction, Multiple Data)類似,SIMT應(yīng)該算是SIMD的升級版(SIMD < SIMT < SMT),更靈活,但效率略低,SIMT是NVIDIA提出的GPU新概念。二者都通過將同樣的指令廣播給多個執(zhí)行單元來實(shí)現(xiàn)并行。一個主要的不同就是,SIMD要求所有的vector element在一個統(tǒng)一的同步組里同步的執(zhí)行,而SIMT允許線程們在一個warp中獨(dú)立的執(zhí)行。SIMT有三個SIMD沒有的主要特征:?

  • 每個thread擁有自己的instruction address counter
  • 每個thread擁有自己的狀態(tài)寄存器
  • 每個thread可以有自己獨(dú)立的執(zhí)行路徑
前面已經(jīng)說block是軟件概念,一個block只會由一個sm調(diào)度,程序員在開發(fā)時,通過設(shè)定block的屬性,告訴GPU硬件,我有多少個線程,線程怎么組織。而具體怎么調(diào)度由sm的warps scheduler負(fù)責(zé),block一旦被分配好SM,該block就會一直駐留在該SM中,直到執(zhí)行結(jié)束。一個SM可以同時擁有多個blocks,但需要序列執(zhí)行。下圖顯示了軟件與硬件方面的術(shù)語對應(yīng)關(guān)系:? ? 需要注意的是,大部分threads只是邏輯上并行,并不是所有的thread可以在物理上同時執(zhí)行。例如,遇到分支語句(if else,while,for等)時,各個thread的執(zhí)行條件不一樣必然產(chǎn)生分支執(zhí)行,這就導(dǎo)致同一個block中的線程可能會有不同步調(diào)。另外,并行thread之間的共享數(shù)據(jù)會導(dǎo)致競態(tài):多個線程請求同一個數(shù)據(jù)會導(dǎo)致未定義行為。CUDA提供了cudaThreadSynchronize()來同步同一個block的thread以保證在進(jìn)行下一步處理之前,所有thread都到達(dá)某個時間點(diǎn)。? 同一個warp中的thread可以以任意順序執(zhí)行,active warps被sm資源限制。當(dāng)一個warp空閑時,SM就可以調(diào)度駐留在該SM中另一個可用warp。在并發(fā)的warp之間切換是沒什么消耗的,因?yàn)橛布Y源早就被分配到所有thread和block,所以該新調(diào)度的warp的狀態(tài)已經(jīng)存儲在SM中了。不同于CPU,CPU切換線程需要保存/讀取線程上下文(register內(nèi)容),這是非常耗時的,而GPU為每個threads提供物理register,無需保存/讀取上下文。?

SIMD、SIMT和SMT區(qū)別和聯(lián)系:SIMT、SIMD、SMT區(qū)別

總結(jié)

以上是生活随笔為你收集整理的CUDA学习----sp, sm, thread, block, grid, warp概念的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。