2010-10-11 58 views
1

說我有64個threadds在內核CUDA線程閒置

__global__ void kernel(...) 
{ 
    int i = threadIdx.x; 
    ... ... 
    if (i < 32) 
    { 
     ... ... 
    } 
} 

基本某一點後,我將不使用線程32到63了。那麼他們會怎麼做?他們是否還會消耗處理器的能量,或者他們只是死了。

+0

它們會消耗一些處理器時間,基本上在同步函數內部旋轉。 – Anycorn 2010-10-11 07:19:35

+0

如果可以的話,最好使用32的塊大小 – 2010-10-11 08:06:23

+0

它們不會消耗處理器時間,一旦它們到達函數的末尾,它們將變爲「死亡」並且不再需要循環。 – Tom 2010-10-13 17:07:16

回答

3

他們根本不會產生任何指令要發佈和執行。讓我們說「死」。

0

每個線程都在半個warp中(或者可能warp取決於你的體系結構)同時執行相同的指令,所以半warp中的所有其他線程繼續運行,只是它們的輸出被抑制。所有其他半經紗(或可能是經紗)作爲資源被釋放回系統。