跳过内核中的部分循环会导致扭曲发散吗?

时间:2015-12-07 09:37:19

标签: cuda

我的CUDA内核中有一个循环:

for-each(e in source-array)
{
    if(xxx(e)) continue;

    Do something ...
}

source-array 是一个向所有内核广播的数组,但不同的线程在不同的时间执行 continue 。但是通过数组,继续触发固定时间。

嗯,我知道当某些线程执行继续而其他线程 Do Something 时肯定会出现扭曲分歧,但这些线程会在下一个循环中再次启动(即下一个 e )?或者线程会等到其他线程完成整个for-each循环?

1 个答案:

答案 0 :(得分:2)

在出现warp散布的情况下,遇到s = "1239123-a4"; doesitmatch = s.split('').sort().join('').match(/^-[0-9]{8}[a-zA-Z]$/); 条件的线程将等待warp中的其他线程到达循环的末尾,之后执行路径将收敛回来。