Я начал изучать OpenMP и обнаружил директиву #pragma omp atomic
.Порядок получения атомной памяти OpenMP
У меня есть основное понимание атомарности C++ 11 и вы знаете, что вы можете передать параметр memory_order
методу атомистики. Исправьте меня, если я ошибаюсь, но я думаю, что это позволяет использовать атомику в качестве точки синхронизации, например, при использовании memory_order_seq_cst
.
Некоторые менее ограничительные порядки памяти, такие как memory_order_relaxed
, просто убедитесь, что операции над атомом синхронизированы и видны другим. Он ничего не знает о других обновлениях памяти.
Я хотел бы знать, какой порядок памяти используется атомарной директивой OpenMP. Будет ли он только синхронизировать доступ к атомному, или он будет действовать как точка синхронизации памяти?
Я предполагаю, что это будет больше похоже на memory_order_relaxed
, потому что critical
здесь, чтобы обеспечить полную синхронизацию.
Я приветствую любое хорошее объяснение/информацию. Спасибо.
Возможный дубликат [openMP, atomic vs critical?] (Http://stackoverflow.com/questions/7798010/openmp-atomic-vs-critical) – JustSid
@JustSid В основном это касается блокировок с блокировкой синхронизации, не объясняет порядок памяти. – Xaqq