OpenCL 2.0-гонка в программе только с атомиками
В статье "гетерогенные Безрасовые модели памяти" автор утверждает следующее:
" ... в OpenCL 2.0 можно написать программу racey, которая состоит полностью из атомов, если эти атомы не используют области видимости правильно..."
Как это возможно? Кто-нибудь может это объяснить?
1 ответ:
Спецификация OpenCL 2.0 (стр. 14) утверждает, что программа содержит гонку данных, если:
Второе предложение подразумевает, что даже если оба действия являются атомарными, вы все равно можете иметь гонку данных, Если области памяти не являются "включающими". Пример не включающих областей памяти: попытка синхронизации между рабочими элементами на разных устройствах с помощью областиОн содержит два действия в различных рабочих элементах или узловых потоках, где
Одно действие изменяет область памяти, а другое действие считывает или изменяет ту же самую область памяти, и
По крайней мере одно из этих действий не является атомарным, или соответствующие области памяти не являются включающими, и
Действия таковы глобальные действия неупорядоченным путем глобального не происходит-перед отношением или местного действия неупорядочены по локальное-бывает-перед отношением.
workgroup
. На практике вполне может оказаться, что ничего плохого не произойдет. если ваши области не являются включающими. Но технически программа с не включенными областями памяти нарушает контракт, определенный спецификацией, поэтому ее поведение не определено.