Babel : MPI Trace

Description

MPI Trace est une bibliothèque de profilage des appels MPI fournie par IBM. Elle collecte :

  • la liste des sous-programmes MPI appelés,
  • la taille des messages,
  • le temps passé dans les appels MPI pour chaque sous-programme et en-dehors,
  • les quantités de données transferées entre tous les processus.

Utilisation

  • Charger le module mpitrace. Commande : module load mpitrace
  • Compiler avec -g (option activée par défaut à l'IDRIS)
  • A la fin de l'écution, vous obtenez plusieurs fichiers :
    • Une série de 4 fichiers de la forme mpi_profile.xxx avec xxx le rang du processus dans MPI_COMM_WORLD. Un pour le processus passant le plus de temps dans les communications, un pour le moins, un pour la valeur médiane et le processus 0 avec des statistiques globales.
    • Une autre série de 4 fichiers de la forme mpi_profile_xxx.viz avec xxx le rang du processus dans MPI_COMM_WORLD. Ceux-ci contiennent une trace visualisable avec l'outil peekperf.
    • Un fichier nommé single_trace contenant une trace des appels MPI durant toute l'exécution de l'application et qui peut être visualisée avec l'application peekview.

Attention : les hauts niveaux d'optimisation peuvent affecter la qualité des résultats. Cette bibliothèque n'étant pas thread safe, son utilisation n'est pas garantie dans les applications multithreadées ou OpenMP.

Les variables d'environnement suivantes peuvent s'avérer utiles :

  • TRACE_ALL_EVENTS=yes/no (yes par défaut) : stocke dans le fichier single_trace une trace de tous les appels MPI pour les 256 premiers processus (peut être changé par TRACE_ALL_TASKS=yes) et jusqu'à une taille max (avec TRACE_MAX_RANK).
  • TRACE_SEND_PATTERN=yes/no (no par défaut) : stocke dans send_bytes.matrix le nombre d'octets envoyés par chaque processus à chaque processus (valeurs en double précision).

Exemple

babel> cat mpi_profile.0
elapsed time from clock-cycles using freq = 850.0 MHz
-----------------------------------------------------------------
MPI Routine                  #calls     avg. bytes      time(sec)
-----------------------------------------------------------------
MPI_Comm_size                     1            0.0          0.000
MPI_Comm_rank                     2            0.0          0.000
MPI_Sendrecv                    600        65536.0          1.087
MPI_Bcast                         1            4.0          0.000
MPI_Reduce                       30            8.0          0.019
MPI_Allreduce                   100            8.0          0.174
-----------------------------------------------------------------
total communication time = 1.280 seconds.
total elapsed time       = 4.318 seconds.

-----------------------------------------------------------------
Message size distributions:

MPI_Sendrecv              #calls    avg. bytes      time(sec)
                             400       32768.0          0.141
                             200      131072.0          0.946

MPI_Bcast                 #calls    avg. bytes      time(sec)
                               1           4.0          0.000

MPI_Reduce                #calls    avg. bytes      time(sec)
                              30           8.0          0.019

MPI_Allreduce             #calls    avg. bytes      time(sec)
                             100           8.0          0.174

-----------------------------------------------------------------
Communication summary for all tasks:

  minimum communication time = 1.280 sec for task 0
  median  communication time = 1.283 sec for task 215
  maximum communication time = 1.284 sec for task 9

taskid  xcoord  ycoord  zcoord  procid   total_comm(sec)   avg_hops
     0       0       0       0       0         1.280   21020696.00
     1       0       0       0       1         1.284   21020696.00
...
...
...
   254       3       3       3       2         1.284   21020696.00
   255       3       3       3       3         1.283   21020696.00

MPI tasks sorted by communication time:
taskid  xcoord  ycoord  zcoord  procid    total_comm(sec)  avg_hops
     0       0       0       0       0         1.280   21020696.00
    16       0       1       0       0         1.281   21020696.00
...
...
...
   253       3       3       3       1         1.284   21020696.00
     9       2       0       0       1         1.284   21020696.00

Documentation