cpuid + rdtsc和无序执行

ash*_*hen 5 rdtsc

cpuid用作序列化指令以防止在基准测试时执行ooo,因为基准指令的执行可能会在rdtsc单独使用之前重新排序.我的问题是,是否依然可能下面的说明rdtsc中之间的重新排序cpuidrdtsc?由于rdtsc不是序列化指令,指令可以在它周围自由重新排序?

小智 1

由于 RDTSC 原则上不依赖于任何输入(它不接受任何参数),因此 OOO 管道将尽快运行它。在它之前添加序列化指令的原因是不让 RDTSC 更早执行。

John McCalpin这里有一个答案,你可能会发现它很有用。他解释了 RDTSCP 指令的 OOO 重新排序(其行为与 RDTSC 不同),您可能更喜欢使用它。