Benchmark
 All Classes Files Functions Variables Typedefs Macros
Typedefs | Functions
benchmark.h File Reference

Go to the source code of this file.

Typedefs

typedef struct timer timer
 
typedef struct recorder recorder
 

Functions

timertimer_alloc ()
 Alloue un timer More...
 
void start_timer (timer *t)
 Stoque le temps actuel comme début de la mesure dans t More...
 
long int stop_timer (timer *t)
 Retourne le temps en nanosecondes depuis le début de mesure dans t More...
 
void timer_free (timer *t)
 Retourne le temps en nanosecondes depuis le début de mesure dans t More...
 
void update_overhead ()
 Mets à jours l'overhead More...
 
long int get_overhead ()
 
recorderrecorder_alloc (char *filename)
 Alloue un recorder More...
 
void write_record (recorder *rec, long int x, long int time)
 Écris le temps time en correspondance avec x More...
 
void write_record_n (recorder *rec, long int x, long int time, long n)
 Comme write_record mais divise time par n après avoir retiré l'overhead More...
 
void recorder_free (recorder *rec)
 Libère toutes les resources utilisées par rec More...
 

Typedef Documentation

typedef struct recorder recorder
typedef struct timer timer

Function Documentation

long int get_overhead ( )
198  {
199  if (-1 == overhead) {
200  update_overhead();
201  }
202  return overhead;
203 }
void update_overhead()
Mets à jours l'overhead
Definition: benchmark.c:191
volatile long int overhead
Temps nécessaire pour effectuer start_timer et stop_timer sans rien faire entre.
Definition: benchmark.c:187
recorder* recorder_alloc ( char *  filename)

Alloue un recorder

Les données seront écrites dans le fichier filename. En cas d'erreur, il exit avec EXIT_FAILURE.

219  {
220  recorder *rec = (recorder *) malloc(sizeof(recorder));
221  if (rec == NULL) {
222  perror("malloc");
223  exit(EXIT_FAILURE);
224  }
225  rec->output = fopen(filename, "w");
226  if (rec->output == NULL) {
227  perror("fopen");
228  free(rec);
229  exit(EXIT_FAILURE);
230  }
231  rec->overhead = get_overhead();
232  return rec;
233 }
recorder écrit les temps dans un fichier .csv
Definition: benchmark.c:208
long int get_overhead()
Definition: benchmark.c:198
long int overhead
Definition: benchmark.c:210
FILE * output
Definition: benchmark.c:209
void recorder_free ( recorder rec)

Libère toutes les resources utilisées par rec

Parameters
recle recorder auquel il faut libérer les resources
263  {
264  fclose(rec->output);
265  free(rec);
266 }
FILE * output
Definition: benchmark.c:209
void start_timer ( timer t)

Stoque le temps actuel comme début de la mesure dans t

Parameters
tLe temps dans lequel on stoque le temps de début

En cas d'erreur, affiche un message sur stderr et exit

87  {
88 #if defined(BM_USE_CLOCK_GETTIME)
89  if (clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &t->start)) {
90  perror("clock_gettime");
91  exit(EXIT_FAILURE);
92  }
93 #elif defined(BM_USE_CLOCK_GETTIME_RT)
94  if (clock_gettime(CLOCK_REALTIME, &t->start)) {
95  perror("clock_gettime");
96  exit(EXIT_FAILURE);
97  }
98 #elif defined(BM_USE_CLOCK)
99  t->start = clock();
100  if (t->start == (clock_t) -1) {
101  perror("clock");
102  exit(EXIT_FAILURE);
103  }
104 #elif defined(BM_USE_TIMES)
105  if (times(&t->start) == -1) {
106  perror("times");
107  exit(EXIT_FAILURE);
108  }
109 #else
110  gettimeofday(&t->start, NULL);
111 #endif
112 }
struct timeval start
Definition: benchmark.c:52
long int stop_timer ( timer t)

Retourne le temps en nanosecondes depuis le début de mesure dans t

Parameters
tLe temps dans lequel on a stoqué le temps de début

En cas d'erreur, affiche un message sur stderr et exit

