Неправильный ответ на оборудовании AMD с использованием OpenCL

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

Спасибо


person Caslu    schedule 23.03.2012    source источник
comment
Что вы делаете со значением после его присвоения? какой размер рабочей группы вы используете? какие конкретно видеокарты вы пробовали?   -  person mfa    schedule 24.03.2012


Ответы (1)