有時我遇到的代碼讀取的TSC指令爲rdtsc
,但在前面調用cpuid
。「cpuid」在「rdtsc」之前
爲什麼需要致電cpuid
?我意識到它可能與具有TSC值的不同內核有關,但當您依次調用這兩個指令時,會發生什麼?
有時我遇到的代碼讀取的TSC指令爲rdtsc
,但在前面調用cpuid
。「cpuid」在「rdtsc」之前
爲什麼需要致電cpuid
?我意識到它可能與具有TSC值的不同內核有關,但當您依次調用這兩個指令時,會發生什麼?
這是爲了防止亂序執行。見here的全部細節,下面的相關位:
奔騰Pro和奔騰II處理器支持亂序執行指令可以以另一種順序事先設定它們執行。如果沒有照顧,這可能是錯誤的來源。
爲了防止這種情況,程序員必須序列化指令隊列。這可以通過在RDTSC指令之前插入像CPUID指令這樣的序列化指令來完成。
兩個原因: