gpt4 book ai didi

c - 排空Intel Core 2 Duo 的指令流水线?

转载 作者:太空狗 更新时间:2023-10-29 17:02:16 29 4
gpt4 key购买 nike

我正在为 C 中的一些非常短的操作编写一些微基准测试代码。例如,我正在测量的一件事是根据传递的参数数量调用空函数需要多少个周期。

目前,我在每次操作前后使用 RDTSC 指令进行计时,以获取 CPU 的周期计数。但是,我担心在第一个 RDTSC 之前发出的指令可能会减慢我正在测量的实际指令。我还担心在发布第二个 RDTSC 之前可能无法完成完整操作。

有谁知道在发出任何新指令之前强制所有正在执行的指令提交的 x86 指令?有人告诉我 CPUID 可能会这样做,但我找不到任何这样说明的文档。

最佳答案

据我所知,没有专门“耗尽”管道的指令。这可以通过使用序列化指令轻松实现。

CPUID 是一条序列化指令,这正是您要查找的内容。每条指令在保证在 CPUID 指令之前执行之前发出。

所以执行以下操作应该会得到预期的效果:

cpuid
rdtsc
# stuff
cpuid
rdtsc

但是,顺便说一句,我不建议您这样做。你的“东西”仍然会受到许多你无法控制的其他事物的影响(例如 CPU 缓存、系统上运行的其他进程等),你永远无法将它们全部消除。获得准确性能统计数据的最佳方法是执行您想要测量的操作至少数百万次,并平均出批处理的执行时间。

编辑:大多数 CPUID 指令引用都会提到它的序列化属性,例如 NASM manual appendix B .

编辑 2:也可能想看看 this related question .

关于c - 排空Intel Core 2 Duo 的指令流水线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/575317/

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