Неправильный ответ на AMD оборудования с использованием OpenCL - PullRequest
2 голосов
/ 23 марта 2012

Я использую 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

Спасибо

1 Ответ

0 голосов
/ 27 марта 2012

Похоже на эту ошибку, о которой я сообщал ранее: http://devgurus.amd.com/thread/158479

Так что я боюсь, что это ошибка в компиляторе, и вы ничего не можете сделать, кроме как использовать локальный барьер и ждать, покаAMD исправляет свои ошибки.

(Обратите внимание, что, как предлагается в связанной теме, локального mem_fence должно быть достаточно для предотвращения появления этой ошибки компилятором.)

...