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

Compare les performances lorsque l'on parcourt un tableau par ligne ou par colonne. More...

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

Macros

#define MAX_SIZE   4000
 
#define MULTIPLICATEUR   100
 

Functions

long int ligne (int i, timer *t, int **tab)
 
long int colonne (int i, timer *t, int **tab)
 
int main (int argc, char *argv[])
 

Variables

timert
 
recorderlig_rec
 
recordercol_rec
 

Detailed Description

Compare les performances lorsque l'on parcourt un tableau par ligne ou par colonne.

Ce programme additionne les valeurs d'un tableau en le parcourant : Soit par colonne Soit par ligne

Lorsque l'on spécifie un argument pour effectuer les perfs, sur les lignes ou les colonnes, on n'écrit pas dans les records et on ne n'exécute soit les lignes soit les colonnes selon l'arguments reçu.

Note : Le plus rapide profite de la localité spatiale

Macro Definition Documentation

#define MAX_SIZE   4000
#define MULTIPLICATEUR   100

Function Documentation

long int colonne ( int  i,
timer t,
int **  tab 
)

On parcourt le double tableau par colonne, en retournant le temps nécessaire au parcours du tableau

48  {
49  int m,n,res=0;
50  start_timer(t);
51  for(m=0; m<i; m++)
52  for(n=0; n<i; n++)
53  res+= tab[m][n];
54 
55  return stop_timer(t);
56 }
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
long int stop_timer(timer *t)
Retourne le temps en nanosecondes depuis le début de mesure dans t
Definition: benchmark.c:133
long int ligne ( int  i,
timer t,
int **  tab 
)

On parcourt le double tableau par ligne, en retournant le temps nécessaire au parcours du tableau

35  {
36  int m,n,res=0;
37  start_timer(t);
38  for(m=0; m<i; m++)
39  for(n=0; n<i; n++)
40  res+= tab[n][m];
41 
42  return stop_timer(t);
43 }
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
long int stop_timer(timer *t)
Retourne le temps en nanosecondes depuis le début de mesure dans t
Definition: benchmark.c:133
int main ( int  argc,
char *  argv[] 
)
59  {
60  // Verification des arguments
61  int perfligne = argc>1 && strncmp(argv[1], "--ligne", 8);
62  int perfcolonne = argc>1 &&strncmp(argv[1], "--colonne", 10);
63 
64  timer * t = timer_alloc();
65  if(!perfligne && !perfcolonne) {
66  // Déclare un timer, ainsi que deux recorder qui vont contenir les résultats de l'exécution du programme
67  lig_rec = recorder_alloc("tab-lig.csv");
68  col_rec = recorder_alloc("tab-col.csv");
69  }
70 
71  int i,j;
72  long int rescol, reslig;
73  for(i=MULTIPLICATEUR; i<MAX_SIZE ; i+=MULTIPLICATEUR) {
74 
75  if(perfligne || perfcolonne)
76  i = MAX_SIZE;
77 
78  // On crée le tableau
79  int ** tab = malloc(i*sizeof(int*));
80  if(tab == NULL) {
81  perror("malloc fail");
82  exit(EXIT_FAILURE);
83  }
84  for(j=0; j<i; j++)
85  tab[j] = malloc(i*sizeof(int));
86 
87  if(!perfcolonne)
88  reslig = ligne(i, t, tab);
89  if(!perfligne)
90  rescol = colonne(i, t, tab);
91 
92  if(!perfligne && !perfcolonne) {
95  }
96 
97  //On libère la mémoire
98  for(j=0; j<i; j++) {
99  free(tab[j]);
100  tab[j]=NULL;
101  }
102  free(tab);
103  }
104 
105  if(!perfligne && !perfcolonne) {
108  timer_free(t);
109  }
110 
111  return EXIT_SUCCESS;
112 }
recorder * col_rec
Definition: tab.c:29
long int ligne(int i, timer *t, int **tab)
Definition: tab.c:35
long int colonne(int i, timer *t, int **tab)
Definition: tab.c:48
void timer_free(timer *t)
Retourne le temps en nanosecondes depuis le début de mesure dans t
Definition: benchmark.c:172
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
timer permet de mesurer le temps écoulé entre deux moments
Definition: benchmark.c:43
int i
Definition: mutsem.c:43
recorder * recorder_alloc(char *filename)
Alloue un recorder
Definition: benchmark.c:219
timer * t
Definition: tab.c:27
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
recorder * lig_rec
Definition: tab.c:28
#define MULTIPLICATEUR
Definition: tab.c:25
#define MAX_SIZE
Definition: tab.c:24

Variable Documentation

recorder* col_rec
recorder* lig_rec
timer* t