Frage

Es scheint, die meisten neueren CPUs sowohl von AMD und Intel implementieren RDTSC als konstantem Ratenzähler, die Vermeidung der durch Frequenz verursachte Probleme zu ändern als Folge von Dingen wie Turbo Boost oder Energiespareinstellungen.

Wie RDTSC viel mehr geeignet für die Performance als Queryperformancecounter wegen seiner viel geringeren Overhead ist, würde Ich mag es zu benutzen, wann immer möglich.

Wie kann ich zuverlässig erkennen, ob der RDTSC ist eine konstante Rate Zähler oder nicht?

War es hilfreich?

Lösung

Sie können mit CPUID sagen. Aus die docs auf CPUID Fn8000_0007_EDX Bit 8:

TscInvariant: TSC invariant . Die TSC Rate gewährleistet ist invariant in allen P-States, C-States und Stop Grant Übergänge (wie STPCLK Drosselung) zu sein; daher ist der TSC für die Verwendung als eine Quelle von geeigneter Zeit. 0 = keine solche Garantie besteht und Software sollten Sie versuchen zu vermeiden, die TSC als Quelle von Zeit zu verwenden.

Andere Tipps

Ich weiß, es ist eine lange Zeit, da die ursprüngliche Frage gestellt wurde, aber kann ich nur darauf hinweisen, dass die Erzeugung / Modells des Prozessors Überprüfung ist absolut die falsche Sache zu tun. Zunächst einmal ist es sehr einfach, den Code falsch zu bekommen, so dass es nicht funktioniert auf zukünftige Generation Prozessoren (weil die Familie / Modellnummern nicht immer „linear“) sind, und zweitens, nur weil ein Prozessor ist „ein später Familie / Modell“als die, die Sie dies funktionieren wussten schon, es ist keine Garantie, dass die Funktion vorhanden ist. Es ist wahrscheinlich, aber ich habe viel Code gesehen, dass dies schlecht funktioniert, und damit „neue Prozessor herauskommt, und der Code wird etwas schief“.

Mit dem CPUID Bit zu überprüfen, ob der Prozessor die richtige Bit hat oder nicht.

nur Gebrauch CPUID die Generation der CPU zu erkennen, ob seine konstante Zähler. Ich würde jedoch vorschlagen, stattdessen jedoch ein Profilierungs-API, so etwas wie Codeanalyst sdk AMD täte gut daran,

ich tun, um die Zahl o Zecken in einer Sekunde zählen und dann auf die informierte Uhr vergleichen, um / proc / cpuinfo. Es funktioniert nur mit dynamischer Uhr deaktiviert. Siehe die Quelle: https://github.com/petersenna/rdtscbench

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top