133  {
134  // time_t is only a 32 bits int on 32 bits machines
135 #if defined(BM_USE_CLOCK_GETTIME) || defined(BM_USE_CLOCK_GETTIME_RT)
136  struct timespec end;
137  //if (clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &end)) {
138  if (clock_gettime(CLOCK_REALTIME, &end)) {
139  perror("clock_gettime");
140  exit(EXIT_FAILURE);
141  }
142  long total = GETTIME_TO_NSEC(end) - GETTIME_TO_NSEC(t->start);
143 #elif defined(BM_USE_CLOCK)
144  clock_t end = clock();
145  if (end == (clock_t) -1) {
146  perror("clock");
147  exit(EXIT_FAILURE);
148  }
149  long total = CLOCK_TO_NSEC(end) - CLOCK_TO_NSEC(t->start);
150 #elif defined(BM_USE_TIMES)
151  struct tms end;
152  if (times(&end) == -1) {
153  perror("times");
154  exit(EXIT_FAILURE);
155  }
156  long total = TIMES_TO_NSEC(end) - TIMES_TO_NSEC(t->start);;
157 #else
158  struct timeval end;
159  gettimeofday(&end, NULL);
160  long total = GTOD_TO_NSEC(end) - GTOD_TO_NSEC(t->start);
161 #endif
162  return total;
163 }
#define GTOD_TO_NSEC(time_gtod)
Definition: benchmark.c:123
#define CLOCK_TO_NSEC(time_clock)
Definition: benchmark.c:119
#define GETTIME_TO_NSEC(time_gettime)
Definition: benchmark.c:117
#define TIMES_TO_NSEC(time_times)
Definition: benchmark.c:121
struct timeval start
Definition: benchmark.c:52
timer* timer_alloc ( )

Alloue un timer

En cas de succès, retourne un timer, en cas d'erreur, affiche un message sur stderr et exit

63  {
64  timer *t = (timer *) malloc(sizeof(timer));
65  if (t == NULL) {
66  perror("malloc");
67  exit(EXIT_FAILURE);
68  }
69 #if defined(BM_USE_TIMES)
70  t->clock_ticks = sysconf(_SC_CLK_TCK);
71  if (t->clock_ticks == -1) {
72  free(t);
73  perror("sysconf");
74  exit(EXIT_FAILURE);
75  }
76 #endif
77  return t;
78 }
timer permet de mesurer le temps écoulé entre deux moments
Definition: benchmark.c:43
timer * t
Definition: memfork.c:25
void timer_free ( timer t)

Retourne le temps en nanosecondes depuis le début de mesure dans t

Parameters
tLe temps dans lequel on a stoqué le temps de début

En cas d'erreur, affiche un message sur stderr et exit

172  {
173  free(t);
174 }
void update_overhead ( )

Mets à jours l'overhead

191  {
192  timer *t = timer_alloc();
193  start_timer(t);
194  overhead = stop_timer(t);
195  timer_free(t);
196  printf("overhead updated: %ld\n", overhead);
197 }
void timer_free(timer *t)
Retourne le temps en nanosecondes depuis le début de mesure dans t
Definition: benchmark.c:172
timer permet de mesurer le temps écoulé entre deux moments
Definition: benchmark.c:43
timer * t
Definition: memfork.c:25
void start_timer(timer *t)
Stoque le temps actuel comme début de la mesure dans t
Definition: benchmark.c:87
volatile long int overhead
Temps nécessaire pour effectuer start_timer et stop_timer sans rien faire entre.
Definition: benchmark.c:187
timer * timer_alloc()
Alloue un timer
Definition: benchmark.c:63
long int stop_timer(timer *t)
Retourne le temps en nanosecondes depuis le début de mesure dans t
Definition: benchmark.c:133
void write_record ( recorder rec,
long int  x,
long int  time 
)

Écris le temps time en correspondance avec x

L'overhead est d'abord retiré de time En cas d'erreur, il exit avec EXIT_FAILURE

Parameters
recle recorder dans lequel écrire, il est supposé non-NULL
xl'abscisse
timele temps à écrire en ordonnée
245  {
246  write_record_n(rec, x, time, 1);
247 }
void write_record_n(recorder *rec, long int x, long int time, long n)
Comme write_record mais divise time par n après avoir retiré l'overhead
Definition: benchmark.c:253
void write_record_n ( recorder rec,
long int  x,
long int  time,
long  n 
)

Comme write_record mais divise time par n après avoir retiré l'overhead

253  {
254  fprintf(rec->output, "%ld, %ld\n", x, (time - rec->overhead) / n);
255 }
long int overhead
Definition: benchmark.c:210
FILE * output
Definition: benchmark.c:209