fonctionne
This commit is contained in:
parent
511bcbda0b
commit
b67c4a8423
15
exo2.c
Normal file
15
exo2.c
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
/* segment bss et data */
|
||||||
|
#define N 100000
|
||||||
|
//int t[N]; /* version 1 */
|
||||||
|
int t[N]={1}; /* version 2 */
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 1) Le tableau se trouve dans les données car la variables est globale. La taille n'a pas changé malgrès le changement de variables globale.
|
||||||
|
// 2) La deuxième version est plus lourde.
|
||||||
|
|
31
exo3.c
Normal file
31
exo3.c
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
/* accès mémoire */
|
||||||
|
#include<stdio.h>
|
||||||
|
#include<time.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#define N 8192
|
||||||
|
|
||||||
|
int t[N][N];
|
||||||
|
|
||||||
|
static inline double tstamp(void)
|
||||||
|
{
|
||||||
|
struct timespec tv;
|
||||||
|
clock_gettime(CLOCK_REALTIME, &tv);
|
||||||
|
return tv.tv_sec + tv.tv_nsec * 1.0e-9;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int i,j;
|
||||||
|
double t1,t2;
|
||||||
|
t1=tstamp();
|
||||||
|
/* version 1 */ // for(i=0;i<N;i++) for(j=0;j<N;j++) t[i][j] = 1;
|
||||||
|
/* version 2 */ for(i=0;i<N;i++) for(j=0;j<N;j++) t[j][i] = 1;
|
||||||
|
t2=tstamp();
|
||||||
|
printf("time = %lf\n",t2-t1);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Le temps est différents entre les deux versions du programme, Pourquoi ?
|
||||||
|
// Overload de cache, la mémoire parcours le tableau en ligne.
|
||||||
|
// t[n][n]
|
86
exo4.c
Normal file
86
exo4.c
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
#include<stdio.h>
|
||||||
|
#include<time.h>
|
||||||
|
#include<stdlib.h>
|
||||||
|
#include<string.h>
|
||||||
|
#include<assert.h>
|
||||||
|
static inline double tstamp(void)
|
||||||
|
{
|
||||||
|
struct timespec tv;
|
||||||
|
clock_gettime(CLOCK_REALTIME, &tv);
|
||||||
|
return tv.tv_sec + tv.tv_nsec * 1.0e-9;
|
||||||
|
}
|
||||||
|
void shuffle(int *array, size_t n)
|
||||||
|
{
|
||||||
|
if (n > 1)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
// for (i = 0; i < n - 1; i++)
|
||||||
|
for (i = 0; i < n ; i++)
|
||||||
|
{
|
||||||
|
// size_t j = i + rand() / (RAND_MAX / (n - i) + 1);
|
||||||
|
size_t j = rand()%n;
|
||||||
|
int t = array[j];
|
||||||
|
array[j] = array[i];
|
||||||
|
array[i] = t;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void init_access_c(int access[],size_t size)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for(i=0;i<size;i++) access[i] = i;
|
||||||
|
}
|
||||||
|
void init_access_d(int access[],size_t size)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for(i=0;i<size;i++) access[i] = size-i-1;
|
||||||
|
}
|
||||||
|
void init_access_a(int access[],size_t size)
|
||||||
|
{
|
||||||
|
init_access_c(access,size);
|
||||||
|
shuffle(access,size);
|
||||||
|
}
|
||||||
|
void init_array(int t[],int N)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for(i=0;i<N;i++) t[i] = i ;
|
||||||
|
}
|
||||||
|
long int sum_array(int t[],int access[],size_t size)
|
||||||
|
{
|
||||||
|
long int S=0;
|
||||||
|
int i;
|
||||||
|
for(i=0;i<size;i++) S += t[access[i]];
|
||||||
|
return S;
|
||||||
|
}
|
||||||
|
int main(int argc,char * argv[])
|
||||||
|
{
|
||||||
|
double t1,t2;
|
||||||
|
int * array; // tableau à sommer (contient les tous les entiers [0,SIZE-1]
|
||||||
|
int * access;
|
||||||
|
int i,size;
|
||||||
|
long int S=0;
|
||||||
|
if (argc !=3) {
|
||||||
|
printf("%s -c|-d|-a SIZE\n",argv[0]);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
size=strtol(argv[2],NULL,0);
|
||||||
|
array=(int *)malloc(sizeof(int)*size);
|
||||||
|
assert(array != NULL);
|
||||||
|
access=(int *)malloc(sizeof(int)*size);
|
||||||
|
assert(access != NULL);
|
||||||
|
init_array(array,size);
|
||||||
|
if (strcmp(argv[1],"-c") == 0)
|
||||||
|
init_access_c(access,size);
|
||||||
|
if (strcmp(argv[1],"-d") == 0)
|
||||||
|
init_access_d(access,size);
|
||||||
|
if (strcmp(argv[1],"-a") == 0)
|
||||||
|
init_access_a(access,size);
|
||||||
|
/* On somme les elements en accedant au tableau
|
||||||
|
* sequentiellement (croissant/décroissant), ou
|
||||||
|
* de manière aléatoire
|
||||||
|
* */
|
||||||
|
t1=tstamp();
|
||||||
|
S= sum_array(array,access,size);
|
||||||
|
t2=tstamp();
|
||||||
|
printf("S=%ld %lf\n",S,(t2-t1));
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user