弛豫原子和重新排序缓冲区

时间:2019-09-20 10:50:50

标签: c++11 memory cpu cpu-cache

现代处理器按照Tomasulo algorithm无序执行指令,因此reorder buffer的目的是确保将指令的结果写出按程序顺序通过其ISSUE和COMMIT指针。因此,如果我有指令X,Y,Z,则实际的执行顺序可以是Y,Z,X,但是将任何结果写回(提交/退回)的顺序是X,Y,Z。

现在,我对这与C ++ 11宽松原子的联系感到困惑。 Wikipedia首先告诉我(强调我的意思)

  

内存顺序描述了通过以下方式访问计算机内存的顺序   一个CPU。该术语可以指代由   编译期间,编译器或生成的内存顺序   由CPU在运行时完成。

...以及宽松的一致性:

  

可以在加载后对加载进行重新排序(为了更好地利用缓存一致性,更好地缩放)

     

存储后可以重新排序负载

     

商店可以在商店之后重新排序

所以我不明白什么是放松的原子实际上给我的东西,因为任何指令都可以无序执行,但必须始终按照重新排序缓冲区的顺序“提交/退出” < / em>。

假设:当然,放松的一致性肯定不能使重新排序缓冲区真正使程序集所指示的顺序错乱地提交/退出指令(从那以后为什么要有重排序缓冲区?),所以我唯一想到的-我已经读了无数次(并合理地理解)了-它影响了其他“看到”的内核写入内存位置的顺序。举一个简单的例子,对Core1上的变量X的轻松写入可能不会立即在Core2中看到;而采用获取/释放或顺序一致的写入方式将是这样。


1)有人可以澄清我的假设是否正确吗?

2)当重新排序缓冲区退出“存储字”指令时,在硬件级别上,当“放松”存储与“顺序存储”时发生的变化是什么?一致”?当然,这与缓存有关吗?有点像“ 在需要时将其推送到其他缓存”,而不是“ 现在将其推送到所有其他缓存”(或者这是错误的吗? )


在发布我的问题(仅供参考)之前,我已经广泛搜索了有关此方面的信息。

0 个答案:

没有答案