Я хочу использовать атомарные функции с директивами OpenACC. Какие параметры компиляции pgc ++ могут помочь? Должен ли я использовать определенный заголовочный файл?
Одна вещь, чтобы проверить: вы используете правильные данные? в этот форум не все ускорители принимают все типы данных и, возможно, не все типы данных могут быть доступны атомарно. Таблица 13 в эта ссылка указывает на то, что атомарные элементы в Nvidia доступны только для 32-битных целочисленных типов данных и типов с плавающей точкой. 64-разрядная версия доступна для вычислительных мощностей 6.x +.
Вы говорите, что ваш код выглядит так:
#pragma acc atomic
{
res[i][i]=res[i][i]+x;
res[j][j]=res[j][j]+y;
}
Тем не менее, я не думаю, что вы можете вкладывать несколько атомиков вместе, как это. Попробуйте вместо этого:
#pragma acc atomic update
res[i][i]=res[i][i]+x;
#pragma acc atomic update
res[j][j]=res[j][j]+y;
Других решений пока нет …