gpt4 book ai didi

x86 - 乱序执行会导致推测性内存访问吗?

转载 作者:行者123 更新时间:2023-12-04 04:14:08 24 4
gpt4 key购买 nike

当乱序处理器遇到类似

LOAD R1, 0x1337
LOAD R2, $R1
LOAD R3, 0x42

假设所有访问都将导致缓存未命中,处理器能否在请求 $R1 甚至 0x1337 的内容之前向内存 Controller 请求 0x42 的内容?如果是这样,假设访问 $R1 会导致异常(例如,段错误),我们可以认为 0x42 是推测加载的,对吗?

顺便说一句,当加载存储单元向内存 Controller 发送请求时,它能否在收到前一个请求的答案之前发送第二个请求?

我的问题并不特别针对任何架构。欢迎与任何主流架构相关的答案。

最佳答案

您的问题的答案取决于您的 CPU 的内存排序模型,这与允许乱序执行的 CPU 不同。如果 CPU 实现了 Total store ordering(例如 x86 或 Sparc),那么您的问题的答案是 0x42 将不会在 0x1337 之前加载

如果 cpu 实现了一个宽松的内存模型(例如 IA-64、PowerPC、alpha),那么在没有内存栅栏指令的情况下,所有的赌注都不会被首先访问。除非您正在执行 IO 或处理多线程代码,否则这应该无关紧要。

您应该注意到,某些 CPU(例如 Itanium)确实具有宽松的内存模型(因此读取可能会乱序)但没有任何乱序执行逻辑,因为它们希望编译器以最佳方式对指令和推测指令进行排序而不是在 OOE 上花费硅空间

关于x86 - 乱序执行会导致推测性内存访问吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12512929/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com