我的CUDA内核中有一个循环:
for-each(e in source-array)
{
if(xxx(e)) continue;
Do something ...
}
source-array 是一个向所有内核广播的数组,但不同的线程在不同的时间执行 continue 。但是通过数组,继续触发固定时间。
嗯,我知道当某些线程执行继续而其他线程 Do Something 时肯定会出现扭曲分歧,但这些线程会在下一个循环中再次启动(即下一个 e )?或者线程会等到其他线程完成整个for-each循环?
答案 0 :(得分:2)
在出现warp散布的情况下,遇到s = "1239123-a4";
doesitmatch = s.split('').sort().join('').match(/^-[0-9]{8}[a-zA-Z]$/);
条件的线程将等待warp中的其他线程到达循环的末尾,之后执行路径将收敛回来。