带有标量参数的 Opencl select 方法

Opencl select method with scalar argument

我有以下代码行,如果标量不为零,我希望 a4 的每个分量等于 c4 的相应分量,否则将其设置为 b4 的相应分量:

 uint4 a4 =       select(b4,   c4,   (uint4)(scalar != 0));

但是,阅读 select 文档,似乎必须为要选择的 c4 组件设置 MSB。

上面这行是正确的吗?我感觉不是。

原来我只需要将第三个参数调整为: (uint4) 标量 != 0

它会是正确的。

这是一只讨厌的小家伙。标量的真值与向量的真值不匹配。这是尝试有效支持 altivec/SSE-style 掩码比较的结果。这是 OpenCL 的一个已知但未广泛宣传的怪癖。