目前还不清楚内置OpenCL函数select
的目的是什么。请有人澄清一下吗?OpenCL内置函数'select'
从OpenCL的规格:
功能选择(gentype一个,gentype B,igentype c)中
回报:用于向量类型的每个分量,导致[I] =如果MSB c [i]的设置? b [i]:a [i]。
什么是MSB在这种情况下?我知道MSB代表最重要的位,但我不知道它是如何与这种情况相关的。
目前还不清楚内置OpenCL函数select
的目的是什么。请有人澄清一下吗?OpenCL内置函数'select'
从OpenCL的规格:
功能选择(gentype一个,gentype B,igentype c)中
回报:用于向量类型的每个分量,导致[I] =如果MSB c [i]的设置? b [i]:a [i]。
什么是MSB在这种情况下?我知道MSB代表最重要的位,但我不知道它是如何与这种情况相关的。
的OpenCL select
是从一对矢量(a, b)
的,基于条件向量(c
)的真值选择元素,返回从矢量a
和b
元素组成一个新的载体。
的MSB(最显著位)这里所提到的,因为一个向量元素的真值被定义为-1
,因此MSB应设置(如符号位):
a = {1 , 2} // Pseudocode for select operands
b = {3 , 4}
c = {0 ,-1}
r = {1 , 4} // The result r contains some of a and b
这是一个非常有用的运算符,其功能与C中的条件表达式的作用相同。但是,条件表达式通常会编译为导致warp/wavefront散度的条件分支。 'select'通常会生成一个谓词表达式 - 有点像x86上的CMOV或SSE中的blend_ps。
请注意,参数顺序*完全*向后。如果你想做一些像'a> b? a:b',然后你写'select(b,a,a> b);'。非常愚蠢。他们在想什么? – doug65536