1. 原子性存储器访存操作

如果存储器操作为所有core(线程)知道,那就称为原子性(Atomic)共享存储器访问操作。原子指令虽然不是一种同步操作,但能够使各线程可以同步的访问存储器。

下文指令格式以RSICV指令集为例

2. “锁”的概念

定义

假设一个场景如core1,core2共享一片数据区间,但是同一时间只有一个core能够独占此数据区间,为避免两core同时发送请求导致竞争现象,于是二者约定了一个共享的全局变量作为“锁”,使得在进行存储器原子读和原子写操作时任何其他操作都不得插入。通常,体系设计人员并不希望基本硬件原语被用户使用,而希望这些原语被系统设计者用来建立同步库。

“上锁”过程

该变量在硬件上的本质是在存储器中分配一个地址保存该变量的值(core1和core2均能访问)。

1)当某个core独占共享数据区并完成相关操作后,便会释放该数据区,通过向锁中写0将其释放。

2)没有独占数据区的core都会不断的读锁中的值,判断是否空闲。若读到的值为0(空闲),便会向锁中写入1进行上锁

3. 具体实现

以RISC-V指令集RV32I指令格式为例。

RMW(读改写)

为解决上述竞争问题,可引入原子操作,即第一次读(发现锁空闲)和下一次写操作(写入1)成为一个整体,这样当发送读请求的后即上锁,其他core的请求便无效,即读出-计算-写回。

(AMO也支持释放一致性模型)

执行过程

使用原子指令将锁中的值读出,并向锁中写入数值1。该过程为一个整体性的原子操作,读和写操作间其他核不会访问到锁其他core读锁值,若为1则继续扫描读值,若为0,尝试加锁,向该锁变量写入1进行独占。因此该方式与内存的交互至少发生两次,一次读内存,一次写内存。

例如amoadd.w rd, rs2, (rs1)   该指令用于从地址为寄存器rs1值的存储器中读出一个值,存放到rd寄存器中,并且将读出的数据与rs2寄存器值进行计算(相加),将结果存放到rd寄存器中

互斥操作(LR/SC指令)

虽然原子操作能解决多线程的竞争问题,但由于会将总线锁住,导致其他核无法访问总线,在核数众多且频发抢锁的情况下,会造成总线长期被锁的情况,因此引入一种新的互斥类型的存储器访问指令,即LR(load reserved)/SC(store conditional)指令。

(LR/SC也支持释放一致性模型)

执行流程

LR指令从存储器中读一个数值,同时处理器会监视这个存储器地址,看它是否会被其他处理器修改;SC指令发现在此器件没有其他处理器修改该值,则将新值写入该地址。因此一个原子的LR/SC指令对,就是LR读取值,进行一些计算,然后试图保存新值,如果保存失败,则需重新开始整个序列。可总结为:LR -> 其他指令 ->SC。SC指令的执行成功说明了LR/SC之间没有其他对同一地址的写入操作,也就保证了LR/SC之间的不可分割性。因此成对的LR和SC操作之间并不会将总线锁住,也就不会导致系统性能的下降。

LR指令用于从存储器(地址为rs1寄存器的值指定)中读一个长度为XLEN的数据存放到rd寄存器中。

SC指令用于向存储器(地址为rs1寄存器的值指定)中写入一个长度为XLEN的数据,数据的值来自于rs2寄存器中的值。即保存寄存器的值,且如果执行成功则将寄存器的值修改为1, 如果失败则修改为0。如果LR指令返回锁单元的原始值,SC执行成功时才会返回1。若执行失败一般需要重新执行上述过程,直到SC指令成功位置。

LR/SC执行成功的条件

一般要顺序的使用这两条指令,如果LR指令所指定的锁单元的内容在相同地址的SC指令执行前已被改变,那么SC指令就执行失败,也就是说SC指令需要一定条件才能执行成功:

1)LR/SC成对访问相同地址;

2)LR/SC间没有任何其他的写操作(来自于任何一个hart)访问过相同的地址;

3)LR/SC指令间没有中断核异常发生;

4)LR/SC访问存储器地址必须地址对齐,否则会产生地址非对齐异常;

5)LR/SC间没有执行MRET指令

如果执行成功则向rd寄存器写回数值0;若失败则向rd寄存器写回一个非零值。

实际上允许使用的并且不会造成问题的只有寄存器-寄存器指令,而处理器可能由于重复的页错误而导致始终无法完成SC指令,从而使处理器处于一种死锁的状态,另外,LR和SC间的指令数一定要尽可能少,这样才可以减少不相关的事情或者竞争资源的处理器所引SC执行失败的频率。

LR/SC的优点

可以通过LR/SC构造其他的诸如原子比较和交换或者原子取后加等同步用语,这些同步用语可以用在一些并行编程模型中,这些同步用语的实现需要在LR/SC指令间插入更多的指令,但不需要太多。

本文分享 CSDN - KGback。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

计算机原子指令,计算机体系结构——多线程(核)访存“上锁”——原子指令...相关推荐

  1. MIPS指令集:运算指令、访存指令、分支和跳转、协处理器0指令

    计算机指令就是指挥机器工作的指示和命令,程序就是一系列按一定顺序排列的指令,执行程序的过程就是计算机的工作过程.通常一条指令包括两方面的内容: 操作码和操作数,操作码决定要完成的操作,操作数指参加运算 ...

  2. 【计算机组成原理】计算机组成原理纠错本

    [计算机组成原理]计算机组成原理纠错本 标签(空格分隔):[考研纠错本] 考研计算机组成原理纠错本 文章目录 考研计算机组成原理纠错本 第一轮 1. 计算机发展历程 2. 计算机系统的层级结构 3. ...

  3. Cache性能分析例题1:失效率和平均访存时间计算例题(附带详细分析)

    题目内容 利用下表所列的数据(分离Cache和混合Cache每1000条指令的失效次数),比较指令Cache和数据Cache容量均为16KB的分离Cache与容量为32KB的混合Cache,哪种Cac ...

  4. 假定某计算机的CPU主频为80 MHz,CPI为4,并且平均每条指令访存1.5

    假定某计算机的CPU主频为80 MHz,CPI为4,并且平均每条指令访存1.5次,主存与Cache之间交换的块大小为16B,Cache的命中率为99%,存储器总线宽度为32位.请回答下列问题. (1) ...

  5. 计算机体系结构的主要原理,《计算机组成原理》计算机体系结构.pdf

    张 代 远 编 著 计算机组成原理 ● JISUANJI ZUCHENG YUANLI 北 京 邮 电 大 学 出 版 社 ·北 京· 内 容 提 要 本书系统而深入浅出地介绍了计算机组成的基本概念. ...

  6. 计算机组成与设计:指令-计算机的语言

    2.1 引言 计算机语言中的基本单词成为指令,一台计算机的全部指令成为该计算机的指令集. 不同的指令集具有相似性,一方面是因为所有计算机都是基于基本原理相似的硬件技术所构建:另一方面所有计算机都必须提 ...

  7. 计算机组成原理两数相加指令,计算机组成原理复习题

    27. 一个16K×32位的存储器,其地址线和数据线的总和是 . A.48 B.46 C.36 答案:B 28.由于磁盘上的内部同心圆小于外部同心圆,则对其所存储的数据量而言, . A.内部同心圆大于 ...

  8. 《计算机组成与设计(ARM版)》读书笔记-第二章指令2

    文章目录 2.9 人机交互 2.10 LEGv8中的宽立即数和地址的寻址 2.10.1 宽立即数 2.10.2 分支中的寻址 2.10.3 LEGv8寻址模式总结 2.10.4 机器语言解码 2.11 ...

  9. 计算机组成原理sltu指令,计算机组成原理第二次作业题及答案.doc

    计算机组成原理第二次作业题及答案 第2次作业一.单项选择题(本大题共40分,共 20 小题,每小题 2 分)1. IEEE754标准规定的32位浮点数格式中,符号位为1位,阶码为8位,尾数为23位,则 ...

最新文章

  1. 在Blender中制作火箭发射烟雾和火焰模拟的动画
  2. DOS文件转换成UNIX文件格式详解
  3. SEL:世界土壤日Stefan Geisen报告(朱永官院士主持,12月4日)
  4. pHp封装成vue,vue.js生成条形码的方法
  5. python基础一入门必备知识-Python从入门到精通要掌握哪些基础知识?
  6. 自动化运维之SaltStack实践
  7. HTML+CSS+JS实现 ❤️canvas圆形水波进度条动画特效❤️
  8. 【干货】史上最全的Tensorflow学习资源汇总(转)
  9. 搭建 SQL Server 复制 (一)
  10. 关于BDC、SSP搜索相关解决方案 的数据结构
  11. Fiddler工具的使用与手机app数据抓包
  12. 华为s5720默认用户名和密码_华为交换机s5720s-28p-LI-AC默认用户名和密码是什么?...
  13. 估值3000亿,中国最神秘电商公司,征服美国年轻人
  14. reg、wire与logic的区别
  15. UML培训取得姣好成绩,受到客户好评
  16. RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本━新增岗位管理-Web部分
  17. 智能睡眠监控APP开发有哪些好处?
  18. UE4 统计数据命令描述
  19. cmnet与cmwap区别
  20. Laravel 教程 - Web 开发实战入门 ( Laravel 5.5 )购买链接

热门文章

  1. ncurses输入函数:字符+字符串的输入
  2. 一个简单的javascript时钟程序
  3. php好玩的源码_PHP 经典有趣的算法
  4. 可穿戴设备的主流传感器介绍
  5. 低通滤波和高通滤波的理解
  6. IDEA添加mybatis-mapper的模板
  7. RecycleView添加HeaderView和FooterView
  8. 如何实现一平台多系统_自动化设备数据采集系统如何实现
  9. ShadeGraph教程之节点详解5:Math Nodes
  10. C#中的WebSocket服务器