OpenCL中的条件可能会受到性能影响,因为将评估所有分支。如果我可以使用step()来表达我的问题,那是否可以解决这个问题?
答案 0 :(得分:2)
由于OpenCL只是一个API规范,因此最常见的答案是:依赖于实现。
然而,由于这个功能可以(相对)轻松地在任何ALU上计算 - 通常只需一条指令 - 我认为可以非常安全地假设答案实际上是 No ,它没有' t算作条件。
关于问题的第二部分,比如@DarkZeros建议,它并没有完全解决它 - 但它是正确方向的一步(嘿嘿):如果你可以使用step()函数的结果而不用这个用途触发了一个分支,然后你很好。
为了说明,假设我想要执行以下操作:
if (x < 100) {
z = foo();
y = a[z];
}
else {
y = a[x];
}
使用step()
,我可以:
int s = step(100, x);
z = foo();
y = a[z * s + x * (1-s)];
所以,这里没有分支 - 但我总是需要调用foo()
(或内联它) - 因此我的利益是有限的(或根本没有任何好处)。