2010-08-11 3 views
0

Un expert en code hautement optimisé m'a dit une fois qu'une partie importante de sa stratégie était la disponibilité de minuteurs de très haute performance sur la CPU. Est-ce que quelqu'un sait ce que c'est et comment on peut y accéder pour tester diverses optimisations de code?Minuteurs cpu haute précision

Bien que je sois intéressé malgré tout, je voulais aussi demander s'il est possible d'y accéder depuis quelque chose de plus haut que l'assemblage (ou avec seulement un petit assemblage) via Visual Studio C++?

+1

http://icl.cs.utk.edu/papi/ – Anycorn

Répondre

2

QueryPerformanceCounter() et les fonctions connexes dans Win32 utilisent les minuteurs haute performance intégrés à la plupart des puces Intel modernes.

4

Cela dépend de la plate-forme, mais puisque vous mentionnez Visual Studio, je vais supposer Windows.

Vous avez besoin de QueryPerformanceCounter dans win32. Vous pouvez également utiliser StopWatch dans .Net.

Re: StopWatch résolution
directement à partir de la documentation liée

Utilisez les champs de fréquence et IsHighResolution pour déterminer la précision et la résolution de la mise en œuvre de chronométrage.

En d'autres termes, il peut être de haute ou basse résolution.

+0

Je pensais que StopWatch utilisait uniquement les heures habituelles offertes par Windows, par ex. avec une résolution d'environ 10-15ms (que je devinerais est vraiment mis à jour avec chaque commutateur de fil). Est-ce que je me trompe à propos de StopWatch étant seulement un minuteur assez de cours? –

+0

@John Robertson: voir mise à jour –

+0

Oh tirer, vous avez raison, il a ces champs. J'avais oublié, mais j'étais familier avec StopWatch que j'ai utilisé dans le passé, donc je ne l'ai pas regardé plus attentivement. Mes excuses. –

1

La précision de votre minuterie dépend entièrement de votre matériel. Si votre matériel ne peut pas mesurer quelque chose de plus petit qu'une microseconde, il est impossible d'être plus précis que la microseconde la plus proche. Dans mon expérience, cependant, je n'ai jamais eu besoin d'une meilleure précision que les millisecondes pour mesurer la performance. À moins que vous ne construisiez un microcontrôleur où toutes les instructions d'assemblage sont essentielles à votre vitesse, tout différentiel de vitesse notable sera de l'ordre de quelques secondes, pas de microsecondes. Et si vous utilisez Visual C++, il est peu probable que vous travailliez sur un micro-contrôleur.

+0

Je reçois beaucoup de données très rapidement et il doit être marqué avec des indicateurs de temps d'arrivée précis. Une microseconde * pourrait * fonctionner, mais je suis douteux, 10 est hors de question. Bien sûr, en tapant cela, je me rends compte que les problèmes de threads seuls vous empêchent d'obtenir mieux que 10 microsecondes votre thread sera permuté pendant des périodes aussi longues. Hmmm, je me demande comment wireshark obtient ces temps d'arrivée de microseconde. –