В отличие от барьера ()
(что, я думаю, я понимаю), mem_fence ()
не влияет на все элементы в рабочей группе. В спецификации OpenCL сказано (раздел 6.11.10) для mem_fence ()
:
Упорядочивает загрузку и сохранение рабочего элемента, выполняющего ядро.
(поэтому это применимо к одиночному рабочему элементу).
Но, в то же время, в разделе 3.3.1 говорится, что:
В памяти рабочего элемента существует согласованность загрузки / сохранения.
так что в пределах рабочего элемента память согласована.
Так для чего полезна mem_fence ()
? Это не работает с элементами, но не требуется внутри элемента ...
Обратите внимание, что я не использовал атомарные операции (раздел 9.5 и т. Д.). Есть ли идея, что mem_fence ()
используется вместе с ними? Если так, мне бы хотелось увидеть пример.
Спасибо.
Обновление : я вижу, насколько это полезно при использовании с барьером ()
(неявно, поскольку барьер вызывает mem_fence ()
) - но обязательно их должно быть больше, поскольку он существует отдельно?