什么是原子指令

所有多核CPU都会提供实现原子操作的指令

原子指令作用:

原子指令用于在多个CPU之间维护同步关系。在一些科学计算问题中,通过并行算法把子问题分配到多个cpu上执行,但是各个子问题之间存在合作关系,因此需要硬件机制来实现多个cpu之间同步。

例子:一个典型的同步例子是“原子加1”问题。

一个CPU要对内存单元M中的数据加1。

一个CPU要对内存单元M中的数据加1,这个动作需要3条指令来完成:读M的值到寄存器R,对R执行加1运算,把R的值写回内存单元M。

有两个CPU:

如果CPU有两个,则可能在一个CPU执行过程中,另一个CPU也执行这3条指令,最后M的结果不是增加2而是增加1。(a)展示的就是无原子指令保护的一种错误结果

原子指令可以实现一个CPU独占执行时间。使用原子指令把连续多条指令包含起来,计算机保证只有一个cpu处于执行状态,其他cpu必须等待原子指令结束才能继续执行。(b)展示的就是实现“原子加1”的正确方法。

原子指令的实现机制一般是在cpu的互联网络中实现一个全局的原子寄存器,所有cpu对这个原子寄存器的访问是互斥的。cpu使用原子指令申请访问原子寄存器时,互联网络会对所有CPU进行仲裁,确保只有一个cpu可以获得对原子寄存器的访问权;如果有cpu获得了原子寄存器访问权,其他cpu必须等待该cpu释放权限才能继续执行。

龙芯:

龙芯cpu中的原子指令有两条,ll指令用于获取独占权,sc指令用于释放独占权限。这两条指令通常是成对使用。在需要实现cpu同步的程序中,ll指令放在“原子指令开始”的位置,sc指令放在“原子指令结束”的位置。x86、ARM也都有实现类似功能的原子指令。

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狮子座硅农(Leo ICer)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值