gpt4 book ai didi

performance - 指令级分析 : The Meaning of the Instruction Pointer?

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

在汇编指令级别分析代码时,鉴于现代 CPU 不串行或按顺序执行指令,指令指针的位置究竟意味着什么?例如,假设以下 x64 汇编代码:

mov RAX, [RBX];         // Assume a cache miss here.
mov RSI, [RBX + RCX]; // Another cache miss.
xor R8, R8;
add RDX, RAX; // Dependent on the load into RAX.
add RDI, RSI; // Dependent on the load into RSI.

指令指针将大部分时间花在哪条指令上?我可以为所有这些人想到好的论据:
  • mov RAX, [RBX]可能需要 100 个周期,因为它是缓存未命中。
  • mov RSI, [RBX + RCX]也需要 100 个周期,但可能与前一条指令并行执行。指令指针位于其中一个或另一个上意味着什么?
  • xor R8, R8可能会乱序执行并在内存加载完成之前完成,但指令指针可能会留在此处,直到所有先前的指令也完成。
  • add RDX, RAX生成流水线停顿,因为它是 RAX 的值所在的指令实际上是在缓慢的缓存未命中加载到它之后使用。
  • add RDI, RSI也会停止,因为它取决于 RSI 的负载.
  • 最佳答案

    CPU 认为只有架构寄存器(RAX、RBX 等)并且有特定的指令指针 (IP)。程序员和编译器以这种小说为目标。

    然而,正如您所指出的,现代 CPU 不是串行或按顺序执行的。直到你程序员/用户请求IP,就像量子物理学,IP是一波正在执行的指令;所有这些都是为了让处理器可以尽可能快地运行程序。当您请求当前 IP(例如,通过调试器断点或分析器中断)时,处理器必须重新创建您期望的虚构,以便它折叠此波形(所有“飞行中”指令),将寄存器值收集回架构名称,并构建用于执行调试器例程等的上下文。

    在这种情况下,有一个 IP 指示处理器应恢复执行的指令。在乱序执行期间,这条指令是尚未完成的最旧指令,即使在中断发生时,处理器可能正在获取远远超过该点的指令。

    例如,也许中断指示 mov RSI, [RBX + RCX];作为IP,但xor已经执行并完成;然而,当处理器在中断后恢复执行时,它会重新执行异或。

    关于performance - 指令级分析 : The Meaning of the Instruction Pointer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17010178/

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