II. Visual Studio Performance Tool▲
Visual Studio propose dans sa version Team Suite un profileur par échantillonnage et par instrumentation. Il est complètement intégré dans l'IDE et peut être géré par une solution Visual Studio.
Deux types de profil peuvent être générés, par échantillonnage ou par instrumentation.
II-A. Mise en place▲
Tout d'abord, le code doit être compilé avec l'option /Zi ou /Z7. Ensuite, l'édition des liens doit s'effectuer avec /DEBUG. Sans cela, il sera impossible de mesurer quelque chose.
Dans mon cas précis, je n'ai pas de projet Visual Studio, donc je commence par créer une solution avec mes fichiers sources pour pouvoir les parcourir en parallèle du profil.
Maintenant, il est nécessaire d'indiquer quels seront les cibles à profiler.
Les propriétés de la cible peuvent être modifiées, en particulier la manière d'exécuter le code. Ici, il s'agit d'un script Python exécuté dans le dossier du raytracer.
II-B. Echantillonnage▲
Une fois le profil exécuté, la page principale reprend les fonctions dans lesquelles le maximum de temps a été passé, de manière inclusive ou exclusive. Inclusive signifie que c'est la fonction ou les fonctions appelées qui seront mesurées, exclusive ne donne que la fonction mesurée.
La liste des fonctions est organisée selon les bibliothèques et exécutables. Dans ce tableau sont donnés le temps passé absolu inclusif ou exclusif donné en nombre d'échantillons, mais aussi en pourcentage.
Une fois une fonction sélectionnée, les fonctions appelées et appelantes peuvent être affichées et analysées pour trouver un point chaud commun.
Un arbre des appels est aussi fourni, mais il n'est pas très utilisable, malheureusement.
Maintenant, voyons comment utiliser les résultats du profileur. La fonction la plus critique va être affichée et analysée.
La sous-fonction la plus critique dans cette fonction occupe 31% du programme total, il s'agit d'un constructeur d'un objet. L'optimisation envisagée va réduire le nombre d'appels à ce constructeur et le pourcentage d'utilisation passe à 21%. Ce gain sur cette fonction est important et se traduit sur l'ensemble du programme par un gain de près de 30%. Le profil ici est donc incontournable.
Avec le bouton droit, le menu contectuel permet d'accéder directement à la fonction étudiée (pratique).
II-C. Instrumentation▲
La sélection de l'instrumentation est facile : il suffit de choisir l'instrumentation à la place de l'échantillonnage et de relancer un profil.
La page principale de ce type de profil est différente : elle récapitule les fonctions les plus appelées, celles qui ont un coût inclusif important (s'il s'agit d'une fonction très appelée et très longue, elle est à optimiser) et celles qui ont un coût inclusif élevé.
La liste des fonctions instrumentées indique le nombre d'appels, le temps passé inclusif et exclusif, et enfin le temps réel passé dans l'application.
Ici, le tableau est identique à l'échantillonnage, mais avec les temps calculés par l'instrumentation. De même pour l'arbre des appels.