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