Benchmark
 All Classes Files Functions Variables Typedefs Macros
Macros | Functions
shell.c File Reference

Ce programme compare le temps d'exécution d'un script et d'un programme C qui effectue un nombre "N" d'instruction. More...

#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <string.h>
#include "benchmark.h"

Macros

#define MAX_SIZE   100
 

Functions

int main (int argc, char *argv[])
 

Detailed Description

Ce programme compare le temps d'exécution d'un script et d'un programme C qui effectue un nombre "N" d'instruction.

Ce programme utilise deux programmes annexes : shell-program : C'est un programme C qui effectue le nombre d'instruction donné en paramètre. shell-bash.sh : C'est un script qui effectue le nombre d'instruction donné en paramètre.

Pour exécuter chaque programme, l'appel systeme "system" est utilisé. Celui-ci exécute la commande passé en paramètre. Typiquement, il recevra "./shell-program 500" : Pour exécuter 500 instructions avec le programme C "./shell-bash.sh 250" : Pour exécuter 250 instructions avec le script

Le paramètre passé à "system" contient donc deux parties. D'une part ce qu'il faut exécuter, d'autre part le nombre d'instruction.

Les résultats sont écrit dans : shell-bash.csv : Pour les temps d'exécution du script shell-prog.csv : Pour les temps d'exécution du programme

Macro Definition Documentation

#define MAX_SIZE   100

Function Documentation

int main ( int  argc,
char *  argv[] 
)
34  {
35  // Déclare un timer, ainsi que deux recorder qui vont contenir les résultats de l'exécution du programme
36  timer *t = timer_alloc();
37  recorder *bash_rec = recorder_alloc("shell-bash.csv");
38  recorder *prog_rec = recorder_alloc("shell-prog.csv");
39 
40  // Nom du programme C et du script à comparer
41  char * progr = "./shell-program ";
42  char * bash = "./shell-bash.sh ";
43 
44  // Cette variable contient la transformation du nombre d'instruction (i).
45  // Puisque cette variable est un int, 7 caractères suffisent à sa représentation.
46  char nbr[7];
47  int i;
48 
49  // Allocation des emplacements contenant la commande à exécuter
50  char*argProgr = (char *) malloc(24*sizeof(char));
51  char*argBash = (char *) malloc(24*sizeof(char));
52 
53  if(argProgr == NULL || argBash == NULL)
54  exit(EXIT_FAILURE);
55 
56 
57  for(i=1; i<MAX_SIZE; i+=1) {
58  // Convertit "i" en char* et le place dans nbr
59  snprintf(nbr, 7, "%d", i);
60 
61  // Concatene les deux parties de la commande
62  strncpy(argProgr, progr, 24);
63  strncpy(argBash, bash, 24);
64  strncat(argProgr, nbr, 7);
65  strncat(argBash, nbr, 7);
66 
67  // Commence le timer et lance la commande, puis écrit le résultat dans le record approprié
68  start_timer(t);
69  system(argProgr);
70  write_record(prog_rec, i, stop_timer(t));
71 
72  start_timer(t);
73  system(argBash);
74  write_record(bash_rec, i, stop_timer(t));
75  }
76 
77  // Libère la mémoire
78  recorder_free(bash_rec);
79  recorder_free(prog_rec);
80  timer_free(t);
81 
82  return EXIT_SUCCESS;
83 }
void timer_free(timer *t)
Retourne le temps en nanosecondes depuis le début de mesure dans t
Definition: benchmark.c:172
recorder écrit les temps dans un fichier .csv
Definition: benchmark.c:208
void write_record(recorder *rec, long int x, long int time)
Écris le temps time en correspondance avec x
Definition: benchmark.c:245
timer permet de mesurer le temps écoulé entre deux moments
Definition: benchmark.c:43
timer * t
Definition: memfork.c:25
int i
Definition: mutsem.c:43
void start_timer(timer *t)
Stoque le temps actuel comme début de la mesure dans t
Definition: benchmark.c:87
recorder * recorder_alloc(char *filename)
Alloue un recorder
Definition: benchmark.c:219
#define MAX_SIZE
Definition: shell.c:29
void recorder_free(recorder *rec)
Libère toutes les resources utilisées par rec
Definition: benchmark.c:263
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