【发布时间】:2021-10-10 01:09:39
【问题描述】:
__golbal__ void function(){
... some codes...
if(0<A<512){
... a few codes...
}
else if (512<=A){
... a lot of codes...
}
... some codes...
}
int main(){
some code for GPU...
...
for(int i=0; i<1024 ; i++){
A[i] = i;
}
...
some code for GPU...
}
我正在研究 GPGPU,我开始对分支分歧感到好奇。 我知道在处理 GPU 中的分支分歧时,它使用 SIMT 堆栈,并且将执行同一 warp 中的选定线程,而其他线程则不会。那么,如果同一个warp中的所有线程都没有被选中,指令会执行还是不执行?
例如, 在上面的代码中,一半线程将采用 if,而另一半线程将采用 else if。如果在同一个warp中的线程中所有A都小于512,是否会执行关于else if的指令?或者直接跳过它们。
【问题讨论】:
-
www2.eecs.berkeley.edu/Pubs/TechRpts/2016/EECS-2016-143.pdf P.18 - 19. 我找到了一个关于我的问题的例子