加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – OpenMP原子内存顺序

发布时间:2020-12-16 09:50:27 所属栏目:百科 来源:网络整理
导读:我开始学习OpenMP并发现了#pragma omp原子指令. 我对C 11的原子有基本的了解,并且知道你可以将memory_order参数传递给atomics的方法. 如果我错了,请纠正我,但我认为如果使用memory_order_seq_cst,这允许使用atomics作为同步点. 一些限制较少的内存顺序,如mem
我开始学习OpenMP并发现了#pragma omp原子指令.

我对C 11的原子有基本的了解,并且知道你可以将memory_order参数传递给atomics的方法.
如果我错了,请纠正我,但我认为如果使用memory_order_seq_cst,这允许使用atomics作为同步点.

一些限制较少的内存顺序,如memory_order_relaxed,只需确保原子上的操作同步并对其他人可见.它对其他内存更新没有任何帮助.

我想知道OpenMP的原子指令使用了什么内存顺序.它只会同步对原子的访问,还是会充当内存同步的重点?

我的猜测是它更像是memory_order_relaxed,因为关键是提供完全同步.

我欢迎任何好的解释/信息.
谢谢.

解决方法

OpenMP内存模型一直在发展.直到并包括OpenMP 3.1,该模型基于“刷新”操作.这些与C内存模型中的任何内容都不具有可比性.松散地说,刷新大致对应于atomic_thread_fence(x),其中x是memory_order_seq_cst.但是,如果“两次冲洗的两个冲洗套件的交叉点是空的”那就不存在了问题.

OpenMP 4.0添加了seq_cst子句,并直接回答了问题:

Note – As with other implicit flush regions,Section 1.4.4 on page 20
reduces the ordering that must be enforced. The intent is that,when
the analogous operation exists in C++11 or C11,a sequentially
consistent atomic construct has the same semantics as a
memory_order_seq_cst atomic operation in C++11/C11. Similarly,a
non-sequentially consistent atomic construct has the same semantics as
a memory_order_relaxed atomic operation in C++11/C11.

有关更多详细信息,请下载latest version of the spec(此时为4.0)并阅读1.4.4“OpenMP内存一致性”和2.12.6“原子构造”部分.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读