0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

多种内存一致性模型的特性分析

454398 来源:蜗窝科技 作者:passerby 2020-09-21 13:57 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

早期的CPU是通过提高主频来提升CPU的性能,但是随着频率“红利”越来越困难的情况下,厂商开始用多核来提高CPU的计算能力。多核是指一个CPU里有多个核心,在同一时间一个CPU能够同时运行多个线程,通过这样提高CPU的并发能力。

内存一致性模型(memory consistency model)就是用来描述多线程对共享存储器的访问行为,在不同的内存一致性模型里,多线程对共享存储器的访问行为有非常大的差别。这些差别会严重影响程序的执行逻辑,甚至会造成软件逻辑问题。在后面的介绍中,我们将分析不同的一致性模型里,多线程的内存访问乱序问题。
目前有多种内存一致性模型:
顺序存储模型(sequential consistency model)
完全存储定序(total store order)
部分存储定序(part store order)
宽松存储模型(relax memory order)

在后面我们会分析这几个一致性模型的特性

在分析之前,我们先定义一个基本的内存模型,以这个内存模型为基础进行分析


上图是现代CPU的基本内存模型,CPU内部有多级缓存来提高CPU的load/store访问速度(因为对于CPU而言,主存的访问速度太慢了,上百个时钟周期的内存访问延迟会极大的降低CPU的使用效率,所以CPU内部往往使用多级缓存来提升内存访问效率。)

C1与C2是CPU的2个核心,这两个核心有私有缓存L1,以及共享缓存L2。最后一级存储器才是主存。后面的顺序一致性模型(SC)中,我们会以这个为基础进行描述(在完全存储定序、部分存储定序和宽松内存模型里会有所区别,后面会描述相关的部分)

为了简化描述的复杂性,在下面的内存一致性模型描述里,会先将缓存一致性(cache coherence)简单化,认为缓存一致性是完美的(假设多核cache间的数据同步与单核cache一样,没有cache引起的数据一致性问题),以减少描述的复杂性。


顺序存储模型是最简单的存储模型,也称为强定序模型。CPU会按照代码来执行所有的load与store动作,即按照它们在程序的顺序流中出现的次序来执行。从主存储器和CPU的角度来看,load和store是顺序地对主存储器进行访问。

下面分析这段代码的执行结果


在顺序存储器模型里,MP(多核)会严格严格按照代码指令流来执行代码
所以上面代码在主存里的访问顺序是:

S1 S2 L1 L2

通过上面的访问顺序我们可以看出来,虽然C1与C2的指令虽然在不同的CORE上运行,但是C1发出来的访问指令是顺序的,同时C2的指令也是顺序的。虽然这两个线程跑在不同的CPU上,但是在顺序存储模型上,其访问行为与UP(单核)上是一致的。
我们最终看到r2的数据会是NEW,与期望的执行情况是一致的,所以在顺序存储模型上是不会出现内存访问乱序的情况

3完全存储定序

为了提高CPU的性能,芯片设计人员在CPU中包含了一个存储缓存区(store buffer),它的作用是为store指令提供缓冲,使得CPU不用等待存储器的响应。所以对于写而言,只要store buffer里还有空间,写就只需要1个时钟周期(哪怕是ARM-A76的L1 cache,访问一次也需要3个cycles,所以store buffer的存在可以很好的减少写开销),但这也引入了一个访问乱序的问题。

首先我们需要对上面的基础内存模型做一些修改,表示这种新的内存模型

相比于以前的内存模型而言,store的时候数据会先被放到store buffer里面,然后再被写到L1 cache里。


首先我们思考单核上的两条指令:
S1:store flag= set
S2:load r1=data
S3:store b=set

如果在顺序存储模型中,S1肯定会比S2先执行。但是如果在加入了store buffer之后,S1将指令放到了store buffer后会立刻返回,这个时候会立刻执行S2。S2是read指令,CPU必须等到数据读取到r1后才会继续执行。这样很可能S1的store flag=set指令还在store buffer上,而S2的load指令可能已经执行完(特别是data在cache上存在,而flag没在cache中的时候。这个时候CPU往往会先执行S2,这样可以减少等待时间)
这里就可以看出再加入了store buffer之后,内存一致性模型就发生了改变。

如果我们定义store buffer必须严格按照FIFO的次序将数据发送到主存(所谓的FIFO表示先进入store buffer的指令数据必须先于后面的指令数据写到存储器中),这样S3必须要在S1之后执行,CPU能够保证store指令的存储顺序,这种内存模型就叫做完全存储定序(TSO)。

我们继续看下面的一段代码



在SC模型里,C1与C2是严格按照顺序执行的
代码可能的执行顺序如下:
S1 S2 L1 L2
S1 L1 S2 L2
S1 L1 L2 S2
L1 L2 S1 S2
L1 S1 S2 L2
L1 S1 L2 S2

由于SC会严格按照顺序进行,最终我们看到的结果是至少有一个CORE的r1值为NEW,或者都为NEW。

在TSO模型里,由于store buffer的存在,L1和S1的store指令会被先放到store buffer里面,然后CPU会继续执行后面的load指令。Store buffer中的数据可能还没有来得及往存储器中写,这个时候我们可能看到C1和C2的r1都为0的情况。

