有时我遇到用rdtsc指令读取TSC的代码,但是恰好在之前调用cpuid

为什么需要调用cpuid?我意识到这可能与具有TSC值的不同内核有关,但是当您依次调用这两个指令时会发生什么呢?

最佳答案

这是为了防止乱序执行。从现在已经从网络上消失的链接(但是在消失之前被幸运地复制到这里)中,该文本摘自一个约翰·埃克达尔(John Eckerdal)题为“性能监控”的文章:

Pentium Pro和Pentium II处理器支持乱序执行指令,在对它们进行编程时可能会以另一种顺序执行。如果不注意,这可能是错误的来源。
为了避免这种情况,程序员必须序列化指令队列。这可以通过在RDTSC指令之前插入一个串行化指令(如CPUID指令)来完成。

关于assembly - “rdtsc”之前的“cpuid”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2918113/

10-12 00:49