没有执行的未定义 CPU 指令会导致错误?
Undefined CPU instructions without execution cause bugs?
现在尝试动态调度代码,例如SSE、AVX等。
在二进制文件中,所有将在执行时分派的代码都被捆绑在一起。
我担心不会在 CPU 中执行的代码路径中未定义的 CPU 指令会通过推测执行或其他方式导致意外行为。
那么,我有两个问题。
- 通常会CPU推测执行会报错吗?
- 没有执行的未定义 CPU 指令会导致错误吗?
你多虑了。 Speculative execution 被称为 speculative 因为 CPU 只有当它认为值得这样做时才执行一些代码,但不能假设代码不会导致任何 CPU 异常。机器代码执行具有严格的顺序、逐条指令语义,因此 CPU 无法合法地报告与(逻辑上)当前指令指针相关的(推测的)未来问题。
现在尝试动态调度代码,例如SSE、AVX等。 在二进制文件中,所有将在执行时分派的代码都被捆绑在一起。
我担心不会在 CPU 中执行的代码路径中未定义的 CPU 指令会通过推测执行或其他方式导致意外行为。
那么,我有两个问题。
- 通常会CPU推测执行会报错吗?
- 没有执行的未定义 CPU 指令会导致错误吗?
你多虑了。 Speculative execution 被称为 speculative 因为 CPU 只有当它认为值得这样做时才执行一些代码,但不能假设代码不会导致任何 CPU 异常。机器代码执行具有严格的顺序、逐条指令语义,因此 CPU 无法合法地报告与(逻辑上)当前指令指针相关的(推测的)未来问题。