gpt4 book ai didi

x86 - 为什么 CPUID + RDTSC 不可靠?

转载 作者:行者123 更新时间:2023-12-01 21:58:49 25 4
gpt4 key购买 nike

我正在尝试分析 x86-64 处理器上的代码执行时间。我指的是this英特尔白皮书并浏览了其他 SO 线程,讨论使用 RDTSCP 与 CPUID+RDTSC 的主题 herehere .

在上述白皮书中,使用CPUID+RDTSC的方法被认为是不可靠的,并且也通过统计数据得到了证明。

CPUID+RDTSC 不可靠的原因可能是什么?

此外,同一份白皮书中的图1(最小值行为图)和图2(方差行为图)中的图形也具有“方波”模式。 如何解释这种模式?

最佳答案

我认为他们发现测量间隔内的 CPUID 会导致总时间出现额外的变化。他们在使用 RDTSCP 指令的 3.2 改进中提出的修复方案强调了这样一个事实:当他们使用 CPUID 时,定时间隔内没有 CPUID。/RDTSC开始,然后 RDTSCP/CPUID停止。

也许他们可以在执行 CPUID 之前确保 EAX=0 或 EAX=1,以选择要读取哪个 CPUID 数据叶 ( http://www.sandpile.org/x86/cpuid.htm#level_0000_0000h ),以防所用的 CPUID 时间取决于您进行的查询。除此之外,我不确定为什么会这样。

或者更好,使用lfence而不是cpuid序列化 OoO exec,而不是完整的序列化操作。

<小时/>

请注意,英特尔白皮书中的内联汇编很糟糕:不需要那些 mov如果您使用适当的输出约束(例如 "=a"(low), "=d"(high)),请进行说明。请参阅How to get the CPU cycle count in x86_64 from C++?寻求更好的方法。

关于x86 - 为什么 CPUID + RDTSC 不可靠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53908252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com