OpenCL 中的向量

每個基本的 opencl 型別都有一個向量版本。你可以通過在型別後面附加所需元件的數量來使用向量型別。支援的元件數量為 2,3,4,8 和 16.OpenCL 1.0 不提供三個元件。

你可以使用兩種方式初始化任何向量:

  • 提供單個標量
  • 滿足所有元件
float4 a = (float4)(1); //a = (1, 1, 1, 1)

要麼

float4 b = (float4)(1, 2, 3, 4);
float4 c = (float4)(1, (float3)(2));

或滿足元件數量的任何其他向量組合。要訪問向量的元素,你可以使用不同的方法。你可以使用索引:

a[0] = 2;

或使用文字。文字的優點是你可以按照你想要的方式組合它們,馬上做好。你可以使用訪問所有向量元件

a.s0 = 2; // same as a[0] = 2

你還可以將多個元件組合到一個新的向量中

a.s02 = (float2)(0, 0); // same as  a[0] = 0; a[2] = 0; or even a.s20 = (float2)(0, 0)

你可以以任何方式更改元件的順序。

a.s1423 = a.s4132; // flip the vector

但你不能做類似的事情

a.s11 = ... // twice the same component is not possible

有一些方便的縮寫用於訪問向量元件。以下縮寫僅適用於尺寸 2,4,8 和 16

a.hi //=a.s23 for vectors of size 4, a.4567 for size 8 and so on.
a.lo //=a.s01
a.even //=a.s02
a.odd //=a.13

對於向量大小 2,3 和 4,還有一些額外的縮寫

a.x //=a.s0
a.y //=a.s1
a.z //=a.s2
a.w //=a.s3