【发布时间】:2016-03-04 01:36:06
【问题描述】:
假设我们有两条指令 A店 B店 并且这两个映射到Cache中的两个不同的缓存行。 无论如何考虑缓存中的回写写分配策略,存储的无序退出(存储 B 超过 A)是否会有所帮助? 假设没有异常/中断,没有结构、控制、数据依赖或内存依赖,两条指令之间没有缓存冲突。
【问题讨论】:
-
为了遵守顺序一致性模型,存储和加载需要退出的原因,这意味着,对于程序员在任何给定的时间点,内存应该看起来就像之前的指令当前的指令已经结束,年轻的还没有被执行。也就是说,宽松的一致性模型并不少见。此外,您为什么要重新安排退休?您之所以要退休,是为了确保在精确中断命中时您可以返回。
-
提供精确异常的架构不能retire乱序的任何指令,只能执行。 (This paper about kilo-instruction processors talks about the issue, and alternatives to the traditional ROB with in-order retirement。例如,仅在某些指令下检查点架构状态。)。 @Rgarg:我认为你搞混了:在像 ARM 这样宽松的内存顺序架构上,单个线程仍然可以看到它的 自己的 内存操作按程序顺序发生。所以它不必围着自己的商店!
-
您可能希望乱序执行,当 B 的地址计算可以在 A 的地址计算之前发生时,这是有道理的。
-
@PeterCordes,那么,您的意思是说,即使在宽松的内存顺序架构中,加载和存储也是按顺序出现在内存中的?那么有什么区别呢?谢谢。
-
@Rgarg:一个线程总是“看到”它自己的指令按程序顺序发生,但这并不意味着指令应该按顺序执行。乱序管道必须保证指令“似乎”按顺序发生。