所以,我们可以看到,在store buffer被引入之后,内存一致性模型已经发生了变化(从SC模型变为了TSO模型),会出现store-load乱序的情况,这就造成了代码执行逻辑与我们预先设想不相同的情况。而且随着内存一致性模型越宽松(通过允许更多形式的乱序读写访问),这种情况会越剧烈,会给多线程编程带来很大的挑战。

4部分存储定序

芯片设计人员并不满足TSO带来的性能提升,于是他们在TSO模型的基础上继续放宽内存访问限制,允许CPU以非FIFO来处理store buffer缓冲区中的指令。CPU只保证地址相关指令在store buffer中才会以FIFO的形式进行处理,而其他的则可以乱序处理,所以这被称为部分存储定序(PSO)。

那我们继续分析下面的代码


S1与S2是地址无关的store指令,cpu执行的时候都会将其推到store buffer中。如果这个时候flag在C1的cahe中存在,那么CPU会优先将S2的store执行完,然后等data缓存到C1的cache之后,再执行store data=NEW指令。
这个时候可能的执行顺序:
S2 L1 L2 S1

这样在C1将data设置为NEW之前,C2已经执行完,r2最终的结果会为0,而不是我们期望的NEW,这样PSO带来的store-store乱序将会对我们的代码逻辑造成致命影响。

从这里可以看到,store-store乱序的时候就会将我们的多线程代码完全击溃。所以在PSO内存模型的架构上编程的时候,要特别注意这些问题。

5宽松内存模型

丧心病狂的芯片研发人员为了榨取更多的性能,在PSO的模型的基础上,更进一步的放宽了内存一致性模型,不仅允许store-load,store-store乱序。还进一步允许load-load,load-store乱序, 只要是地址无关的指令,在读写访问的时候都可以打乱所有load/store的顺序,这就是宽松内存模型(RMO)。

我们再看看上面分析过的代码


在PSO模型里,由于S2可能会比S1先执行,从而会导致C2的r2寄存器获取到的data值为0。在RMO模型里,不仅会出现PSO的store-store乱序,C2本身执行指令的时候,由于L1与L2是地址无关的,所以L2可能先比L1执行,这样即使C1没有出现store-store乱序,C2本身的load-load乱序也会导致我们看到的r2为0。从上面的分析可以看出,RMO内存模型里乱序出现的可能性会非常大,这是一种乱序随可见的内存一致性模型。

6内存屏障

芯片设计人员为了尽可能的榨取CPU的性能,引入了乱序的内存一致性模型,这些内存模型在多线程的情况下很可能引起软件逻辑问题。为了解决在有些一致性模型上可能出现的内存访问乱序问题,芯片设计人员提供给了内存屏障指令,用来解决这些问题。

内存屏障的最根本的作用就是提供一个机制,要求CPU在这个时候必须以顺序存储一致性模型的方式来处理load与store指令,这样才不会出现内存访问不一致的情况。

对于TSO和PSO模型,内存屏障只需要在store-load/store-store时需要(写内存屏障),最简单的一种方式就是内存屏障指令必须保证store buffer数据全部被清空的时候才继续往后面执行,这样就能保证其与SC模型的执行顺序一致。
而对于RMO,在PSO的基础上又引入了load-load与load-store乱序。RMO的读内存屏障就要保证前面的load指令必须先于后面的load/store指令先执行,不允许将其访问提前执行。

我们继续看下面的例子:


例如C1执行S1与S2的时候,我们在S1与S2之间加上写屏障指令,要求C1按照顺序存储模型来进行store的执行,而在C2端的L1与L2之间加入读内存屏障,要求C2也按照顺序存储模型来进行load操作,这样就能够实现内存数据的一致性,从而解决乱序的问题。

ARM的很多微架构就是使用RMO模型,所以我们可以看到ARM提供的dmb内存指令有多个选项:

LD load-load/load-store
ST store-store/store-load
SY any-any

