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


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

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

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

1 2

1 ответ:

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

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

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

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

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

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