Я относительно новичок в 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]]);
}
}
Выход для первой итерации:
массив_0: [0, 0]
массив_1 [0] = 100
массив_2 [2 * индекс] = 0
массив_1 [массив_2 [2 * индекс]] = 0
Почему вывод последней строки "0"? Кажется, что доступ к массиву с использованием константы 0 дает правильный результат, но доступ к тому же массиву с использованием "array_2 [2 * index], который равен 0, дает неверный результат. Что происходит?
Спасибо за помощь!