原子操作(atomic operation)指的是由多步操作组成的一个操作,也就是一个指令包含了至少两步操作,比如自加操作( i++ ),就是先从内存读一个地址(步骤1 load),然后将数据自加1 (步骤2 ALU做加法运算),再写回内存(步骤3 store)。对同一个资源(比如访问DDR的一个相同地址)的原子操作处理过程中,不允许被打断。原子操作的正确实施必须由硬件逻辑来保证,一般在距离片外内存(DDR)较近的模块实施,比如NoC,LLC等,因为这样才能发挥原子操作的性能优势。比如在LLC中实施,那么就需要在LLC中增加一个小的ALU来实现 自加/自减/异或 这样的操作。 同时,LLC需要保证在 步骤1 load 到 步骤2 store 这段时间内不能插入任何其他的访问此地址的 request,保证原子性。atomic 肯定会成功,因为这是需要 硬件来强保证的。
atomic 一般会和exclusive进行比较。exclusive 是软件行为,有可能会失败。ALU的操作 是 需要在core内完成。对于自加操作,core先发出一个read request,带exclusive 信号,NoC / LLC 支持exclusive的逻辑处 在收到此read request的时候 将exclusive bit置1 (此时时间记为 T1 ),read request 正常返回 read data 给 core,此address的exclusive bit依然为1,core在收到 read data后,自己做自加操作,然后再发出一个write request,NoC / LLC 在收到write request的时候,去check T1 到这段时间内 是否 有 其他访问此地址的request,如果有,那么此次exclusive write 失败,返回error resp给core,core等待时机再次重新发送read request。NoC/LLC 处 在 exclusive bit为1的情况下,是不能阻塞 其他core 发出相同地址的request的。
AXI协议中,使用 AxLOCK signals select exclusive access, and the RRESP and BRESP signals indicate the success or failure of the exclusive access read or write respectively.

Atomic需要硬件资源ALU的支持,但相对于exclusive有很大的性能提升。 假如master (如CPU core)需要实现这样的操作:从memory(如LLC/DDR)的一个地址读取数据,然后对数据进行加1操作,然后再把加1之后的数据写入原地址位置,这个其实就是我们经常会听到的 read modify write操作的一种。在不使用atomic的情况下,我们需要 先从memory把数据load 到CPU core,然后在CPU core的ALU中执行 ADD加1操作,然后再把新数据 写入 memory。如下图,CPU core 和 memory之间 需要4次交互;假如我们支持了atomic transaction,在memory处增加了ALU逻辑,那么就只需要两次 交互 就可以完成。考虑到一般情况下master端 离 memory端都比较远,故atomic可以大大降低上面整个操作的延时。

原子操作主要有以下几种
Read modify write (读改写) :比如自加操作( i++ ),就是先从内存读一个地址(步骤1 load),然后将数据自加1 (步骤2 ALU做加法运算),再写回内存(步骤3 store)。除了自加,ALU还可以做 减法、XOR等单操作数的简单运算。
test-and-set-lock (检查并设置TSL) x86汇编指令BTS,意味Bit Test and Set,就是一条原子操作的CPU指令。它把由操作数指定地址的锁的状态保存入CF寄存器,然后锁被设置为1.
compare-and-swap (比较并交换,CAS)

参考 https://zh.wikipedia.org/wiki/Read-modify-write

atomic and exclusive operation相关推荐

  1. CHI Exclusive操作

    本文描述CHI协议中Exclusive accesses相关的知识,包含如下三部分: Overview Exclusive monitors Exclusive transactions 一.Over ...

  2. 802.11 参考手册

    目录 一.802.11成帧封装实现    3 1.1控制帧    3 1.1.1 一般的帧控制位    3 1.1.2   RTS(请求发送)    4 1.1.3   CTS (允许发送)    5 ...

  3. 关于 802.11 协议

    目录 一.802.11成帧封装实现    3 1.1控制帧    3 1.1.1 一般的帧控制位    3 1.1.2   RTS(请求发送)    4 1.1.3   CTS (允许发送)    5 ...

  4. pt-online-schema-change

    pt-online-schema-change NAME pt-online-schema-change - ALTER tables without locking them. ---------- ...

  5. arm linux s文件夹,armv7对应的CACHE操作相关文件解析

    最近在使用TI的DRA726芯片.A15端需要访问图像,而图像是在外设空间的,用DMA拷贝到CACHE空间. 这样就导致了DMA的CACHE一致性的问题,需要在DMA之后清除所使用图像空间的数据CAC ...

  6. 数字IC设计--------AMBA AXI协议(英文原版)

    AXI:AMBA Advanced eXtensible Interface (AXI) Protocol Specification 目录 chapter 1 Introduction about ...

  7. 22.Atomicity and Transactions-官方文档摘录

    原子性和事务 1 在单个文档修改多个嵌入文档,写操作都在文档级别上都是原子的 2 在单个写操作修改多个文档时,每个文档的修改都具有原子性,但是,作为一个整体的操作,并不是原子的.其他操作可能有交互.使 ...

  8. Linux内核官方文档atomic_ops.txt【摘自Linux 内核文档】

    摘自Linux内核文档 Documentation/atomic_ops.txt,不是本人原创 Semantics and Behavior of Atomic and Bitmask Operati ...

  9. java 字符串原子变量,如何在java中提供原子读/写2个变量?

    在我的课堂上,我的代码如下: int counter1; int counter2; public void method1(){ if (counter1>0) { ...........do ...

  10. Ubifs Support

    参考:http://processors.wiki.ti.com/index.php/UBIFS_Support#Creating_UBIFS_file_system UBIFS UBIFS may ...

最新文章

  1. RHEL6.3安装vsftpd
  2. 比较强得一个个性签名
  3. 【BZOJ2440】完全平方数,莫比乌斯反演+二分答案+容斥思想
  4. Python入门之软件开发目录规范
  5. Linux服务器之间传输文件 scp命令
  6. python 用itchat会封吗_在python中使用itchat发送微信消息
  7. Bailian4039 IP地址转换【进制】
  8. 百度搜索框智能提示功能代码
  9. SqlPlus中退格键和方向键的设置
  10. MUI全国城市区县级联json转换sql建表
  11. 微信公众号网页登录开发测试步骤详解
  12. Python实战案例01
  13. 超酷的HTML5 Canvas网络画板教程
  14. div+css制作哆啦A梦
  15. 微信小程序多点定位marker标点polyline连线
  16. 用友NC系统考勤机自动同步方案(适合大型商超)
  17. 常用linuxm命令
  18. 用聚类算法计算股票的支撑位和阻力位
  19. 短信/语音在医疗领域(his系统)各场景的应用
  20. matlab估计arma garch 条件均值和方差模型

热门文章

  1. layui tree组件更改图标
  2. linux进程管理(一)
  3. 第二周 计算圆的面积
  4. js获取url链接中的域名部分
  5. 网站死链查询检测方法(seo的优化工作全攻略)
  6. Siebel系统中配置LDAP认证
  7. cugoj-1697梦回三国
  8. RMAN-06004 RMAN-20003
  9. 男人养肾按摩运动更可取
  10. 「算法学习」:求平方根