gpt4 book ai didi

assembly - x86-64 管道是否会像 JMP RAX 一样在间接跳转上停止?

转载 作者:行者123 更新时间:2023-12-02 19:20:51 25 4
gpt4 key购买 nike

在 x86-64 中,如果使用以下汇编代码:

MOV RAX, (memory address)
JMP RAX

管道在执行分支之前是否会停止(以等待 MOV 使用 RAX 完成),还是会像条件分支一样刷新管道?

最佳答案

适用于大多数现代 80x86 CPU;有静态预测(没有历史记录可用于做出更好的预测)和动态预测(有可以使用的先前执行的历史记录)。

对于静态预测,CPU 预测将在紧接着 JMP RAX 之后的指令处继续执行。我不完全确定哪些 CPU 对 JMP RAX 使用动态预测(而不仅仅是针对 Jc 分支);但对于那些这样做的人来说,它会覆盖静态预测。

一旦 CPU 有了预测的目标地址,它就会推测性地执行,直到发现它的预测是否正确/错误。如果预测正确,它将保留其所做的所有工作,并且 JMP RAX 的成本很少或没有。

如果 CPU 预测错误,那么这与任何其他分支错误预测没有什么不同(丢弃所有推测执行的工作并返回到正确的 RIP 处获取/解码)。

请注意,如果您的 JMP RAX 是不可预测的,或者它后面的指令不太可能成为跳转的目标;英特尔建议在跳转后立即放置 PAUSEUD2 以防止不必要的推测执行。在这种情况下,CPU 将停止运行(在找到正确的跳转目标之前不执行任何操作)。

另请注意,您需要移动 MOV RAX, .. 以便尽快执行它,以便尽快知道跳转的目标,以便尽快知道您可以最大限度地减少停滞或推测执行错误的时间。

关于assembly - x86-64 管道是否会像 JMP RAX 一样在间接跳转上停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37370105/

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