OpenCL的select运算符对什么有用?

问题描述 投票:0回答:1

我注意到OpenCL具有select()函数/内建函数/运算符,它似乎与C和C ++中的三元运算符相似,但不完全相同。 select()?:有什么区别,如果有后者,为什么甚至需要前者?

opencl conditional-operator
1个回答
0
投票

select运算符必要/有用的原因是使用OpenCL vector types,例如int2float4等。与C ++不同,您可以重载各种运算符以赋予它们自定义语义-在C语言(和OpenCL C语言)中,只有默认行为。对于三元运算符,这意味着对于

x ? expression_for_true : expression_for_false

a single检查将被执行,并且将使用单个适当的值-即使所有三个操作数均为OpenCL矢量类型。

相反,使用select():

  • 所有元素必须与矢量类型具有相同的尺寸,例如int4float4float4
  • a different检查向量类型中的每个位置。
  • 针对向量类型内的每个位置,在真假表达式的元素之间进行选择[]。同样,让我们​​感到困惑的是,select()的参数顺序与三元运算符不同:x ? y : z对应于select(z, y, x)
  • 因此,如果

x = (int4) ( 1, 0 ); y = (float4) ( 1.2, 3.4 ); z = (float4) ( 5.6, 7.8 );

然后

select(z, y, x) == (float4) ( 1.2, 7.8 );

另请参见Khronos OpenCL文档,herehere
© www.soinside.com 2019 - 2024. All rights reserved.