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