Domanda

Sembra la maggior parte delle più recenti CPU da AMD e Intel implementare rdtsc come un contatore velocità costante, evitando i problemi causati da frequenze che cambiano a causa di cose come le impostazioni di risparmio energetico o di TurboBoost.

Come rdtsc è molto più adatto per la misura delle prestazioni di QueryPerformanceCounter a causa della sua overhead molto più bassa, vorrei usarlo quando possibile.

Come faccio a rilevare in modo affidabile se il rdtsc è un contatore velocità costante o no?

È stato utile?

Soluzione

È possibile utilizzare CPUID per dirvi. Da la documentazione su CPUID Fn8000_0007_EDX Bit 8:

TscInvariant: TSC invariante . Il tasso TSC è garantito essere invarianti in tutti P-States, C-membri e transizioni fermata sovvenzioni (come STPCLK Throttling); quindi il TSC è adatto per essere utilizzato come fonte di tempo. 0 = Nessun tale garanzia è fatta e il software dovrebbe evitare di utilizzare il TSC come fonte di tempo.

Altri suggerimenti

Lo so che è da molto tempo che la domanda iniziale è stato chiesto, ma posso solo sottolineare che il controllo della generazione / modello del processore è assolutamente sbagliato cosa da fare. Prima di tutto, è molto facile da ottenere il codice errato in modo che non funziona sui futuri processori della generazione (perché i numeri di famiglia / modello non sono sempre "lineare"), e in secondo luogo, solo perché un processore è "un secondo famiglia / modello" di quelli si sapeva questo funziona su, non è una garanzia che la funzione è lì. E 'probabile, ma ho visto un sacco di codice che fa questo male, e così "nuovo processore viene fuori, e il codice ottiene le cose sbagliate".

Usa il CPUID bit per verificare se il processore ha il bit corretta o meno.

solo uso CPUID per rilevare la generazione della CPU , vedere se usando contatori costanti. Avevo però, suggerirei di usare un'API di profilatura, invece, però, qualcosa come SDK CodeAnalyst di AMD farebbe bene

Lo faccio contare il numero o zecche in un secondo e quindi confrontare l'orologio informata a / proc / cpuinfo. Funziona solo con l'orologio dinamica disabilitato. Vedere la fonte: https://github.com/petersenna/rdtscbench

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top