【发布时间】:2014-01-25 13:31:56
【问题描述】:
在下面的伪代码中:
if (rdtscp supported by hardware) {
Invoke "rdtscp" instruction
} else {
Invoke "rdtsc" instruction
}
假设 CPU 不支持 rdtscp 指令,所以我们回退到 else 语句。
如果 CPU 错误预测了分支,指令流水线是否有可能尝试执行 rdtscp 并抛出 Illgal Instruction 错误?
【问题讨论】:
-
应该不行。投机执行需要表现得好像它不是投机的。所以所有的错误(访问错误、对齐、非法指令等)都需要被抑制,直到你退出推测执行模式。
-
这是一个很好的论点。不过,我希望有一些指向可靠来源的指针(例如英特尔手册)
-
分支预测只是填充缓存?它实际上并没有执行,不是吗?
-
乱序/推测执行和内存重新排序的黄金法则是“不要破坏单线程代码”。只要正确的代码始终正确运行,CPU 就可以在后台做任何事情。
标签: assembly x86-64 cpu-architecture branch-prediction