我的理解是,如果我有以下形式的 CUDA 代码:
if (condition) {
// do x
}
else {
//do y
}
然后由于扭曲中线程的 SIMT 执行,条件的执行将被序列化,并且所有线程都需要运行代码的 x 和 y 部分。例外情况是如果分支很大,在这种情况下编译器将插入一个检查 using__any以避免不必要的运行代码。
但是,如果我已经提前知道 warp 中的所有线程都将具有相同的值condition,那么这个__any操作是不必要的,只是为了减慢我的代码速度。
我想知道是否有任何方法可以指示编译器不包含此投票操作,而是假设条件的评估对于经线中的所有线程都是相同的,并且只运行相应的代码块?