diff --git a/TPs/TP2/CODE/Makefile b/TPs/TP2/CODE/Makefile new file mode 100755 index 0000000000000000000000000000000000000000..087df5f56444cbbc05026aa03a653f3c60a18cac --- /dev/null +++ b/TPs/TP2/CODE/Makefile @@ -0,0 +1,21 @@ +CC=gcc +CFLAGS=-O3 -Wall +LDFLAGS=-lm +EXE=tp2.exe + +all : $(EXE) + +$(EXE) : tp2.o + $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS) + +%.o : %.c + $(CC) $(CFLAGS) -c -o $@ $< + +run : $(EXE) + ./$< 10240 + +proper : + rm -f *.o + +clean : + rm -f *.o $(EXE) diff --git a/TPs/TP2/CODE/tp2.c b/TPs/TP2/CODE/tp2.c new file mode 100755 index 0000000000000000000000000000000000000000..52054e51c1b1364f90d2335a6d2e58276c663ab5 --- /dev/null +++ b/TPs/TP2/CODE/tp2.c @@ -0,0 +1,64 @@ +#include <stdlib.h> +#include <stdio.h> +#include <math.h> + +#define NSTREAMS 4 + +void verif(float *out, int sz) +{ + float err = 0.; + + for(int i = 0 ; i < sz ; i++) + { + err += abs(out[i] - exp( - abs(sin(i * 1.0)) )); + } + + if (err/sz < 1.e-4) + { + fprintf(stdout, "TEST PASSED (error %3.f < 1.e-4)\n", err/sz); + } + else + { + fprintf(stderr, "TEST FAILED (error %3.f > 1.e-4)\n", err/sz); + } +} + +void func(float *out, int size) +{ + for(int i = 0; i < size; ++i) + { + out[i] = exp( - abs(out[i]) ); + } +} + +int main(int argc, char** argv) +{ + int size = 1024; + if (argc == 2) + { + size = atoi(argv[1]); + } + + size *= NSTREAMS; + + float *tab = NULL; + tab = (float*) malloc(sizeof(float) * size); + + if(tab == NULL) + { + fprintf(stderr, "Bad allocation\n"); + return -1; + } + + for(int i = 0; i < size; ++i) + { + tab[i] = sin(i * 1.); + } + + func(tab, size); + + verif(tab, size); + + free(tab); + return 0; +} diff --git a/TPs/TP2/CODE/tp2.cu b/TPs/TP2/CODE/tp2.cu new file mode 100755 index 0000000000000000000000000000000000000000..137cfc16847247bc16b5c8ec7f30d6ebb6adaa07 --- /dev/null +++ b/TPs/TP2/CODE/tp2.cu @@ -0,0 +1,67 @@ +#include <stdlib.h> +#include <stdio.h> +#include <math.h> + +#define NSTREAMS 4 + +void verif(float *out, int sz) +{ + float err = 0.; + + for(int i = 0 ; i < sz ; i++) + { + err += abs(out[i] - exp( - abs(sin(i * 1.0)) )); + } + + if (err/sz < 1.e-4) + { + fprintf(stdout, "TEST PASSED (error %3.f < 1.e-4)\n", err/sz); + } + else + { + fprintf(stderr, "TEST FAILED (error %3.f > 1.e-4)\n", err/sz); + } +} + +void func(float *out, int size) +{ + for(int i = 0; i < size; ++i) + { + out[i] = exp( - abs(out[i]) ); + } +} + +int main(int argc, char** argv) +{ + int size = 1024; + if (argc == 2) + { + size = atoi(argv[1]); + } + + size *= NSTREAMS; + + float *tab = NULL; + tab = (float*) malloc(sizeof(float) * size); + + float d_tab; + cudaMalloc( + + if(tab == NULL) + { + fprintf(stderr, "Bad allocation\n"); + return -1; + } + + for(int i = 0; i < size; ++i) + { + tab[i] = sin(i * 1.); + } + + func(tab, size); + + verif(tab, size); + + free(tab); + return 0; +} diff --git a/TPs/TP2/DOCS/StreamsAndConcurrencyWebinar.pdf b/TPs/TP2/DOCS/StreamsAndConcurrencyWebinar.pdf new file mode 100755 index 0000000000000000000000000000000000000000..fa2d3b5f6e36b0f6a8ca43db3bc754d7f8de9c0b Binary files /dev/null and b/TPs/TP2/DOCS/StreamsAndConcurrencyWebinar.pdf differ diff --git a/TPs/TP2/SUJET/tp2.pdf b/TPs/TP2/SUJET/tp2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5a3f0a389860d388f9b37b3cedb1793103510415 Binary files /dev/null and b/TPs/TP2/SUJET/tp2.pdf differ