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. Suis je manque quelque chose?
Désolé pour le mauvais anglais. P> p>
Alors j'ai besoin d'une table où je peux voir quelque chose comme ça.
3 Réponses :
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). p>
sur à peu près tous les processeurs modernes Il y a aussi l'instruction RDTSC CODE> qui lit le compteur horaire du processeur sur lequel le code est exécuté dans
EDX: EAX code>. 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 code> 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.) P>
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. P>
Dans les deux cas, vous devriez faire attention lorsque vous prenez des effets sur un environnement SMP. P>
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.