2015-09-18 8 views
5

cpuid wird als Serialisierungsanweisung verwendet, um die Ausführung beim Benchmarking zu verhindern, da die Ausführung von Benchmarking-Anweisungen möglicherweise vor rdtsc neu geordnet wird, wenn sie allein verwendet wird. Meine Frage ist, ob es noch möglich ist, dass die Anweisungen unter rdtsc zwischen cpuid und rdtsc umbestellt werden können? Da rdtsc keine Anweisung zum Serialisieren ist, können Anweisungen um sie herum frei angeordnet werden?cpuid + rdtsc und Out-of-Order-Ausführung

Antwort

1

Da RDTSC von keiner Eingabe abhängig ist (es braucht keine Argumente), wird die OOO-Pipeline im Prinzip so schnell wie möglich ausgeführt. Der Grund, warum Sie eine Serialisierungsanweisung hinzufügen, bevor das RDTSC nicht früher ausgeführt werden soll.

Es gibt eine Antwort von John McCalpin here, könnten Sie es nützlich finden. Er erklärt die Neuordnung der OOO für die RDTSCP-Anweisung (die sich von RDTSC anders verhält), die Sie möglicherweise stattdessen verwenden möchten.

Verwandte Themen