这些选项就是用来应对不同情况下的乱序,让其回归到顺序一致性模型的执行顺序上去

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 存储器
    +关注

    关注

    39

    文章

    7714

    浏览量

    170839
  • cpu
    cpu
    +关注

    关注

    68

    文章

    11216

    浏览量

    222913
  • 内存
    +关注

    关注

    9

    文章

    3173

    浏览量

    76112
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    SMD 贴片式 车规耐抗振电解电容 自动化生产高一致性

    SMD贴片式车规耐抗振电解电容通过封装革新、全流程自动化工艺及智能化检测技术,实现了高一致性生产,完全适配新能源汽车自动化产线需求 ,具体分析如下: 、封装革新:适配自动化生产的核心优势 贴片式
    的头像 发表于 12-04 14:33 41次阅读

    SMD 贴片式车规铝电解电容 自动化生产 高一致性

    SMD贴片式车规铝电解电容通过封装革新、全流程自动化工艺及智能化检测技术,实现了高一致性生产,完全适配新能源汽车自动化产线需求 。具体分析如下: 、封装革新:适配自动化生产的核心优势 贴片式
    的头像 发表于 12-03 14:47 63次阅读

    电缆组件相位一致性的意义

    、技术本质:定义与量化指标 相位一致性描述的是多通道电缆组件在相同频率与输入信号下,各通道输出信号相位差的稳定程度。核心衡量指标包括: 相位偏差 :单通道相位的波动范围 通道间相位差 :多通道之间
    的头像 发表于 11-27 13:41 50次阅读
    电缆组件相位<b class='flag-5'>一致性</b>的意义

    请教大家下DP一致性测试问题

    请教大家下,DP的Vbios中已经固定了预加重和Swing的值,DP的TX信号一致性测试项中Non Pre-Emphasis Level Test(Swing2/Swing0)-PLTPAT,这个测试项意思是Swing2与Swing0偏差吗?已经固定了Swing中,这
    发表于 11-12 15:57

    解决锂电池一致性难题!景锂新能源电池均衡仪为储能安全/电动车续航保驾护航

    解决锂电池一致性难题!景锂新能源电池均衡仪为储能/电动车电池续航保驾护航
    的头像 发表于 11-06 11:00 354次阅读

    直播回顾 | 深度解读CAN总线一致性测试的四大层级与实战方法,虹科技术直播助您破解汽车通信稳定性的关键

    •直播主题CAN总线一致性测试“一致性测试是保障总线系统稳定、兼容、可靠运行的核心环节。”随着整车电子电气架构日益复杂,ECU数量增多、通信负载加大,CAN节点之间若存在电气特性不匹配、时序偏差
    的头像 发表于 10-30 17:34 1931次阅读
    直播回顾 |  深度解读CAN总线<b class='flag-5'>一致性</b>测试的四大层级与实战方法,虹科技术直播助您破解汽车通信稳定性的关键

    镜头不一致的问题原因分析

    在机器视觉系统的视界,镜头一致性犹如维系整个生态的隐形生命线,贯穿于光学成像、图像处理到智能决策的全链路,其细微波动足以颠覆整个检测系统的可靠。当工业界热衷于讨论算法精度与算力突破时,镜头这基础光学元件的
    的头像 发表于 09-11 09:45 683次阅读

    LED材料一致性比对(导热塑料开裂案例分享)

    不断地侵蚀着我们,面对这些劣质产品,可能个细小的失误就可能给企业造成巨大的财产损失或断送了前程。材料一致性比对的应用领域来料检验:由供应商未通知客户擅自改换原材料
    的头像 发表于 06-19 14:14 434次阅读
    LED材料<b class='flag-5'>一致性</b>比对(导热塑料开裂案例分享)

    车用锂离子电池机理建模与并联模组不一致性研究

    车用锂离子电池机理建模与并联模组不一致性研究
    发表于 05-16 21:02

    堆焊熔池轮廓实时监控,实现工艺稳定性与焊缝一致性

    及稀释程度等关键参数对焊层质量有直接影响,实时监控熔池轮廓和温度分布可及时预警缺陷并指导参数优化,以保证焊层一致性与工艺稳定性。今天起了解堆焊熔池轮廓实时监控,实现工艺稳定性与焊缝一致性。 堆焊简介 堆焊,又
    的头像 发表于 04-24 17:15 499次阅读
    堆焊熔池轮廓实时监控,实现工艺稳定性与焊缝<b class='flag-5'>一致性</b>

    一致性校正与边缘融合拼接

    电子发烧友网站提供《差一致性校正与边缘融合拼接.pdf》资料免费下载
    发表于 04-10 18:02 0次下载

    罗德与施瓦茨TS8980FTA-M1 5G一致性测试系统通过TPAC认证

    罗德与施瓦茨(以下简称“R&S”)的R&S TS8980FTA-M1 5G一致性测试系统率先通过了测试平台认证标准(TPAC),随即全球认证论坛(GCF)最新的无线资源管理(RRM
    的头像 发表于 02-28 17:22 1194次阅读

    请问如何保证多片AD1278的通道之间相位一致性

    读取手册,发现要保证多片AD1278的通道之间相位一致性需要两点:1、CLK一致;2、SYNC_N同时拉高。 我的情况: 1、各个AD1278的CLK来着不同的时钟源,即分别采用10ppm
    发表于 01-14 06:02

    安立ME7834NR助力智联安验证NB-IoT NTN协议一致性

    安立公司日前宣布北京智联安科技有限公司(以下简称“智联安”)已经成功使用安立协议一致性测试平台ME7834NR来验证其最新NB-IoT NTN芯片MS210的协议功能。
    的头像 发表于 12-13 11:38 1422次阅读

    FCB-EV9520L光轴一致性的典范,焦距变换精准如初

    索尼FCB-EV9520L出色的光轴一致性在多个应用场景中展现出了其独特的优势和价值。通过提高图像的准确、减少图像畸变以及增强应用场景的适应,FCB-EV9520L成为了市场上备受瞩目的视频产品解决方案之
    的头像 发表于 12-09 09:45 990次阅读
    FCB-EV9520L光轴<b class='flag-5'>一致性</b>的典范,焦距变换精准如初