访问大小大于16的openCL矢量中的数字索引



在Opencl中,对于长度不超过16的矢量。我们可以通过指定它们来访问它的(标量(组件:

float16 x;
x.sA // refers to the 11th element of the float16 variable x
x.sF // refers to the 16th element of the float16 variable x

我们如何访问float32 yfloat128 w的组件。有扩展吗?(我没有发现它是内置的(我也可以组合索引:

float16 x;
float4 y = x.sB1AE

对于长度>16(或变通方法(

当前长度为>16不支持,但正在讨论最终的支持。就目前而言,使用类型float的线性阵列,并使用访问组件

array[get_global_id(0)+get_global_size(0)*component]; // SoA: aaaabbbbccccddddeeee

注意,通过这种方式,内存访问比矢量数据类型快得多,因为阵列结构(SoA(数据布局可以实现联合内存访问。此外,您可以选择任意数量的组件,比如说15个,并且不会被锁定为选择可能具有额外内存分配的2/3/4/8/16。

相比之下,较慢的Array if Structures(AoS(布局看起来像这样:

array[get_global_id(0)*number_of_components+component]; // AoS: abcdeabcdeabcdeabcde

最新更新