在OpenCL中,step()是否算作条件?

时间:2013-12-03 20:02:44

标签: opencl gpgpu

OpenCL中的条件可能会受到性能影响,因为将评估所有分支。如果我可以使用step()来表达我的问题,那是否可以解决这个问题?

1 个答案:

答案 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()(或内联它) - 因此我的利益是有限的(或根本没有任何好处)。