Benchmark
 All Classes Files Functions Variables Typedefs Macros
Macros | Functions
shm.c File Reference
#include <stdio.h>
#include <stdlib.h>
#include <sys/shm.h>
#include <fcntl.h>
#include <pthread.h>
#include <err.h>
#include <unistd.h>
#include "benchmark.h"

Macros

#define ARRAY_LEN   50000
 
#define KEY   1252
 
#define DO   20
 

Functions

void * work (void *param)
 
int main (int argc, char *argv[])
 

Macro Definition Documentation

#define ARRAY_LEN   50000
#define DO   20
#define KEY   1252

Function Documentation

int main ( int  argc,
char *  argv[] 
)
28  {
29  timer *t = timer_alloc();
30  recorder *heap_rec = recorder_alloc("heap.csv");
31  recorder *shm_rec = recorder_alloc("shm.csv");
32  pthread_t thread;
33 
34  int i;
35  for (i=100; i<=ARRAY_LEN; i+=100) {
36  start_timer(t);
37  int* array = (int*)malloc(sizeof(int)*i);
38 
39  int k;
40  for (k=0; k<DO; k++) {
41 
42  int j;
43  for (j=0; j<i; j++) {
44  array[j] = j+1;
45  }
46  array[0] = i;
47  pthread_create(&thread,NULL,work,(void*)array);
48  pthread_join(thread,NULL);
49  }
50  write_record_n(heap_rec,i,stop_timer(t),ARRAY_LEN);
51  free(array);
52  }
53 
54  for (i=100; i<=ARRAY_LEN; i+=100) {
55 
56  int shm_id = shmget(KEY, sizeof(int)*i, IPC_CREAT | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP );
57  if (shm_id < 0) err(-1, "erreur lors de shmget");
58  int* array = shmat(shm_id,NULL,0);
59  //if (array = -1) err(-1, "erreur lors de shmat");
60 
61  start_timer(t);
62 
63  int k;
64  for (k=0; k<DO; k++) {
65 
66  int j;
67  for (j=0; j<i; j++) {
68  array[j] = j+1;
69  }
70  array[0] = i;
71 
72  pid_t pid = fork();
73 
74  if (pid < 0) {
75  err(pid,"erreur de fork");
76  } else if (pid == 0) {
77  /*
78  int shm_id = shmget(KEY, sizeof(int)*i, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP );
79  if (shm_id < 0) err(-1, "erreur lors de shmget dans le fils");
80  int* array = shmat(shm_id,NULL,0);
81  //if (array = (void*)-1) err(-1, "erreur lors de shmat dans le fils");
82  */
83  int size = array[0];
84  int i;
85  int tot;
86  for (i = 1; i<size; i++) {
87  tot += array[i];
88  }
89  array[size-1] = tot;
90  //printf("%d\n",tot);
91  int dt = shmdt(array);
92  if (dt < 0) err(dt,"erreur lors de shmdt dans le fils");
93  exit(0);
94  } else {
95  waitpid(pid,NULL,0);
96  }
97  }
98  write_record_n(shm_rec,i,stop_timer(t),ARRAY_LEN);
99  int ctl = shmctl(shm_id, IPC_RMID, NULL);
100  if (ctl < 0) err(ctl,"erreur lors de shmctl");
101  int dt = shmdt(array);
102  if (dt < 0) err(dt,"erreur lors de shmdt");
103  shmctl(shm_id, IPC_RMID, NULL);
104 
105  }
106 
107  recorder_free(heap_rec);
108  recorder_free(shm_rec);
109  timer_free(t);
110 
111  return EXIT_SUCCESS;
112 }
void timer_free(timer *t)
Retourne le temps en nanosecondes depuis le début de mesure dans t
Definition: benchmark.c:172
void * thread(void *param)
Definition: thread.c:10
recorder écrit les temps dans un fichier .csv
Definition: benchmark.c:208
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
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
void * work(void *param)
Definition: shm.c:15
#define ARRAY_LEN
Definition: shm.c:11
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
#define KEY
Definition: shm.c:12
#define DO
Definition: shm.c:13
long int stop_timer(timer *t)
Retourne le temps en nanosecondes depuis le début de mesure dans t
Definition: benchmark.c:133
void* work ( void *  param)
15  {
16  int* array = (int*) param;
17  int size = array[0];
18  int i;
19  int tot;
20  for (i = 1; i<size; i++) {
21  tot += array[i];
22  }
23  array[size-1] = tot;
24  //printf("%d\n",tot);
25  return NULL;
26 }
int i
Definition: mutsem.c:43