我正在为C中的一些非常短的操作编写一些微型基准测试代码。例如,我测量的一件事是根据传递的参数数量调用一个空函数需要多少个周期。排空英特尔Core 2 Duo的指令流水线?
目前,我在每次操作前后使用RDTSC指令计时以获得CPU的周期数。但是,我担心在第一个RDTSC之前发布的指令可能会减慢我测量的实际指令速度。我还担心在第二个RDTSC发布之前,整个操作可能没有完成。
有没有人知道在发布任何新指令之前强制执行所有飞行中指令的x86指令?我被告知CPUID可能会这样做,但我一直无法找到任何说明的文档。
你是对的围栏说明。 CPUID实际上暗示了它们(我删除了我的答案)。请注意,当CPUID序列化时,它不会清除缓存,这也可能会影响性能。缓存可以用WBINVD清除。您可能想将其添加到您的答案中。 – 2009-02-22 19:54:48