6
votes

Comment mesurer X86 et X86-64 Commandes d'assemblage Temps d'exécution dans les cycles de processeur?

Je veux écrire un tas d'optimisations pour GCC en utilisant des algorithmes génétiques. J'ai besoin de mesurer l'heure d'exécution d'une fonction d'assemblage pour certaines statistiques et des fonctions d'ajustement. La mesure de temps habituelle ne peut pas être utilisée, car elle est influencée par la taille de cache.
Alors j'ai besoin d'une table où je peux voir quelque chose comme ça. XXX

Suis je manque quelque chose? Désolé pour le mauvais anglais.


1 commentaires

Ton anglais est bon. Je viens d'avoir un gripe: je ne sais pas si la journée viendra jamais lorsque les personnes qui recherchent quelques% de vitesse via une micro optimisation comprendront également la valeur d'obtenir de nombreux facteurs de vitesse d'accélération via une optimisation macro, que les compilateurs ne peuvent pas faire.


3 Réponses :



2
votes

Avec les processeurs modernes, il n'y a pas de tables simples à rechercher la durée d'une instruction à compléter (bien que de telles tables existent pour certains anciens processeurs, par exemple 486). Votre meilleure information sur ce que chaque instruction fait et combien de temps cela pourrait prendre provient du fabricant de la puce. Par exemple. Les manuels de documentation d'Intel sont assez bons (il existe également un manuel d'optimisation sur cette page).

sur à peu près tous les processeurs modernes Il y a aussi l'instruction RDTSC qui lit le compteur horaire du processeur sur lequel le code est exécuté dans EDX: EAX . Il y a aussi des pièges avec cela, mais essentiellement si le code que vous profilez est représentatif d'une situation d'utilisation réelle, son exécution ne se met pas interrompue ou décalée vers un autre noyau de la CPU, vous pouvez utiliser cette instruction pour obtenir les horaires souhaités. C'est à dire. entourez le code que vous optimisez avec deux instructions rdtsc et prenez la différence dans TSC comme chronométrage. (Variances sur les horaires dans différents tests / situations peuvent être super; statistiques est votre ami.)


0 commentaires

1
votes

Vous pouvez instruminer votre code à l'aide de l'assemblage ( RDTSC et amis) ou Utilisation d'une API d'instrumentation comme PapI . Mesurer avec précision les cycles d'horlogerie dépensés lors de l'exécution d'une instruction n'est pas possible, cependant, vous pouvez vous reporter à vos manuels de développeurs d'architecture pour les meilleures estimations.

Dans les deux cas, vous devriez faire attention lorsque vous prenez des effets sur un environnement SMP.


0 commentaires