L'IDRIS a développé la bibliothèque libhpcidris permettant de mesurer le temps d'exécution d'une application en l'instrumentant.
Un module est disponible. Il permet de positionner les chemins pour la bibliothèque, les fichiers d'include et les modules Fortran.
module load libhpcidris
Voici un exemple de ce que vous obtenez sur la sortie standard pour l'utilisation des sous-programmes HPCIDRIS_F03_MPI_timer_start_synch et HPCIDRIS_F03_MPI_timer_stop_synch en Fortran ou HPCIDRIS_MPI_timer_start_synch et HPCIDRIS_MPI_timer_stop_synch en C avec un niveau de détails de 2 :
----------------------------------------------------------------------
ELAPSED TIME (libhpcidris version 3.1)
(C)2009-2010 Philippe WAUTELET, IDRIS-CNRS
----------------------------------------------------------------------
Max (position) | Min (position) | Average | Sum
----------------------------------------------------------------------
0.094133s ( 0) | 0.094133s ( 5) | 0.094133s | 0.753062s
----------------------------------------------------------------------
--------------------------------------------------------------------------------
SYNCHRONIZATION TIME
--------------------------------------------------------------------------------
| Max (position) | Min (position) | Average | Sum
--------------------------------------------------------------------------------
At start | 0.000079s ( 2) | 0.000001s ( 0) | 0.000069s | 0.000550s
At stop | 0.082367s ( 0) | 0.000005s ( 7) | 0.041182s | 0.329453s
Total | 0.082368s ( 0) | 0.000083s ( 7) | 0.041250s | 0.330004s
--------------------------------------------------------------------------------
Toutes les fonctionnalités de mesure de temps sont disponibles par le chargement du module Fortran hpcidris (ou hpcidris_timer). Dans votre programme Fortran, il suffit d'ajouter la ligne suivante partout où vous utilisez cette bibliothèque :
use hpcidris
Les sous-programmes disponibles sont les suivants :
HPCIDRIS_F03_MPI_timer_start(comm) : démarre la mesure de temps sur tous les processus du communicateur MPI comm. Chaque processus lance le début de sa mesure de temps indépendemment des autres (et donc sans synchronisation).
HPCIDRIS_F03_MPI_timer_start_synch(comm) : démarre la mesure de temps avec synchronisation sur tous les processus du communicateur MPI comm. Chaque processus lance le début de sa mesure une fois tous les processus synchronisés. La mesure de temps ne commence donc qu'après synchronisation. Le temps passé entre l'appel à ce sous-programme et le début de la mesure effective peut être affiché lors des appels à HPCIDRIS_F03_MPI_timer_stop et HPCIDRIS_F03_MPI_timer_stop_synch avec un niveau de détails d'au moins 2.
HPCIDRIS_F03_MPI_timer_stop(comm,level) : arrête et affiche la mesure de temps sur l'ensemble des processus du communicateur MPI comm. Chaque processus stoppe sa mesure de temps indépendemment des autres (et donc sans synchronisation). HPCIDRIS_F03_MPI_timer_stop est une fonction Fortran (et non pas une subroutine) qui retourne la mesure de temps en secondes du processus appellant dans un double précision. Le niveau de détails de l'affichage est choisi avec l'argument level :
HPCIDRIS_F03_MPI_timer_stop_synch(comm,level) : arrête après synchronisation et affiche la mesure de temps sur l'ensemble des processus du communicateur MPI comm. Chaque processus stoppe sa mesure de temps après synchronisation. Le temps passé entre l'appel à ce sous-programme et la fin de la mesure effective peut être affiché avec un niveau de détails d'au moins 2. HPCIDRIS_F03_MPI_timer_stop_synch est une fonction Fortran (et non pas une subroutine) qui retourne la mesure de temps en secondes du processus appellant dans un double précision. Le niveau de détails de l'affichage est choisi avec l'argument level :
HPCIDRIS_F03_timer_start : démarre la mesure de temps sur le(s) processus appelant(s). Ce sous-programme n'est pas MPI et est donc local au(x) processus l'utilisant.
HPCIDRIS_F03_timer_stop : arrête la mesure de temps. HPCIDRIS_F03_timer_stop est une fonction Fortran (et non pas une subroutine) qui retourne la mesure de temps en secondes du processus appellant dans un double précision.
Vous trouverez un exemple d'utilisation dans le répertoire /bglocal/pub/libhpcidris/3.1/examples.
Toutes les fonctionnalités de mesure de temps sont disponibles en incluant le fichier hpcidris.h (ou hpcidris_timer.h). Dans votre programme C, il suffit d'ajouter la ligne suivante partout où vous utilisez cette bibliothèque :
#include "hpcidris.h"
Les fonctions disponibles sont les suivantes :
void HPCIDRIS_MPI_timer_start(MPI_Comm comm) : démarre la mesure de temps sur tous les processus du communicateur MPI comm. Chaque processus lance le début de sa mesure de temps indépendemment des autres (et donc sans synchronisation).
void HPCIDRIS_MPI_timer_start_synch(MPI_Comm comm) : démarre la mesure de temps avec synchronisation sur tous les processus du communicateur MPI comm. Chaque processus lance le début de sa mesure une fois tous les processus synchronisés. La mesure de temps ne commence donc qu'après synchronisation. Le temps passé entre l'appel à ce sous-programme et le début de la mesure effective peut être affiché lors des appels à HPCIDRIS_MPI_timer_stop et HPCIDRIS_MPI_timer_stop_synch avec un niveau de détails d'au moins 2.
double HPCIDRIS_MPI_timer_stop(MPI_Comm comm,int level) : arrête et affiche la mesure de temps sur l'ensemble des processus du communicateur MPI comm. Chaque processus stoppe sa mesure de temps indépendemment des autres (et donc sans synchronisation). La valeur de retour correspond à la mesure de temps en secondes du processus appellant. Le niveau de détails de l'affichage est choisi avec l'argument level :
HPCIDRIS_MPI_timer_stop_synch(MPI_Comm comm,int level) : arrête après synchronisation et affiche la mesure de temps sur l'ensemble des processus du communicateur MPI comm. Chaque processus stoppe sa mesure de temps après synchronisation. Le temps passé entre l'appel à ce sous-programme et la fin de la mesure effective peut être affiché avec un niveau de détails d'au moins 2. MPI_Comm comm,int Le niveau de détails de l'affichage est choisi avec l'argument level :
void HPCIDRIS_timer_start() : démarre la mesure de temps sur le(s) processus appelant(s). Ce sous-programme n'est pas MPI et est donc local au(x) processus l'utilisant.
double HPCIDRIS_timer_stop() : arrête la mesure de temps. La valeur de retour correspond à la mesure de temps en secondes du processus appellant.
HPCIDRIS_F03_MPI_ sont des appels collectifs au sens MPI et doivent être réalisés par tous les processus du communicateur spécifié.HPCIDRIS_F03_MPI_timer_start_synch avec HPCIDRIS_F03_MPI_timer_stop).