OpenCL 2.0 - гонка в программе только с атомами

В статье "Гетерогенные модели беспроблемной памяти" автор утверждает следующее:

"... в OpenCL 2.0 можно написать программу, которая полностью состоит из атомов, если эти атомы не используют области правильно..."

Как это возможно? Может кто-нибудь объяснить это?

1 ответ

Решение

В спецификации OpenCL 2.0 (стр. 14) говорится, что программа содержит гонку данных, если:

он содержит два действия в разных рабочих элементах или потоках хоста, где

  1. одно действие изменяет ячейку памяти, а другое - считывает или изменяет ту же ячейку памяти, и

  2. по крайней мере одно из этих действий не является атомарным, или соответствующие области памяти не являются включающими, и

  3. действия - это глобальные действия, неупорядоченные отношением global-случаем-до, или локальные действия, неупорядоченные отношением local-случаем-до.

Второе предложение подразумевает, что даже если оба действия являются атомарными, вы все равно можете иметь гонку данных, если области памяти не являются "включающими". Пример не включающих областей памяти: попытка синхронизации между рабочими элементами на разных устройствах с использованием workgroup объем.

На практике вполне может быть, что ничего плохого не произойдет, если ваши прицелы не являются инклюзивными. Но технически программа с не включающими областями памяти нарушает контракт, определенный в спецификации, поэтому ее поведение не определено.

Другие вопросы по тегам