17-21 Octobre 2005 Formation Continue - CNRS Laurence Viry Analyse et Optimisation de code Analyse de performance
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Méthodologie conseillée Valider le programme à optimiser Utiliser des codes déja optimisés ou sy ramener Utiliser des algorithmes performants Analyser le code, et se concentrer sur les sections critiques Utiliser les capacités doptimiser du compilateur Effectuer des modifications dans le code pour optimiser les sections critiques
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Compteurs Hardware Petits registres comptabilisant les occurrences dévénements associés à des fonctions du processeur Instructions load/store Opérations Floating Point Nombre de cycles dattente daccès mémoire Cache misses, TLB misses,… … Fournies des informations utiles à lexplication dun manque de performance de certaines parties de codes Le suivi de ces événements permet daffiner ladaptation du code à larchitecture cible
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Mesures de performance Mesure du temps Global :User, CPU et wall ou elpased time, autres statistiques… Partie de code : appel à une fonction explicite (C, Fortran, system…) Profiling: Analyse détaillée de performance Nombre dappels des procédures, temps passé dans ces procédures, graphe des appels… Utilisation des compteurs hardware: comptage ou statistique sur des événements (nombre de floating point, caches misses, TLB misses,…) Traçage: analyse et/ou visualisation à postériori de lexécution dun programme Enregistrement des informations sur des événements (caches misses, …) par process/thread pendant lexécution Reconstruction dynamique du comportement du programme à partir de ces informations Nécessite linstrumentation du code
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Mesures de performance Mesure globale du temps (autres statistiques) commande UNIX "time" Mesure du temps d'une partie de code par une Fonctions explicites (C et Fortran) Analyse complète de performance du code Outils standard de profiling: prof, gprof, pixie, …
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Mesure globale du temps - time time (commande de base UNIX/LINUX) : Temps utilisateur, temps système, elapsed ou wall time CPU time = Temps utilisateur + temps système Propriétés Résolution de l'ordre de 10ms Un "system_time" disproportionné peut indiquer un disfonctionnement Nombre important de « floating-point exceptions » Nombre important de "page faults" ou de "misaligned memory access" …
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Mesure globale du temps - time Propriétés CPU time < elapsed time Partage de la machine Grand nombre d'I/O Largeur de bande requise > largeur de bande de la machine Pagination et/ou swap important …
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Fonction TIME (CSH ou TCSH) % time program 14.9u 1.4s 0:19 83% K 27+86io 47pf+0w Pourcentage d'utilisation Quantité moyenne de mémoire partagée (Kb) Quantité moyenne de mémoire réelle non-partagée utilisée Nombre de blocs en entrée Nombre de blocs en sortie Fautes de pages Nombre de swaps User time System time Elapsed time
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Fonctions explicites de mesure de temps Appel explicite de sous-programmes à l'intérieur du code Fonction system_clock(): elapsed time Procédures de la norme Fortran90/95 (~10ms) cpu_time() : temps CPU date_and_time() :elapsed time Fonction etime (non standard): temps système, utilisateur et total Hors standard : fonctions constructeurs
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Fonctions explicites de mesure de temps system_clock Procédure system_clock: elapsed time real :: time integer :: debut, fin,rate call system_clock(count=debut,count_rate=rate) … call system_clock(count=fin) time= float(fin-debut)/rate
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Fonctions explicites de mesure de temps etime Fonction etime (non standard) real :: actual, etime, tarray(2) actual=etime(tarray) Avec tarray(1) : temps utilisateur tarray(2) : temps du system etime : temps total Non standard
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Fonction dans la norme Fortran90/95 Procédure cpu_time real :: time_debut, time_fin call cpu_time(time_debut) … call cpu_time(time_fin) print*, "temps = ", time_fin – time_debut, " secondes" Procédure date_and_time : elapsed time integer :: date_time(8) character (len=12) :: real_clock(3) call date_and_time(real_clock(1), & real_clock(2), real_clock(3),date_time) Voir "Fortran Language Reference Manual"
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Profiling Permet de déterminer les parties de code les plus consommatrices avant le travail doptimisation Récupère des informations sur: Le temps, le nombre dappels des procédure, le graphe des appels, des statistiques sur des compteurs hardwares… Différentes granularités, fonction, boucle, bloc de base et même ligne de code Coût de développement relativement faible Plusieurs types de profiling : PC Sampling: interruption périodique du système ou trap des compteurs hardware. Ne nécessite en général pas de modification du code Basic-Bloc Counting : lunité danalyse est le bloc de base Méthode intrusive qui consiste à insérer directement des instructions de mesure dans le code (par le profiler ou manuellement)
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Outils de profiling Méthode non intrusives prof, gprof sur les OS UNIX/linux VPROF ( SvPablo TAU (OpenMP, MPI, MPI/OpenMP) VAMPIR / VampirTrace : MPI HPCView Dynaprof (nécessite dyninst ou DPCL) Outils constructeurs: perfex et ssrun (SGI IRIX), tprof et trace (IBM), PAT (CRAY), histx, pfmon (Linux), Vtune (Intel), hiprof, pixie (Alpha Tru64) … … Méthodes intrusives PAPI: interface portable des compteurs hardware et mesure du temps
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Profiling Deux types de profiling : PC Sampling : prof, gprof hiprof Basic-Bloc Counting : prof, pixie Utilisation des Compteur Hardware : PAPI pfmon, lipfpm, histx (linux) uprofile et kprofile (Tru64) …
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Trois étapes pour le profiling prof, gprof, hiprof… Instrumentation automatique du programme Par le compilateur (prof, gprof): -p, –pg Par le profiler (hiprof, pixie, histx…) Exécution du programme instrumenté Crée le fichier de données pour le profiler (mon.out,gmon.out,…) Utilisation du profiler pour l'extraction et la lecture des résultats: prof, gprof, hiprof, iprep…
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry PC-Sampling prof Cpu_time profiling : option –p et profiler prof Trois étapes % f90 –p –o prog prog.f % prog => création du fichier mon.out % prof prog mon.out > prof.list (sortie par défaut à l'écran)
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry PC-Sampling gprof -hiprof Cpu-time profiling + graphe des appels Compilateur : option –pg et profiler gprof % f90 -pg –o prog prog.f % prog => création du fichier gmon.out % prof prog gmon.out > prof.list (sortie par défaut à l'écran) profiler hiprof (pas d'option particulière à la compilation): Compiler le programme : f90 –o prog prog.f Instrumentation du programme: hiprof prog => prog.hiprof Exécution :./prog.hiprof ou hiprof –run prog Affichage des résultats : hiprof –run –display prog
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Listing: PC-Sampling Each sample covers 8.00 byte(s) for 4% of seconds %time seconds cum % cum sec procedure (file) square_ (matpower.f) square_mult_ (matpower.f) time : pourcentage de temps passé dans la routine seconds : temps en secondes passé dans la routine cum : pourcentage de temps cumulé cum sec : temps cumulé en secondes
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry PC-SAMPLING + GRAPH
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry PC-SAMPLING + GRAPH
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Basic-Bloc Counting pixie,prof (Alpha – Tru64) 4 étapes Compilation : f90 –g1 –O2 –o prog prog.f Instrumentation: pixie prog Programme instrumenté: prog.pixie Fichier d'adresses des blocs: prog.Addrs Exécution: prog.pixie Crée le fichier compteurs de blocs: prog.Counts Extrait et affiche l'information de profiling prof –pixie prog >prog_pixie.list
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Basic-Bloc Counting (pixie,prof) Réduire les informations fournies -exclude, -only -quit : troncature du listing après n lignes
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Outils danalyse de Performances SGI -IRIX speedshop (commande ssrun): localise les sections de code consommatrices de temps CPU prof: analyse et édite les données de performance issues de Speedshop ou ssrun dprof: échantillonne un programme et enregistre les informations concernant les accès mémoire perfex: exécute le programme et récupère les données des compteurs hardware
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Outils danalyse de Performances HP/Compaq – TRU64 prof Extrait les informations produites par –p ou pixie pixie Basic Bloc Profiler gprof Extrait les informations produites par –pg ou hiprof hiprof Crée un programme instrumenté pour le profing des appels, du graphe des appels, des défauts de page,… uprofile: interface avec les coumpeurs Hardware des processeurs Alpha
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Outils danalyse de Performances Altix350 - Linux pfmon: analyseur de performance utilisant le Performance Monitoring Unit (PMU) de lIA-64 profile.pl : script perl utilisant pfmon et dautres scripts pour effectuer un profiling au niveau procédural histx et lipfpm(SGI): outils de profiling, exploitation des compteurs de lItanium Vtune: Outil Intel de monitoring de code
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Analyse de performance Itanium/linux – pfmon Outil danalyse de performance dun ou plusieurs processus sur un ou plusieurs processeurs Itanium sous Linux (OpenSource) Récupère des données au niveau utilisateur et au niveau noyau Analyse des événements issus des compteurs hardware (jusquà 4) Profiling sur tous les nœuds/processeurs gérés par le système (System-Wide Profiling) Génère un faible overhead
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Itanium/linux – pfmon Quelques options: -h : aide -e : spécifie jusquà 4 événements (CPU_CYCLES par défaut) -l : liste des événements ( 475 sur Itanium2) -i : fornit la description de lévénement -k : profiling au niveau du noyau --system-wide: system-wide profiling -c : restreint le « system-wide profiling » à une liste de processeurs Une seule session de profiling par CPU
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Itanium/linux – pfmon É vénements disponibles: pfmon –l Descrition sommaire dun compteur: pfmon –i ex: pfmon –i FE_BUBBLE_TLBMISS Inclure le détail du temps passé dans les appels système: faire une copie dans le répertoire dexécution du fichier /boot/System.map Documentations: pfmon 2.0 Users Guide: /usr/share/doc/pfmon-2.0/pfmon_usersguide.txt Supplément Itanium et Itanium2 /usr/share/doc/pfmon-2.0/pfmon_itanium.txt /usr/share/doc/pfmon-2.0/pfmon_itanium2.txt
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Itanium/linux – pfmon Evénements importants: L2_MISSES : nombre de L2 Misses L3_MISSES : nombre de L2 Misses L2DTLB_MISSES : Nombre de TLB Misses L2_OZQ_CANCELS1_BANK_CONF nombre de conficts de cache L2 BR_MISPRED_DETAIL_ALL_WRONG_[PATH|TA RGET] : branchements mal prédits … Exemple: % ifort –O3 –o multmat multmat.f90 % pfmon –e CPU_CYCLES,L2_MISSES,L3_MISSES./multmat
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Itanium/linux – profile.pl Script utilisant pfmon Compilation avec loption –g profile.pl utilise dplace pour les programmes parallèles, une sélection dun sous ensemble de processeurs: options –K et –K Appels aux scripts: makemap.pl : analyse.pl : Analyse du temps passé dans les appels système: copie du fichier /boot/System.map dans le répertoire dexécution
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Analyse de performance Altix350 – histx (SGI) Programme et liste doutils danalyse de performance sur Altix, développés par SGI Compatible OpenMP et MPI Utilisent les compteurs Hardware de lItanium2 Capable de suivre les enfants dun processus (fork, thread…) Compatible Propack 2.x :
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Analyse de performance Altix350 – histx (SGI) Liste des outils danalyse de performance lipfpm: permet dexploiter le « Performance Monitor Unit » (PMU) intégré au processeur Itanium2 (~perfex sous IRIX) samppm: échantillonage des événements PMU à la vitesse spécifiée dans la commande histx: Suit la trace de lexécution dun binaire, y compris une commande système et dresse la liste des points de passage les plus fréquents dumppm: convertit les fichiers binaires issus de samppm en informations humainement lisibles iprep: interprétation des analyses de histx en mode « Instructions Pointers » csrep : interprétation des analyses de histx en mode « Callstack»
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry HISTX: lipfpm Linux IPF Performance Monitor Utilisation du cache L2 et du cache L3: lipfpm -e L2_MISSES -e L2_REFERENCES -e L3_MISSES -e L3_REFERENCES./a.out lipfpm summary ====== ======= L2 Misses L2 References L3 Misses L3 References
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry HISTX: lipfpm utilisation du cache L2 et le Mflop : lipfpm -e FP_OPS_RETIRED -e L2_MISSES -e L2_REFERENCES $COMMANDE lipfpm summary ====== ======= Retired FP Operations L2 Misses Requests Made To L CPU Cycles Percentage of L2 misses Average MFLOP/s Average MB/s requested by L
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry HISTX: lipfpm utilisation du cache L3 et des debits des accès en mémoire lipfpm -e FP_OPS_RETIRED -e L3_READS.DATA_READ.ALL \ -e L3_READS.DATA_READ.MISS $COMMANDE lipfpm summary ====== ======= Retired FP Operations L3 Reads -- L3 Load References L3 Reads -- L3 Load Misses CPU Cycles Average MFLOP/s Average data read MB/s requested by L
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Programme HISTX Donne des détails : Par ligne (du code) : option -g Par fonction (du code) Par librairie Jusquà N niveaux dappels de fonctions des librairies (mode callstack) Par thread, process forké,… Exemple : %icc –g prog.c %histx –l –o sorties_histx./a.out %iprep sorties_histx
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Mémoire virtuelle Utilisation de la zone de swap Mémoire requise > mémoire physique de la machine Partage des ressources entre plusieurs programmes Profiling Comparer la mémoire requise à la mémoire physique Commande size : text, data, bss Option du compilateur sur Tru64 Unix: -V Détails de la mémoire utilisée: bss,data,text (bss <0 si la mémoire requise < mémoire physique de la machine) Ne tient pas compte de la pile et du tas Page faults: vmstat ( Berkeley S) et sar (System 5)
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Page faults Global : vmstat 5 Virtual Memory Statistics: (pagesize = 8192) procs memory pages intr cpu r w u act free wire fault cow zero react pin pout in sy cs us sy id K 138K 14K 2M 193K 2M 0 187K K 138K 14K K 138K 14K K 138K 14K Par programme / procédure: Profiler hiprof hiprof –run –display –faults matpower
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Compteur Hardware exemple de lOX000(SGI) deux registres de compteur de performances 1 à 16 événements hardware par compteur 2 événements: comptage exacte plus de 2 événements: multiplexage par lOS sur les 2 compteurs, estimation statistique loverflow dun compteur provoque un hardware trap Nécessité dune interface gérant les informations récupérées par les compteurs hardware ssrun, perfex sur Origin 2000
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Compteur Hardware EV67, EV68 et EV7 Deux registres de compteur de performances pour compter les événements hardware (1 à 16 événements hardware par compteur) 2 événements: comptage exacte plus de 2 événements: multiplexage par lOS sur les 2 compteurs, estimation statistique loverflow dun compteur provoque un hardware trap Dépend du type de processeur – inopérant sur EV6 Profiler uprofile
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Compteur Hardware Itanium2 - Altix350 Quatre registres de compteur de performances pour compter les événements hardware (1 à 4 événements hardware par compteur) loverflow dun compteur provoque unhardware trap Profiler: pfmon,lipfpm, histx
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Pourquoi PAPI? Les compteurs Hardware existent sur la plupart des processeurs Les mesures de performances associées à ces compteurs varient suivant les processeurs Il y a très peu dAPI permettant de les utiliser et elles sont souvent peu documentées instables et parfois inutilisables
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry But de PAPI Fournir une API portable, simple à utiliser pour accéder aux compteurs hardware sur la majorité des plate-formes HPC Définir des métriques de performances communes à un grand nombre de plate-formes fournissant des informations utiles à loptimisation de codes Encourager les vendeurs à standardiser les interfaces et la sémantiques des compteurs hardware
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Traceanalyser – VampirTrace (4.0) Outils danalyse et de visualisation de performance dun programme // MPI MPI multi threads Multithreads java Deux composants: Trace Collector ou Vampirtrace: permet la génération automatique de la trace dun programme parallèle MPI Traceanalyser ou Vampir : programme de visualisation graphique de la trace générée par Vampirtrace
17 – 21 Octobre 2005 Formation Continue - CNRS Laurence Viry Traceanalyser – VampirTrace (4.0) Implémenté sur la plupart des plate- formes Intel Itanium, Redhat et MPI/mpich Ia32 architecture avec LAM/MPI Itanium-2 avec HP-UX et HP-MPI Compaq,CRAY,Fujitsu,Hitachi,HP,IBM,NEC,SGI,S un Documentation sur le site de Pallas