在英偉達gpu中,執行緒束是最小的執行單位,執行緒束的大小代表了乙個sm同時併發的執行緒數目。一般在sm實際排程中,sm獲取到當前指令後,會將該指令廣播到sm內所有的硬體core中即sm中, 這樣做可以減少從記憶體中讀取指令的次數,提高效率。
而在cpu中,每個核是單獨執行乙個任務,在執行前每個核各自從記憶體中讀取指令,這樣會降低指令吞吐量。
由於gpu的這種特性,一次性將所有指令廣播到所有sp中,意味著sp中所有執行的指令都是相同的,如果在乙個指令**中存在一些if else, for while等條件判斷語句, 就會造成該sm中的有些sp指令不同, 這叫執行緒束分化。
執行緒束分化是嚴重影響gpu效能發揮的乙個重要因素。cpu在執行完分支結構的乙個分支之後會接著執行另外乙個分支。對於不滿足分支條件的執行緒,gpu在執行這塊**的時候會將它們設定成未啟用狀態。當這塊**執行完畢後,gpu繼續執行另乙個分支,意味著sm要多取一次指令並廣播到所有執行緒中,這時剛剛不滿足分支條件的執行緒如果滿足當前的分支條件,那麼它們將被啟用,然後執行這段點後,所有執行緒聚合,繼續向下執行。
而cpu不同,cpu有較為複雜的邏輯判斷,在編譯時會將所有分支進行**,如果**準確,那麼cpu就避免一次失速事件。如果**錯誤,cpu則需要重新執行**指令,然後獲取另乙個分支的指令,再將其添入管線之中。
gpu中線程束分化會導致gpu的利用率存在突然下降,sm中的執行緒束指令,當存在分支時,首先執行的是條件分支1,此時滿足條件分支1的執行緒將執行,而不滿足條件分支1的執行緒將處於等待時間,接著執行條件分支2,此時滿足條件分支2的執行緒執行,不滿足條件分支2的執行緒處於等待時間,gpu利用率永遠達不到100%,因為始終有部分執行緒存在等待狀態。
CUDA 執行緒束分化
1.執行緒束分化 執行緒束是sm中基本的執行單元。當乙個執行緒塊的網格被啟動後,網格中的執行緒塊分布在sm中。一旦執行緒塊被排程到乙個sm上,執行緒塊中的執行緒會被進一步劃分為執行緒束。乙個執行緒束由32個連續的執行緒組成,在乙個執行緒束中,所有的執行緒按照單指令多執行緒 simt 方式執行 也就是...
CUDA 學習(七) 執行緒束
一 概述 執行緒束是gpu的基本執行單元。gpu是一組simd 向量處理器的集合。每一組執行緒或執行緒束中的執行緒同時執行。在理想狀態下,獲取當前指令只需要一次訪存,然後將指令廣播到這個執行緒所占用的所有sp中。當使用gpu進行程式設計時,必須使用向量型別指令,因為gpu採用的是向量體系結構,只有讓...
線束測試儀 汽車線束檢測應用
線束測試儀是汽車線束檢測行業的新寵。1 線束測試儀全程電腦操作和運轉,節省了大量的人力。我們只需要將需要進行檢測的線束接通到汽車線束檢測儀上,就可以一鍵自動完成檢測,並且在顯示器上顯示出存在問題的線束,直接將問題排查出來。2 汽車線束測試儀速度非常快。傳統意義上的檢測一般是借助萬用表等儀器逐個地將線...