OpenCL 2.0 Определение забора из стандарта - PullRequest
0 голосов
/ 06 января 2020

Я читаю Спецификацию OpenCL 2.0 , потому что я хотел бы узнать больше о методах синхронизации. Более конкретно, я сейчас читаю раздел 3.3.5 Модель памяти: обзор операций Atomi c и Fence , где я в настоящее время пытаюсь понять заборы.

Я процитирую соответствующие биты с моими вопросами:

Спецификация OpenCL 2.0 определяет ряд операций синхронизации, которые используются для определения ограничений порядка памяти в программе. Они играют особую роль в управлении тем, как операции с памятью в одной единице выполнения (например, рабочие элементы или, при использовании SVM хост-потока) становятся видимыми для другой. В OpenCL есть два типа операций синхронизации; Атоми c операции и забор.

Это понятно ... это просто определение механизма синхронизации, предоставляемого OpenCL.

Атоми c операции неделимы. Они либо происходят полностью, либо не происходят вообще. Эти операции используются для упорядочения операций памяти между единицами выполнения, и, следовательно, они параметризуются с помощью параметров memory_order и memory_scope, определенных моделью согласованности памяти OpenCL. Операции atomi c для языка программирования ядра OpenCL C аналогичны соответствующие операции, определенные стандартом C11.

Это ясно, это просто определение того, что представляет собой операция Atomi c, а именно операция, которая полностью выполняется или не выполняется вообще за цикл.

Операции OpenCL 2.0 atomi c применяются к переменным типа atomi c (подмножество из тех, что в стандарте C11), включая Atom c версии int, uint, long, ulong Типы float, double, half, intptr_t, uintptr_t, size_t и ptrdiff_t. Однако поддержка некоторых из этих типов атомов c зависит от поддержки соответствующих регулярных типов.

Мне кажется, что для выполнения операции atomi c нам нужна переменная и, следовательно, адрес памяти. Ниже приведен бит, который смутил меня

Операция atomi c в одной или нескольких ячейках памяти - это либо операция получения, либо операция освобождения, либо операция захвата и освобождения. Операция Atomi c без соответствующей ячейки памяти является ограждением и может быть либо ограждением получения, ограждением выпуска, либо ограждением сбора и выпуска. Кроме того, существуют расслабленные операции atomi c, которые не имеют свойств синхронизации, и операции atomi c read-modify-write, которые имеют специальные характеристики. [Стандарт C11, раздел 5.1.2.4, параграф 5, измененный]

В этом последнем абзаце есть специфика c бит

... Атоми c операция без связанной ячейки памяти является ограждением ...

Но как это возможно, поскольку любой атом c применяется к определенным переменным?

...