1
說我有64個threadds在內核CUDA線程閒置
__global__ void kernel(...)
{
int i = threadIdx.x;
... ...
if (i < 32)
{
... ...
}
}
基本某一點後,我將不使用線程32到63了。那麼他們會怎麼做?他們是否還會消耗處理器的能量,或者他們只是死了。
說我有64個threadds在內核CUDA線程閒置
__global__ void kernel(...)
{
int i = threadIdx.x;
... ...
if (i < 32)
{
... ...
}
}
基本某一點後,我將不使用線程32到63了。那麼他們會怎麼做?他們是否還會消耗處理器的能量,或者他們只是死了。
他們根本不會產生任何指令要發佈和執行。讓我們說「死」。
每個線程都在半個warp中(或者可能warp取決於你的體系結構)同時執行相同的指令,所以半warp中的所有其他線程繼續運行,只是它們的輸出被抑制。所有其他半經紗(或可能是經紗)作爲資源被釋放回系統。
它們會消耗一些處理器時間,基本上在同步函數內部旋轉。 – Anycorn 2010-10-11 07:19:35
如果可以的話,最好使用32的塊大小 – 2010-10-11 08:06:23
它們不會消耗處理器時間,一旦它們到達函數的末尾,它們將變爲「死亡」並且不再需要循環。 – Tom 2010-10-13 17:07:16