簡體   English   中英

OpenMP原子內存順序

[英]OpenMP atomic memory order

我開始學習OpenMP並發現了#pragma omp atomic指令。

我對C ++ 11的原子有基本的了解,並且知道你可以將memory_order參數傳遞給atomics的方法。 如果我錯了,請糾正我,但我認為如果使用memory_order_seq_cst ,這允許使用atomics作為同步點。

一些限制較少的內存順序,如memory_order_relaxed只需確保原子上的操作同步並對其他人可見。 它對其他內存更新沒有任何幫助。

我想知道OpenMP的原子指令使用了什么內存順序。 它只會同步對原子的訪問,還是會充當內存同步的重點?

我的猜測是它更像是memory_order_relaxed ,因為critical是提供完全同步。

我歡迎任何好的解釋/信息。 謝謝。

OpenMP內存模型一直在發展。 直到並包括OpenMP 3.1,該模型基於“刷新”操作。 這些與C ++內存模型中的任何內容都不具有可比性。 松散地說,刷新大致對應於atomic_thread_fence(x),其中x是memory_order_seq_cst。 但是,如果“兩次沖洗的兩個沖洗套件的交叉點是空的”那就存在了問題。

OpenMP 4.0添加了seq_cst子句,並直接回答了問題:

注 - 與其他隱式刷新區域一樣,第20頁的1.4.4節減少了必須強制執行的順序。 目的是,當C ++ 11或C11中存在類似操作時,順序一致的原子構造與C ++ 11 / C11中的memory_order_seq_cst原子操作具有相同的語義。 類似地,非順序一致的原子結構與C ++ 11 / C11中的memory_order_relaxed原子操作具有相同的語義。

有關更多詳細信息,請下載最新版本的規范 (此時為4.0),並閱讀1.4.4“OpenMP內存一致性”和2.12.6“原子構造”部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM