Ale*_*x B 18 x86 assembly rdtsc
有时我会遇到使用rdtsc指令读取TSC的代码,但cpuid之前会调用.
为什么要打电话cpuid?我意识到这可能是与有TSC的值不同的内核,但什么究竟,当你调用序列这两个指令会发生什么?
pax*_*blo 18
这是为了防止无序执行.从一个现在已经从网络上消失的链接(但在它消失之前偶然复制到这里),这篇文章来自John Eckerdal的一篇题为"性能监控"的文章:
Pentium Pro和Pentium II处理器支持无序执行指令,可以在编程时以其他顺序执行.如果不加以处理,这可能是错误的来源.
为了防止这种情况,程序员必须序列化指令队列.这可以通过在RDTSC指令之前插入CPUID指令之类的序列化指令来完成.
两个原因: