在OpenCL下,是否有使用向量作为索引访问数组的方法?
例如,我想完成这样的事情:
__constant uint data[] = {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77};
uchar4 keys = (uchar4)(5, 0, 2, 6);
uint4 results = data[keys];
// results = (uint4)(0x55, 0x00, 0x22, 0x66);
更一般地说:
// Array of scalar type T
T data[] = {value_0, value_1, ...};
// n-item vector of type V
Vn keys = (Vn)(index_0, index_1, ...);
// n-item vector of type T
Tn result = data[keys];
目前,我能够完成这样的事情的唯一方法是手动完成,但它感觉不到“矢量-y”:
__constant uint data[] = {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77};
uchar4 keys = (uchar4)(5, 0, 2, 6);
uint4 results = (uint4)(data[keys.s0], data[keys.s1], data[keys.s2], data[keys.s3]);
// results = (uint4)(0x55, 0x00, 0x22, 0x66);
所以我想这是一个两部分问题:
答案 0 :(得分:0)
OpenCL C基于C99标准,它不允许数组索引为向量。 您的代码的最后一个样本几乎是您可以得到的。此外,考虑到使用向量元素作为数组索引会导致较差的内存访问模式,这会显着降低IO性能。