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中執行緒索引執行緒索引
- iOS底層原理 - 常駐執行緒iOS執行緒
- 死磕java底層(一)—多執行緒Java執行緒
- 多執行緒------執行緒與程式/執行緒排程/建立執行緒執行緒
- 以 DEBUG 方式深入理解執行緒的底層執行原理執行緒
- 執行緒與多執行緒執行緒
- 多執行緒【執行緒池】執行緒
- 執行緒和執行緒池執行緒
- 多執行緒--執行緒管理執行緒
- 執行緒 執行緒池 Task執行緒
- MySQL底層概述—3.InnoDB執行緒模型MySql執行緒模型
- osi7層模型及執行緒和程式模型執行緒
- Java 多執行緒的一次整理Java執行緒
- Java面試必問之執行緒池的建立使用、執行緒池的核心引數、執行緒池的底層工作原理Java面試執行緒
- 保證執行緒在主執行緒執行執行緒
- Java多執行緒-執行緒中止Java執行緒
- 多執行緒之初識執行緒執行緒
- 執行緒控制之休眠執行緒執行緒
- 【多執行緒總結(二)-執行緒安全與執行緒同步】執行緒
- .NET Core 執行緒池(ThreadPool)底層原理淺談執行緒thread
- 執行緒、開啟執行緒的兩種方式、執行緒下的Join方法、守護執行緒執行緒
- 執行緒(一)——執行緒,執行緒池,Task概念+程式碼實踐執行緒
- java執行緒之守護執行緒和使用者執行緒Java執行緒
- 多執行緒之手撕執行緒池執行緒
- 多執行緒和多執行緒同步執行緒
- Java多執行緒-執行緒狀態Java執行緒
- Java多執行緒-執行緒通訊Java執行緒
- kuangshenshuo-多執行緒-執行緒池執行緒
- java多執行緒9:執行緒池Java執行緒
- java執行緒執行緒休眠,sleep方法Java執行緒
- java 多執行緒守護執行緒Java執行緒
- Java多執行緒(2)執行緒鎖Java執行緒
- 【java多執行緒】(二)執行緒停止Java執行緒
- 多執行緒系列之 執行緒安全執行緒
- 二. 執行緒管理之執行緒池執行緒
- iOS 多執行緒之執行緒安全iOS執行緒
- Java多執行緒之執行緒中止Java執行緒
- Android多執行緒之執行緒池Android執行緒
- 玩轉java多執行緒 之多執行緒基礎 執行緒狀態 及執行緒停止實戰Java執行緒