cuda中的分支发散

cuda中的分支发散,cuda,Cuda,我希望更改此代码以防止出现如此多的分支分歧 if (v == u) { ++c; ++u_t; ++v_t; } else if (v < u){ ++u_t; } else { ++v_t; } 虽然这段代码给出了整个程序的错误答案。我是不是错过了一些显而易见的东西?这一切都归结为 if (v == u) ++c; if (v <= u) ++u_t; if (v >= u) ++v_t; if(v==u)++c; 如果(v=u)+

我希望更改此代码以防止出现如此多的分支分歧

if (v == u) {
    ++c;
    ++u_t;
    ++v_t;
}
else if (v < u){
    ++u_t;
}
else {
    ++v_t;
}
虽然这段代码给出了整个程序的错误答案。我是不是错过了一些显而易见的东西?

这一切都归结为

if (v == u) ++c;
if (v <= u) ++u_t;
if (v >= u) ++v_t;
if(v==u)++c;
如果(v=u)++v_t;

你能优化这个吗?不确定您是否可以在不了解代码其余部分的情况下使用。

但我的解决方案是否总是给出相同的结果?我看不出它有什么不同。@ta99mm您的解决方案没有单独的
比较,它基本上是
==
=
u\u t+=(v@huseyintugrulbuyukisik nice@KillzoneKid可能使用
u\u t+=signbit(v-u)
可能更好。谁说该代码中会有分支分歧?
u\u t
不应该在
v>u
时递增,在失败的示例中总是递增。这些是浮点值吗?在这种情况下,具有Nan值的逻辑不是布尔值。
if (v == u) ++c;
if (v <= u) ++u_t;
if (v >= u) ++v_t;