CPU怎么保证内存访问冲突?一致性?

早期的CPU是通过提高主频来提升CPU的性能 , 但是随着频率“红利”越来越困难的情况下 , 厂商开始用多核来提高CPU的计算能力 。多核是指一个CPU里有多个核心 , 在同一时间一个CPU能够同时运行多个线程 , 通过这样提高CPU的并发能力 。
内存一致性模型(memory consistency model)就是用来描述多线程对共享存储器的访问行为 , 在不同的内存一致性模型里 , 多线程对共享存储器的访问行为有非常大的差别 。这些差别会严重影响程序的执行逻辑 , 甚至会造成软件逻辑问题 。在后面的介绍中 , 我们将分析不同的一致性模型里 , 多线程的内存访问乱序问题 。
目前有多种内存一致性模型:

  1. 顺序存储模型(sequential consistency model)
  2. 完全存储定序(total store order)
  3. 部分存储定序(part store order)
  4. 宽松存储模型(relax memory order)
一致性模型的特性在后面我们会分析这几个一致性模型的特性
在分析之前 , 我们先定义一个基本的内存模型 , 以这个内存模型为基础进行分析
CPU怎么保证内存访问冲突?一致性?

文章插图
 
上图是现代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是顺序地对主存储器进行访问 。
下面分析这段代码的执行结果
CPU怎么保证内存访问冲突?一致性?

文章插图
 
在顺序存储器模型里 , MP(多核)会严格严格按照代码指令流来执行代码
所以上面代码在主存里的访问顺序是:
S1 S2 L1 L2通过上面的访问顺序我们可以看出来 , 虽然C1与C2的指令虽然在不同的CORE上运行 , 但是C1发出来的访问指令是顺序的 , 同时C2的指令也是顺序的 。虽然这两个线程跑在不同的CPU上 , 但是在顺序存储模型上 , 其访问行为与UP(单核)上是一致的 。
我们最终看到r2的数据会是NEW , 与期望的执行情况是一致的 , 所以在顺序存储模型上是不会出现内存访问乱序的情况
完全存储定序为了提高CPU的性能 , 芯片设计人员在CPU中包含了一个存储缓存区(store buffer) , 它的作用是为store指令提供缓冲 , 使得CPU不用等待存储器的响应 。所以对于写而言 , 只要store buffer里还有空间 , 写就只需要1个时钟周期(哪怕是ARM-A76的L1 cache , 访问一次也需要3个cycles , 所以store buffer的存在可以很好的减少写开销) , 但这也引入了一个访问乱序的问题 。
首先我们需要对上面的基础内存模型做一些修改 , 表示这种新的内存模型
相比于以前的内存模型而言 , store的时候数据会先被放到store buffer里面 , 然后再被写到L1 cache里 。
CPU怎么保证内存访问冲突?一致性?

文章插图
 
首先我们思考单核上的两条指令:
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 , 这样可以减少等待时间)


推荐阅读