2014-02-10 3 views
3

Я начал изучать OpenMP и обнаружил директиву #pragma omp atomic.Порядок получения атомной памяти OpenMP

У меня есть основное понимание атомарности C++ 11 и вы знаете, что вы можете передать параметр memory_order методу атомистики. Исправьте меня, если я ошибаюсь, но я думаю, что это позволяет использовать атомику в качестве точки синхронизации, например, при использовании memory_order_seq_cst.

Некоторые менее ограничительные порядки памяти, такие как memory_order_relaxed, просто убедитесь, что операции над атомом синхронизированы и видны другим. Он ничего не знает о других обновлениях памяти.

Я хотел бы знать, какой порядок памяти используется атомарной директивой OpenMP. Будет ли он только синхронизировать доступ к атомному, или он будет действовать как точка синхронизации памяти?

Я предполагаю, что это будет больше похоже на memory_order_relaxed, потому что critical здесь, чтобы обеспечить полную синхронизацию.

Я приветствую любое хорошее объяснение/информацию. Спасибо.

+0

Возможный дубликат [openMP, atomic vs critical?] (Http://stackoverflow.com/questions/7798010/openmp-atomic-vs-critical) – JustSid

+0

@JustSid В основном это касается блокировок с блокировкой синхронизации, не объясняет порядок памяти. – Xaqq

ответ

7

Модель памяти OpenMP развивается. До и вплоть до OpenMP 3.1 модель основана на операциях «флеш». Они не сравнимы ни с чем в модели памяти C++. Вкратце говоря, флеш примерно соответствует atom_thread_fence (x), где x - memory_order_seq_cst. Но есть пропасть, где не, что если «пересечение двух флеш-наборов двух флешей пуст».

OpenMP 4.0 добавляет пункт seq_cst, и отвечает на вопрос прямо:

Примечание - Как и в других неявных регионах смыва, раздел 1.4.4 на странице 20 уменьшает порядок, который должен быть взыскана. Цель состоит в том, что, когда аналогичная операция существует в C++ 11 или C11, последовательная атомная конструкция последовательной последовательной атомной конструкции имеет ту же семантику, что и атомная операция memory_order_seq_cst в C++ 11/C11. Аналогичным образом, некоторая последовательная атомная конструкция имеет ту же семантику, что и . Операция памяти_order_relaxed атома в C++ 11/C11.

Для получения более подробной информации загрузите latest version of the spec (4.0 в данный момент) и читать секции 1.4.4 «OpenMP память Согласованность» и 2.12.6 «атомного Construct».

+0

Я расширил ответ. –

+0

Большое спасибо. Хорошее объяснение, отличная ссылка :) – Xaqq

Смежные вопросы