cpuid + rdtsc 和乱序执行
cpuid + rdtsc and out-of-order execution
cpuid
用作序列化指令以防止基准测试时 ooo 执行,因为如果单独使用,基准指令的执行可能会在 rdtsc
之前重新排序。我的问题是 rdtsc
下面的说明是否仍然可以在 cpuid
和 rdtsc
之间重新排序?由于 rdtsc
不是序列化指令,指令可以围绕它自由重新排序?
由于 RDTSC 原则上不依赖于任何输入(它不接受任何参数),因此 OOO 管道将尽快 运行 它。之所以在它前面加一条序列化指令,是为了不让RDTSC提前执行。
John McCalpin here 提供了一个答案,您可能会发现它很有用。他解释了 RDTSCP 指令(其行为不同于 RDTSC)的 OOO 重新排序,您可能更愿意使用它。
cpuid
用作序列化指令以防止基准测试时 ooo 执行,因为如果单独使用,基准指令的执行可能会在 rdtsc
之前重新排序。我的问题是 rdtsc
下面的说明是否仍然可以在 cpuid
和 rdtsc
之间重新排序?由于 rdtsc
不是序列化指令,指令可以围绕它自由重新排序?
由于 RDTSC 原则上不依赖于任何输入(它不接受任何参数),因此 OOO 管道将尽快 运行 它。之所以在它前面加一条序列化指令,是为了不让RDTSC提前执行。
John McCalpin here 提供了一个答案,您可能会发现它很有用。他解释了 RDTSCP 指令(其行为不同于 RDTSC)的 OOO 重新排序,您可能更愿意使用它。