日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

發布時間:2025/3/15 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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有非常嚴格的限制,也就限制了并行能力。
需要指出,每個SM包含的SP數量依據GPU架構而不同,Fermi架構GF100是32個,GF10X是48個,Kepler架構GK110都是192個,Maxwell都是128個。相同架構的GPU包含的SM數量則根據GPU的中高低端來定。 軟件邏輯上是所有SP是并行的,但是物理上并不是所有SP都能同時執行計算,因為有些會處于掛起,就緒等其他狀態。

從軟件看


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

SIMD、SIMT和SMT區別和聯系:SIMT、SIMD、SMT區別

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。