ein*_*ica 2 gpgpu simd conditional-operator opencl
我注意到 OpenCL 有一个select()函数/内置/运算符,它似乎类似于 C 和 C++ 中的三元运算符,但又不完全一样。select()和之间有什么区别?:,如果我们有后者,为什么还需要前者?
该运算符是必要/有用的原因select是为了处理 OpenCL向量类型,例如等int2。float4与 C++ 不同,您可以重载各种运算符以赋予它们自定义语义 - 在 C(和 OpenCL C)中只有默认行为。对于三元运算符,这意味着对于
x ? expression_for_true : expression_for_false
Run Code Online (Sandbox Code Playgroud)
将执行单个检查,并使用单个适当的值 - 即使所有三个操作数都是 OpenCL 向量类型。
相反,用select():
int4、float4和float4。另外,让我们有点困惑的是,参数 to 的顺序select()与三元运算符不同:x ? y : z对应于select(z, y, x)。
因此如果
x = (int4) ( 1, 0 );
y = (float4) ( 1.2, 3.4 );
z = (float4) ( 5.6, 7.8 );
Run Code Online (Sandbox Code Playgroud)
然后
select(z, y, x) == (float4) ( 1.2, 7.8 );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
498 次 |
| 最近记录: |