[219] | 1 | /* Fonction d'impression de temps de calcul et de temps passe */
|
---|
| 2 | /* R.Ansari Juin 93 */
|
---|
| 3 |
|
---|
| 4 | /*
|
---|
| 5 | ++
|
---|
| 6 | Module Temps CPU, passé (C)
|
---|
| 7 | Lib LibsUtil
|
---|
| 8 | include timing.h
|
---|
| 9 |
|
---|
| 10 | Fonctions permettant d'imprimer le temps CPU consommé et le temps
|
---|
| 11 | passé.
|
---|
| 12 | --
|
---|
| 13 | */
|
---|
| 14 |
|
---|
| 15 | /*
|
---|
| 16 | ++
|
---|
| 17 | void InitTim()
|
---|
| 18 | Initialisation des chronomètres
|
---|
| 19 | void PrtTim(char *comm)
|
---|
| 20 | Imprime le temps CPU, et le temps passé depuis
|
---|
| 21 | le dernier appel à "PrtTim()" avec le commentaire
|
---|
| 22 | "comm". Imprime aussi le cumul du temps CPU et du
|
---|
| 23 | temps passé depuis l'appel à "InitTim()".
|
---|
| 24 | --
|
---|
| 25 | */
|
---|
| 26 |
|
---|
| 27 | #include <stdlib.h>
|
---|
| 28 | #include <stdio.h>
|
---|
| 29 | #include <string.h>
|
---|
| 30 | #include <time.h>
|
---|
[1290] | 31 |
|
---|
| 32 | #include "timing.h"
|
---|
| 33 |
|
---|
[2624] | 34 | static clock_t CPUT0=0, CPUT=0;
|
---|
| 35 | static time_t ELT0=0, ELT=0;
|
---|
| 36 | /*------- modifs Christophe 30/09/04
|
---|
| 37 | On somme nous memes les temps partiels pour avoir une autre
|
---|
| 38 | mesure du temps CPU total. En effet, pour des jobs longs
|
---|
| 39 | clock()-CPUT0 depasse la possibilite de stockage d'un entier
|
---|
| 40 | 32 bits car clock() renvoit des microsecondes.
|
---|
| 41 | Par exemple pour un job de 20h = 72e+9 micro-secondes > 2^32
|
---|
| 42 | (Ca ne marche plus pour des jobs > 2146 sec ~= 2^32 microsec)
|
---|
| 43 | Seul un entier 64 bits pourrait donner un resultat correct
|
---|
| 44 | mais il n'existe pas sur toutes les plateformes.
|
---|
[2648] | 45 | -------*/
|
---|
| 46 | static double tcalt_sum = 0.;
|
---|
| 47 | /* Flag ajutes par Reza le 7 Fev 2005 */
|
---|
| 48 | static int prttim_debug=0; /* Pour controler l'impression de la somme des temps partiels */
|
---|
| 49 | static int prttim_usesum=0; /* >0 compteur de clock a fait un tour, on utilise tcalt_sum */
|
---|
[219] | 50 |
|
---|
| 51 | /* Nouvelle-Fonction */
|
---|
[2212] | 52 | /*!
|
---|
| 53 | \ingroup SysTools
|
---|
| 54 | Initializes CPU and elapsed time timer (C function).
|
---|
| 55 | The values of the CPU and elapsed time can then be printed
|
---|
| 56 | using \b PrtTim()
|
---|
| 57 | */
|
---|
[219] | 58 | void InitTim(void)
|
---|
| 59 | {
|
---|
| 60 | CPUT0 = CPUT = clock();
|
---|
| 61 | ELT0 = ELT = time(NULL);
|
---|
[2624] | 62 | tcalt_sum = 0.;
|
---|
[2648] | 63 | prttim_usesum = 0;
|
---|
[219] | 64 | return;
|
---|
| 65 | }
|
---|
[2648] | 66 |
|
---|
[219] | 67 | /* Nouvelle-Fonction */
|
---|
[2212] | 68 | /*!
|
---|
| 69 | \ingroup SysTools
|
---|
[2648] | 70 | Actvates (dbg>0) or deactivates (dbg=0) printing of sum of partial elapsed times.
|
---|
| 71 | */
|
---|
| 72 | void PrtTimSetDebug(int dbg)
|
---|
| 73 | {
|
---|
| 74 | prttim_debug = dbg;
|
---|
| 75 | }
|
---|
| 76 | /* Nouvelle-Fonction */
|
---|
| 77 | /*!
|
---|
| 78 | \ingroup SysTools
|
---|
[2212] | 79 | Prints the values of the CPU and elapsed time, since call to \b InitTim().
|
---|
| 80 | */
|
---|
| 81 | void PrtTim(const char * Comm)
|
---|
[219] | 82 | {
|
---|
[2624] | 83 | double tcal,tcalt;
|
---|
[219] | 84 | clock_t cput;
|
---|
| 85 | time_t elt;
|
---|
[2624] | 86 | unsigned long etm,etmt;
|
---|
| 87 |
|
---|
| 88 | cput = clock();
|
---|
| 89 | tcalt = ( (double)(cput) - (double)(CPUT0) ) / (double)(CLOCKS_PER_SEC);
|
---|
| 90 | tcal = ( (double)(cput) - (double)(CPUT) ) / (double)(CLOCKS_PER_SEC);
|
---|
| 91 |
|
---|
| 92 | elt = time(NULL);
|
---|
[219] | 93 | etm = elt - ELT;
|
---|
| 94 | etmt = elt - ELT0;
|
---|
[2624] | 95 | /*------- modifs Christophe 30/09/04
|
---|
| 96 | - tcalt_sum en 1/100 ieme de seconde:
|
---|
| 97 | On imprime des Secondes que l'on somme N fois
|
---|
| 98 | -> on se donne une precision a 1/100 de Seconde
|
---|
| 99 | - Au moment ou clock()>2^32 tcal devient negatif
|
---|
| 100 | ==> On ne somme donc pas tcal et on TRICHE en sommant "etm"
|
---|
| 101 | (pour etre vrai il faut que le process ait 100% du CPU !)
|
---|
| 102 | -------*/
|
---|
[2648] | 103 | if(tcal>0.) {
|
---|
| 104 | tcalt_sum += tcal*100.;
|
---|
| 105 | if (prttim_debug > 0) printf("PrtTim/Warning - tcalt_sum will now be used ...\n");
|
---|
| 106 | }
|
---|
| 107 | else tcalt_sum += (double)etm*100.;
|
---|
[2624] | 108 |
|
---|
[2648] | 109 | if (prttim_usesum) tcalt = tcalt_sum/100.;
|
---|
| 110 | if (prttim_debug > 0)
|
---|
| 111 | printf("%s CPUTime: Total= %g (Sum~= %.1f) (Partial= %g) Sec. \n",
|
---|
| 112 | Comm, tcalt, tcalt_sum/100., tcal);
|
---|
| 113 | else
|
---|
| 114 | printf("%s CPUTime: Total= %g (Partial= %g) Sec. \n",
|
---|
| 115 | Comm, tcalt, tcal);
|
---|
| 116 |
|
---|
[3572] | 117 | printf("ElapsedTime(hh:mm:ss): Total= %02ld:%02ld:%02ld ",
|
---|
[219] | 118 | etmt/3600, (etmt%3600)/60, etmt%60);
|
---|
[3572] | 119 | printf(" (Partial= %02ld:%02ld:%02ld)\n",
|
---|
[219] | 120 | etm/3600, (etm%3600)/60, etm%60);
|
---|
[2624] | 121 |
|
---|
[219] | 122 | ELT = elt;
|
---|
| 123 | CPUT = cput;
|
---|
| 124 | return;
|
---|
| 125 | }
|
---|