我是OpenCL的新手,在访问数组时遇到问题。我正在使用printf调试程序。
(公认的)代码如下:
__constant static int array_2[4] = {
0, 1,
2, 3
};
void __kernel first_kernel(__global const int* input, __global int* output) {
__private int array_0[2];
__private int array_1[] {
100, 101, 102, 103
};
for (int index < 0; index < 2; index++) {
array_0[0] = array_1[array_2[2 * index]];
array_0[1] = array_1[array_2[2 * index + 1]];
printf("array_0: [%d, %d]\n", array_0[0], array_0[1]);
printf("array_1[0] = %d\n", array_1[0]);
printf("array_2[2 * index] = %d\n", array_2[2 * index]);
printf("array_1[array_2[2 * index]] = %d\n", array_1[array_2[2 * index]]);
}
}
第一次迭代的输出是:
array_0:[0,0]
array_1 [0] = 100
array_2 [2 * index] = 0
array_1 [array_2 [2 * index]] = 0
为什么最后一行的输出为“ 0”?似乎使用常数0访问数组会得到正确的结果,但是使用等于0的“ array_2 [2 * index]”访问同一数组会导致错误的结果。怎么回事?
感谢您的帮助!