Question

Il semble processeurs plus récents de AMD et Intel mettre en œuvre rdtsc comme un compteur de débit constant, ce qui évite les problèmes causés par changement de fréquence en raison des choses comme TurboBoost ou les paramètres d'économie d'énergie.

Comme rdtsc est beaucoup plus approprié pour les mesures de performance que QueryPerformanceCounter en raison de ses frais généraux beaucoup plus bas, je voudrais l'utiliser autant que possible.

Comment puis-je détecter de manière fiable si le rdtsc est un compteur de débit constant ou non?

Était-ce utile?

La solution

Vous pouvez utiliser CPUID pour vous dire. De la documentation sur CPUID Fn8000_0007_EDX bit 8:

  

TscInvariant: TSC invariant . Le taux de TSC est assuré d'être invariant dans tous les P-Unis, C-Unis, et les transitions de subvention d'arrêt (comme STPCLK Throttling); Par conséquent, le TSC est approprié pour être utilisé en tant que source de temps. 0 = Une telle garantie est faite et le logiciel devrait éviter d'essayer d'utiliser le TSC comme source de temps.

Autres conseils

Je sais qu'il est longtemps que la question initiale a été posée, mais je peux simplement souligner que la vérification de la génération / modèle du processeur est absolument la chose à faire MAL. tout d'abord il est très facile d'obtenir le mauvais code afin qu'il ne fonctionne pas sur les processeurs de génération de futurs (parce que les numéros de famille / modèle ne sont pas toujours « linéaire »), et d'autre part, juste parce qu'un processeur est « une suite famille / modèle » que ceux que vous saviez cela fonctionne sur, ce n'est pas une garantie que la fonctionnalité est là. Il est probable, mais j'ai vu beaucoup de code qui le fait mal, et donc « nouveau processeur sort, et le code fait bouger les choses mauvaises ».

Utilisez le CPUID bits pour vérifier si le processeur a le bit correct ou non.

juste utiliser CPUID pour détecter la génération CPU, si l'utilisation de compteurs constants. Je voudrais cependant vous suggérons d'utiliser une API de profilage au lieu que, quelque chose comme CodeAnalyst sdk d'AMD ferait bien

Je ne compte le nombre o tiques dans une seconde, puis comparer à l'horloge informé à / proc / cpuinfo. Il fonctionne uniquement avec horloge dynamique désactivée. Voir la source: https://github.com/petersenna/rdtscbench

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top