source: Sophya/trunk/SophyaLib/SysTools/timing.c@ 3204

Last change on this file since 3204 was 2648, checked in by ansari, 21 years ago

Modifs pour basculement automatique en temps de calcul cumule lors du bouclage du compteur de la fonction clock() ds timing.c - Reza 7 Fev 2005

File size: 3.4 KB
Line 
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>
31
32#include "timing.h"
33
34static clock_t CPUT0=0, CPUT=0;
35static time_t ELT0=0, ELT=0;
36/*------- modifs Christophe 30/09/04
37On somme nous memes les temps partiels pour avoir une autre
38mesure du temps CPU total. En effet, pour des jobs longs
39clock()-CPUT0 depasse la possibilite de stockage d'un entier
4032 bits car clock() renvoit des microsecondes.
41Par 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)
43Seul un entier 64 bits pourrait donner un resultat correct
44mais il n'existe pas sur toutes les plateformes.
45-------*/
46static double tcalt_sum = 0.;
47/* Flag ajutes par Reza le 7 Fev 2005 */
48static int prttim_debug=0; /* Pour controler l'impression de la somme des temps partiels */
49static int prttim_usesum=0; /* >0 compteur de clock a fait un tour, on utilise tcalt_sum */
50
51/* Nouvelle-Fonction */
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*/
58void InitTim(void)
59{
60CPUT0 = CPUT = clock();
61ELT0 = ELT = time(NULL);
62tcalt_sum = 0.;
63prttim_usesum = 0;
64return;
65}
66
67/* Nouvelle-Fonction */
68/*!
69 \ingroup SysTools
70 Actvates (dbg>0) or deactivates (dbg=0) printing of sum of partial elapsed times.
71*/
72void PrtTimSetDebug(int dbg)
73{
74 prttim_debug = dbg;
75}
76/* Nouvelle-Fonction */
77/*!
78 \ingroup SysTools
79 Prints the values of the CPU and elapsed time, since call to \b InitTim().
80*/
81void PrtTim(const char * Comm)
82{
83double tcal,tcalt;
84clock_t cput;
85time_t elt;
86unsigned long etm,etmt;
87
88cput = clock();
89tcalt = ( (double)(cput) - (double)(CPUT0) ) / (double)(CLOCKS_PER_SEC);
90tcal = ( (double)(cput) - (double)(CPUT) ) / (double)(CLOCKS_PER_SEC);
91
92elt = time(NULL);
93etm = elt - ELT;
94etmt = elt - ELT0;
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-------*/
103if(tcal>0.) {
104 tcalt_sum += tcal*100.;
105 if (prttim_debug > 0) printf("PrtTim/Warning - tcalt_sum will now be used ...\n");
106}
107else tcalt_sum += (double)etm*100.;
108
109if (prttim_usesum) tcalt = tcalt_sum/100.;
110if (prttim_debug > 0)
111 printf("%s CPUTime: Total= %g (Sum~= %.1f) (Partial= %g) Sec. \n",
112 Comm, tcalt, tcalt_sum/100., tcal);
113else
114 printf("%s CPUTime: Total= %g (Partial= %g) Sec. \n",
115 Comm, tcalt, tcal);
116
117printf("ElapsedTime(hh:mm:ss): Total= %02d:%02d:%02d ",
118 etmt/3600, (etmt%3600)/60, etmt%60);
119printf(" (Partial= %02d:%02d:%02d)\n",
120 etm/3600, (etm%3600)/60, etm%60);
121
122ELT = elt;
123CPUT = cput;
124return;
125}
Note: See TracBrowser for help on using the repository browser.