Я хочу использовать функции пола / потолка C в проекте OpenACC. Когда я хочу сделать атомарное обновление значения.
#pragma acc atomic update
x=floor(x)+c
компилятор показывает следующее сообщение:
PGCC-S-0155-Неправильная атомная экспрессия
PGCC-S-0155-Неверный атомный регион.
В чем может быть проблема?
Атомарные операции предназначены для простых и простых операций, таких как +, -, * и /. Если вы посмотрите на Раздел 2.12 (Атомная Конструкция) Спецификации OpenACC [42]ссылка на сайт], вы увидите список доступных операций для использования в атомарной конструкции.
Итак, хотя вы могли бы сделать floor
на GPU, вы не можете сделать это в атомное разделы.
Других решений пока нет …