Jean Zay : outils de mesure de temps

commande Unix de mesure de temps

La commande Unix time permet d’afficher, après la sortie d'un exécutable, son temps d’exécution.
Voici un exemple :

$ time ./mon_executable
    real    0m1.43s
    user    0m0.08s
    sys     0m0.16s

Le temps d'horloge ou temps Elapsed correspond ici a la ligne real;
le temps système correspond à la ligne sys; il donne une indication de la charge liée aux entrées/sorties (lecture/écritures sur disque dur).

Temps d'horloge en Fortran : ''SYSTEM_CLOCK''

Sous-programme intrinsèque Fortran 90, qui donne un temps Elapsed en retournant le nombre de périodes d'horloge consommées.
Voici un exemple d'utilisation :

exemple.f90
  . . .
  INTEGER(kind=8) :: &
     nb_periodes_initial, & ! valeur initiale du compteur de périodes d'horloge
     nb_periodes_final,   & ! valeur finale   du compteur de périodes d'horloge
     nb_periodes_max,     & ! valeur maximale du compteur d'horloge
     nb_periodes_sec,     & ! nombre de périodes d'horloge par seconde
     nb_periodes            ! nombre de périodes d'horloge du code
  REAL(kind=8) :: temps_elapsed  ! temps réel en secondes
 
  ! Initialisations
 
  CALL SYSTEM_CLOCK(COUNT_RATE=nb_periodes_sec, COUNT_MAX=nb_periodes_max)
  . . .
  CALL SYSTEM_CLOCK(COUNT=nb_periodes_initial)
  . . .
  !      <<<<<<<<<<<<< partie du code à évaluer >>>>>>>>>>>>>
  . . .
  CALL SYSTEM_CLOCK(COUNT=nb_periodes_final)
  nb_periodes = nb_periodes_final - nb_periodes_initial
  IF (nb_periodes_final < nb_periodes_initial) &
          nb_periodes = nb_periodes + nb_periodes_max
  temps_elapsed   = REAL(nb_periodes) / nb_periodes_sec
  . . .

Temps CPU en Fortran : ''CPU_TIME''

Sous-programme intrinsèque Fortran 90, qui mesure le temps CPU d'une portion de code encadrée par deux appels à CPU_TIME.
Mise en œuvre :

exemple.f90
  implicit none
  integer               :: j, n
  real,dimension(10000) :: x
  real                  :: t1,t2
  . . . .
  call CPU_TIME( t1 )
  !do j=1,10000
  !  x(j)=log(23.)*j
  !end do
  x(:) = log(23.)*[ (j,j=1,10000) ]
  call CPU_TIME( t2 )
  . . . .
  read *, n ; print *, x(n)
  print *,t2 - t1
  . . . .

Notes

  • les variables t1 et t2 sont de type réel; le résultat de CPU_TIME est mesuré en secondes.
  • Si l'argument retourné est négatif, c'est que la fonctionnalité n'est pas disponible.