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

Last change on this file was 3572, checked in by cmv, 17 years ago

char* -> const char* pour regler les problemes de deprecated string const... + comparaison unsigned signed + suppression EVOL_PLANCK rz+cmv 07/02/2009

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= %02ld:%02ld:%02ld ",
118 etmt/3600, (etmt%3600)/60, etmt%60);
119printf(" (Partial= %02ld:%02ld:%02ld)\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.