Я использую OpenCL с видеокартой AMD и имею последнюю версию драйвера для Linux.
Когда я делаю что-то вроде:
int a = get_group_id(0) > 0 ? vector[ get_group_id(0)-1 ].word[ id ] : 0;
Я получаю неправильный результат.Но если после этого использовать barrier(CLK_LOCAL_MEM_FENCE);
, я получу правильные результаты.
Почему это происходит?
Ps1 .: Используя видеокарту NVIDIA в Linux или Windows, я получаюправильный ответ без использования барьера.
Блок (с использованием __global * input, __global * output):
int a = get_group_id(0) > 0 ? vector[ get_group_id(0)-1 ].word[ id ] : 0;
int b = get_group_id(0) > 0 ? c + a : a;
output[b + id] = input[ d + id ]; //Last kernel line
Я использую 128 размер рабочей группы.Я пробовал в HD 6790 - Linux
Спасибо