Systèmes Hautes Performances

Portail informatique
Avant de commencer, téléchargez le script asr5_env.sh et sourcez le: $ wget http://www-inf.telecom-sudparis.eu/COURS/CSC5001/new_site/Supports/Cours/AnalysePerf/asr5_env.sh $ source asr5_env.sh Le but de ce TP est d'apprendre à maîtriser différents outils d'analyse de performance. Pour cela, nous allons analyser une application jouet à télécharger ici: mandelbrot.tgz. Une première étape dans l'analyse de performance consiste à évaluer les performances "de base" de l'application. Pour cela, nous allons tracer une courbe d'accélération.
  1. Exécutez le programme mandelbrot en faisant varier le nombre de threads OpenMP
  2. Créer un fichier d'extension .data contenant:
    • le nombre de coeurs sur la première colonne
    • le temps séquentiel sur la deuxième colonne
    • le temps parallèle sur la troisième colonne
    Voir un fichier d'exemple SpeedUpMandelbrot-OpenMP.data.
  3. Regarder et modifier le fichier speedup.plot :
    • le titre
    • le nom du fichier en sortie .png
    • le nom du fichier en entrée .data
  4. Exécuter la commande :
  5. gnuplot speedup.plot
  6. Cela génère le fichier de sortie .png. Voir SpeedUpMandelbrot-OpenMP.png.
On souhaite maintenant déterminer les fonctions les plus couteuses du programme mandelbrot_gui. Pour cela, nous allons utiliser le profiler gprof.
  • Recompilez le programme mandelbrot_gui en ajoutant l'option de compilation -pg
  • Exécutez le programme
  • Analysez les résultats avec gprof
Le but de cet exercice est d'utiliser EZTrace pour visualiser l'exécution du programme: $ make clean $ make CC="eztrace_cc gcc" mandelbrot eztrace_cc gcc -fopenmp -o mandelbrot mandelbrot_seq.c $ eztrace -o /tmp -t omp ./mandelbrot 10000 [...] Stopping EZTrace... saving trace /tmp/trahay_eztrace_log_rank_1 $ eztrace_convert -o /tmp/eztrace_output.trace /tmp/trahay_eztrace_log_rank_1 [...] $ vite /tmp/eztrace_output.trace

En visualisant la trace, vous devriez voir un problème d'équilibrage de charge (le même que lors de la séance d'algo parallèle). Corrigez le programme et regénérez une trace montrant que la charge est équilibrée entre les threads.

Refaites ensuite des mesures de performance que vous intègrerez dans la courbe d'accélération (qui comportera donc 2 courbes: la courbe d'accélération "originale" et la courbe d'accélération après optimisation).

Téléchargez le programme stencil_mpi.tgz et extrayez l'archive. Utilisez EZTrace pour générer une trace d'exécution du programme MPI. Le programme stencil_mpi mélange MPI et OpenMP. Utilisez EZTrace pour générer une trace d'exécution montrant à la fois les communications MPI et les régions parallèles OpenMP Utilisez maintenant les compteurs matériels fournis par PAPI pour afficher le nombre de défauts de cache L3 au cours de l'exécution du programme.