CUDA執行緒層次
在執行時,GPU的任務分配單元(global block scheduler)將網格分配到GPU晶片上。啟動CUDA 核心時,需要將網格資訊從CPU傳輸到GPU。任務分配單元根據這些資訊將塊分配到SM上。任務分配單元使用的是輪詢策略:輪詢檢視SM是否還有足夠的資源來執行新的塊,如果有則給SM分配一個新的塊,如果沒有則檢視下一個SM。決定能否分配的因素有:每個塊使用的共享儲存器數量,每個塊使用的暫存器數量,以及其它的一些限制條件。任務分配單元在SM的任務分配中保持平衡,但是程式設計師可以通過更改塊內執行緒數,每個執行緒使用的暫存器數和共享儲存器數來隱式的控制,從而保證SM之間的任務均衡。任務以這種方式劃分能夠使程式獲得了可擴充套件性:由於每個子問題都能在任意一個SM上執行,CUDA程式在核心數量不同的處理器上都能正常執行,這樣就隱藏了硬體差異。
對於程式設計師來說,他們需要將任務劃分為互不相干的粗粒度子問題(最好是易平行計算),再將每個子問題劃分為能夠使用執行緒處理的問題。
同一執行緒塊中的執行緒開始於相同的指令地址,理論上能夠以不同的分支執行。但實際上,在塊內的分支因為SM構架的原因被大大限制了。核心函式實質上是以塊為單位執行的。同一執行緒塊中的執行緒需要SM中的共享儲存器共享資料,因此它們必須在同一個SM中發射。執行緒塊中的每一個執行緒被髮射到一個SP上。
任務分配單元可以為每個SM分配最多8個塊。而SM中的執行緒排程單元又將分配到的塊進行細分,將其中的執行緒組織成更小的結構,稱為執行緒束(warp)。在CUDA中,warp對程式設計師來說是透明的,它的大小可能會隨著硬體的發展發生變化,在當前版本的CUDA中,每個warp是由32個執行緒組成的。SM中一條指令的延遲最小為4個指令週期。8個SP採用了發射一次指令,執行4次的流水線結構。所以由32個執行緒組成的Warp是CUDA程式執行的最小單位,並且同一個warp是嚴格序列的,因此在warp內是無須同步的。在一個SM中可能同時有來自不同塊的warp。當一個塊中的warp在進行訪存或者同步等高延遲操作時,另一個塊可以佔用SM中的計算資源。這樣,在SM內就實現了簡單的亂序執行。不同塊之間的執行沒有順序,完全並行。無論是在一次只能處理一個執行緒塊的GPU上,還是在一次能處理數十乃至上百個執行緒塊的GPU上,這一模型都能很好的適用。
目前,某一時刻只能有一個核心函式正在執行,但是在Fermi架構中,這一限制已被解除。如果在一個核心訪問資料時,另一個核心能夠進行計算,則可以有效的提高裝置的利用率。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23057064/viewspace-626593/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 簡述CUDA執行緒及求CUDA中執行緒索引執行緒索引
- CUDA執行模式模式
- JAVA執行緒建立底層流程Java執行緒
- iOS底層原理 - 常駐執行緒iOS執行緒
- 使用執行緒執行框架的一次經歷執行緒框架
- 死磕java底層(一)—多執行緒Java執行緒
- 多執行緒------執行緒與程式/執行緒排程/建立執行緒執行緒
- 簡單的執行緒同步問題:兩個執行緒交替執行N次【Synchronized、Lock、ArrayBlockingQueue】執行緒synchronizedBloC
- 多執行緒-執行緒控制之休眠執行緒執行緒
- 多執行緒-執行緒控制之加入執行緒執行緒
- 多執行緒-執行緒控制之禮讓執行緒執行緒
- 多執行緒-執行緒控制之中斷執行緒執行緒
- Java 多執行緒的一次整理Java執行緒
- 以 DEBUG 方式深入理解執行緒的底層執行原理執行緒
- osi7層模型及執行緒和程式模型執行緒
- Java面試必問之執行緒池的建立使用、執行緒池的核心引數、執行緒池的底層工作原理Java面試執行緒
- 多執行緒-執行緒控制之守護執行緒執行緒
- 執行緒和執行緒池執行緒
- 多執行緒【執行緒池】執行緒
- 多執行緒--執行緒管理執行緒
- Java多執行緒——執行緒Java執行緒
- 執行緒 執行緒池 Task執行緒
- 保證執行緒在主執行緒執行執行緒
- 多執行緒訪問—限制某個方法只執行一次執行緒
- 多執行緒之初識執行緒執行緒
- Java多執行緒-執行緒中止Java執行緒
- 執行緒控制之休眠執行緒執行緒
- Java多執行緒——執行緒池Java執行緒
- c#執行緒-執行緒同步C#執行緒
- 多執行緒-執行緒概述等執行緒
- 執行緒1-單執行緒執行緒
- 執行緒3--執行緒安全執行緒
- 執行緒同步及執行緒鎖執行緒
- Java執行緒:執行緒中斷Java執行緒
- 【多執行緒總結(二)-執行緒安全與執行緒同步】執行緒
- java執行緒之守護執行緒和使用者執行緒Java執行緒
- 執行緒(一)——執行緒,執行緒池,Task概念+程式碼實踐執行緒
- 從一次生產消費者的bug看看執行緒池如何增加執行緒執行緒