2011-10-03 28 views
3

目前还不清楚内置OpenCL函数select的目的是什么。请有人澄清一下吗?OpenCL内置函数'select'

从OpenCL的规格:

功能选择(gentype一个,gentype B,igentype c)中

回报:用于向量类型的每个分量,导致[I] =如果MSB c [i]的设置? b [i]:a [i]。

什么是MSB在这种情况下?我知道MSB代表最重要的位,但我不知道它是如何与这种情况相关的。

回答

6

的OpenCL select是从一对矢量(a, b)的,基于条件向量(c)的真值选择元素,返回从矢量ab元素组成一个新的载体。

的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 
+1

请注意,参数顺序*完全*向后。如果你想做一些像'a> b? a:b',然后你写'select(b,a,a> b);'。非常愚蠢。他们在想什么? – doug65536

2

这是一个非常有用的运算符,其功能与C中的条件表达式的作用相同。但是,条件表达式通常会编译为导致warp/wavefront散度的条件分支。 'select'通常会生成一个谓词表达式 - 有点像x86上的CMOV或SSE中的blend_ps。