我正在爲C中的一些非常短的操作編寫一些微型基準測試代碼。例如,我測量的一件事是根據傳遞的參數數量調用一個空函數需要多少個週期。排空英特爾Core 2 Duo的指令流水線?
目前,我在每次操作前後使用RDTSC指令計時以獲得CPU的週期數。但是,我擔心在第一個RDTSC之前發佈的指令可能會減慢我測量的實際指令速度。我還擔心在第二個RDTSC發佈之前,整個操作可能沒有完成。
有沒有人知道在發佈任何新指令之前強制執行所有飛行中指令的x86指令?我被告知CPUID可能會這樣做,但我一直無法找到任何說明的文檔。
你是對的圍欄說明。 CPUID實際上暗示了它們(我刪除了我的答案)。請注意,當CPUID序列化時,它不會清除緩存,這也可能會影響性能。緩存可以用WBINVD清除。您可能想將其添加到您的答案中。 – 2009-02-22 19:54:48