Architecture Avancée
Université de Cergy-Pontoise
b.Compilation et exécution du projet
Vous aller maintenant insérer au projet le code d’une application simple déjà développée en
partie : dotprodc. Pour cela, aller dans ‘Project/Add to project …/Files’ et ajouter les fichiers
dotprod.c, dotprod_main.c et dotprodc.ldf.
•Vous trouverez ces fichiers sur la page web habituelle.
Un fichier LDF est un fichier descripteur de l’édition de liens.
Compiler le programme (menu Project).
A l’issue de la compilation vous vérifierez que dans le répertoire debug de votre projet les fichiers
objets (.doj) et le fichier exécutable (.dxe) ont bien été générés.
Exécuter maintenant le projet (menu Debug si elle n’est pas lancée automatiquement). La fenêtre
‘Dissambly’ fournit une vision du code assembleur désassemblé à partir du fichier exécutable.
Un point d’arrêt a été placé dans le code C, retrouver sur quelle instruction en faisant de
l’exécution pas à pas. Continuer l’exécution pas à pas jusqu’à la fonction a_dot_b et visualiser
l’effet du pipeline sur le saut de fin de boucle.
Faites un restart, puis relancer l’exécution (run).
Si vous lancer à nouveau ‘run’ pour continuer l’exécution après le breakpoint l’exécution semble
ne pas terminer. Pour l’arrêter aller dans ‘Debug/Halt’.
En effet, la mémoire continue bien après la dernière instruction du code. Quelle est cette
instruction ? Pourquoi l’exécution boucle-t-elle dessus ?
Pour palier à ce problème de confort de manipulation du programme, ajouter un breakpoint à la
fin du programme. Pour cela, utiliser le menu ‘Settings/Breakpoint…’. Pour ajouter un point
d’arrêt supplémentaire, on peut soit donner son adresse, visible dans la fenêtre Disassembly, soit
aller chercher le symbole dans la table (…des symboles) accessible par le bouton browse, puis sur
Add.
Relancer l’exécution après avoir réinitialiser l’exécution avec ‘Debug/Restart’.
Un autre moyen de constater l’évolution du programme est de faire du pas à pas avec ‘Debug/Step
Into’ (F11).
Vous savez maintenant compiler, et exécuter (au besoin pas à pas) un programme.
Regarder maintenant le code que vous avez exécuter pour comprendre sa fonctionnalité.
c.Profiling de l’application
Nous allons maintenant profiler ce programme pour déterminer quelle partie devrait être optimisée
(en assembleur). Nous allons récupérer les informations :
•Pourcentage de temps d’exécution par fonction
•Nombre de cycles d’exécution
•Nombre d’instructions exécutées
•Nombre d’accès mémoire
Premièrement sélectionner l’analyse statistique par le menu Tools/Statistical Profiling/enable.
Aller dans le menu View/Debug Windows/Statistical results pour lancer la fenêtre correspondante.
Relancer l’exécution et identifier les sections critiques. Double cliquer sur la première ligne pour
visualiser le code responsable de ce temps d’exécution.
Sélectionner maintenant ‘Tools/Profile…/enable profile’ pour une analyse plus précise.
Puis Tools/Profile…/Profile…/Add/RemoveRange pour sélectionner la portion à analyser.
Vous choisirez d’analyser la function a_dot_c (du label a_dot_c à a_dot_c_end).