Массив OpenCL, возвращающий 0 - PullRequest
0 голосов
/ 05 марта 2019

Я относительно новичок в 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, дает неверный результат. Что происходит?

Спасибо за помощь!

...