2011-10-03 272 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。