From 83d5aaf9685578a02642e6e50060341a6611a169 Mon Sep 17 00:00:00 2001
From: Kirill <kirill.kolesnikov@etu.unistra.fr>
Date: Tue, 26 Nov 2024 12:33:16 +0100
Subject: [PATCH] Encore des tps

---
 .../TPnote2024/Parallele_S6.code-workspace    |  11 +
 Mec_discord/annales/TPnote2024/covariance     | Bin 0 -> 17856 bytes
 Mec_discord/annales/TPnote2024/covariance.c   | 126 ++++++
 Mec_discord/annales/TPnote2024/gather         | Bin 0 -> 17688 bytes
 Mec_discord/annales/TPnote2024/gather.c       | 121 +++++
 Mec_discord/annales/TPnote2024/tri            | Bin 0 -> 18024 bytes
 Mec_discord/annales/TPnote2024/tri_fusion.c   | 147 ++++++
 Mec_discord/annales/test.c                    |   0
 Mec_discord/annales/tp1_openmp_codes/ex1      | Bin 0 -> 17032 bytes
 Mec_discord/annales/tp1_openmp_codes/ex2      | Bin 0 -> 17240 bytes
 Mec_discord/annales/tp1_openmp_codes/ex3      | Bin 0 -> 17656 bytes
 Mec_discord/annales/tp1_openmp_codes/ex4      | Bin 0 -> 17648 bytes
 Mec_discord/annales/tp1_openmp_codes/ex5      | Bin 0 -> 17656 bytes
 Mec_discord/annales/tp1_openmp_codes/ex6      | Bin 0 -> 17744 bytes
 Mec_discord/annales/tp1_openmp_codes/ex7      | Bin 0 -> 17696 bytes
 .../annales/tp1_openmp_codes/tp0_1_hello.c    |  11 +
 .../tp0_1_hello.c:Zone.Identifier             |   3 +
 .../annales/tp1_openmp_codes/tp0_2_for.c      |  29 ++
 .../tp0_2_for.c:Zone.Identifier               |   3 +
 .../annales/tp1_openmp_codes/tp1_3_addvec.c   |  71 +++
 .../tp1_3_addvec.c:Zone.Identifier            |   3 +
 .../annales/tp1_openmp_codes/tp1_4_sum.c      |  68 +++
 .../tp1_4_sum.c:Zone.Identifier               |   3 +
 .../annales/tp1_openmp_codes/tp1_5_matvec.c   |  81 ++++
 .../tp1_5_matvec.c:Zone.Identifier            |   3 +
 .../tp1_openmp_codes/tp1_6_stencil1d.c        |  81 ++++
 .../tp1_6_stencil1d.c:Zone.Identifier         |   3 +
 .../tp1_openmp_codes/tp1_7_reductionreinit.c  |  92 ++++
 .../tp1_7_reductionreinit.c:Zone.Identifier   |   3 +
 .../tp1_openmp_codes/tp1_8_polynomial.c       |  87 ++++
 .../tp1_8_polynomial.c:Zone.Identifier        |   3 +
 .../._tp2_1_matmat.c                          | Bin 0 -> 176 bytes
 .../._tp2_3_enumeration_sort.c                | Bin 0 -> 176 bytes
 .../annales/tp2_parallelisation_codes/bubble  | Bin 0 -> 17760 bytes
 .../annales/tp2_parallelisation_codes/enum    | Bin 0 -> 17824 bytes
 .../tp2_parallelisation_codes/tp2_1_matmat.c  |  82 ++++
 .../tp2_parallelisation_codes/tp2_2_pi.c      |  76 ++++
 .../tp2_3_enumeration_sort.c                  | 122 +++++
 .../tp2_4_bubble_sort.c                       | 119 +++++
 .../._tp3_1_nb_threads.c                      | Bin 0 -> 176 bytes
 .../._tp3_4_fibonacci.c                       | Bin 0 -> 176 bytes
 .../tp3_synchronisation_et_taches_codes/ex1   | Bin 0 -> 17128 bytes
 .../tp3_synchronisation_et_taches_codes/ex2   | Bin 0 -> 17816 bytes
 .../tp3_synchronisation_et_taches_codes/ex3   | Bin 0 -> 17936 bytes
 .../tp3_synchronisation_et_taches_codes/ex4   | Bin 0 -> 17792 bytes
 .../mandel.c                                  | 227 ++++++++++
 .../rasterfile.h                              |  50 +++
 .../tp3_1_nb_threads.c                        |  16 +
 .../tp3_2_primes.c                            | 123 +++++
 .../tp3_3_dag.c                               | 109 +++++
 .../tp3_4_fibonacci.c                         |  92 ++++
 Mec_discord/annales/tpMPI/annale              | Bin 0 -> 18136 bytes
 Mec_discord/annales/tpMPI/annale.c            | 373 ++++++++++++++++
 Mec_discord/annales/tpMPI/hello               | Bin 0 -> 17128 bytes
 Mec_discord/annales/tpMPI/hello.c             |  22 +
 Mec_discord/annales/tpMPI/ping.c              |  59 +++
 Mec_discord/annales/tpMPI/prodmat             | Bin 0 -> 17640 bytes
 Mec_discord/annales/tpMPI/prodmat.c           | 107 +++++
 Mec_discord/annales/tpMPI/tri                 | Bin 0 -> 17728 bytes
 Mec_discord/annales/tpMPI/tri_qs_fusion.c     | 148 ++++++
 Mec_discord/annales/tri_fusion_first_try.c    | 420 ++++++++++++++++++
 61 files changed, 3094 insertions(+)
 create mode 100644 Mec_discord/annales/TPnote2024/Parallele_S6.code-workspace
 create mode 100644 Mec_discord/annales/TPnote2024/covariance
 create mode 100644 Mec_discord/annales/TPnote2024/covariance.c
 create mode 100644 Mec_discord/annales/TPnote2024/gather
 create mode 100644 Mec_discord/annales/TPnote2024/gather.c
 create mode 100644 Mec_discord/annales/TPnote2024/tri
 create mode 100644 Mec_discord/annales/TPnote2024/tri_fusion.c
 create mode 100644 Mec_discord/annales/test.c
 create mode 100644 Mec_discord/annales/tp1_openmp_codes/ex1
 create mode 100644 Mec_discord/annales/tp1_openmp_codes/ex2
 create mode 100644 Mec_discord/annales/tp1_openmp_codes/ex3
 create mode 100644 Mec_discord/annales/tp1_openmp_codes/ex4
 create mode 100644 Mec_discord/annales/tp1_openmp_codes/ex5
 create mode 100644 Mec_discord/annales/tp1_openmp_codes/ex6
 create mode 100644 Mec_discord/annales/tp1_openmp_codes/ex7
 create mode 100644 Mec_discord/annales/tp1_openmp_codes/tp0_1_hello.c
 create mode 100644 Mec_discord/annales/tp1_openmp_codes/tp0_1_hello.c:Zone.Identifier
 create mode 100644 Mec_discord/annales/tp1_openmp_codes/tp0_2_for.c
 create mode 100644 Mec_discord/annales/tp1_openmp_codes/tp0_2_for.c:Zone.Identifier
 create mode 100644 Mec_discord/annales/tp1_openmp_codes/tp1_3_addvec.c
 create mode 100644 Mec_discord/annales/tp1_openmp_codes/tp1_3_addvec.c:Zone.Identifier
 create mode 100644 Mec_discord/annales/tp1_openmp_codes/tp1_4_sum.c
 create mode 100644 Mec_discord/annales/tp1_openmp_codes/tp1_4_sum.c:Zone.Identifier
 create mode 100644 Mec_discord/annales/tp1_openmp_codes/tp1_5_matvec.c
 create mode 100644 Mec_discord/annales/tp1_openmp_codes/tp1_5_matvec.c:Zone.Identifier
 create mode 100644 Mec_discord/annales/tp1_openmp_codes/tp1_6_stencil1d.c
 create mode 100644 Mec_discord/annales/tp1_openmp_codes/tp1_6_stencil1d.c:Zone.Identifier
 create mode 100644 Mec_discord/annales/tp1_openmp_codes/tp1_7_reductionreinit.c
 create mode 100644 Mec_discord/annales/tp1_openmp_codes/tp1_7_reductionreinit.c:Zone.Identifier
 create mode 100644 Mec_discord/annales/tp1_openmp_codes/tp1_8_polynomial.c
 create mode 100644 Mec_discord/annales/tp1_openmp_codes/tp1_8_polynomial.c:Zone.Identifier
 create mode 100644 Mec_discord/annales/tp2_parallelisation_codes/._tp2_1_matmat.c
 create mode 100644 Mec_discord/annales/tp2_parallelisation_codes/._tp2_3_enumeration_sort.c
 create mode 100644 Mec_discord/annales/tp2_parallelisation_codes/bubble
 create mode 100644 Mec_discord/annales/tp2_parallelisation_codes/enum
 create mode 100644 Mec_discord/annales/tp2_parallelisation_codes/tp2_1_matmat.c
 create mode 100644 Mec_discord/annales/tp2_parallelisation_codes/tp2_2_pi.c
 create mode 100644 Mec_discord/annales/tp2_parallelisation_codes/tp2_3_enumeration_sort.c
 create mode 100644 Mec_discord/annales/tp2_parallelisation_codes/tp2_4_bubble_sort.c
 create mode 100644 Mec_discord/annales/tp3_synchronisation_et_taches_codes/._tp3_1_nb_threads.c
 create mode 100644 Mec_discord/annales/tp3_synchronisation_et_taches_codes/._tp3_4_fibonacci.c
 create mode 100644 Mec_discord/annales/tp3_synchronisation_et_taches_codes/ex1
 create mode 100644 Mec_discord/annales/tp3_synchronisation_et_taches_codes/ex2
 create mode 100644 Mec_discord/annales/tp3_synchronisation_et_taches_codes/ex3
 create mode 100644 Mec_discord/annales/tp3_synchronisation_et_taches_codes/ex4
 create mode 100644 Mec_discord/annales/tp3_synchronisation_et_taches_codes/mandel.c
 create mode 100644 Mec_discord/annales/tp3_synchronisation_et_taches_codes/rasterfile.h
 create mode 100644 Mec_discord/annales/tp3_synchronisation_et_taches_codes/tp3_1_nb_threads.c
 create mode 100644 Mec_discord/annales/tp3_synchronisation_et_taches_codes/tp3_2_primes.c
 create mode 100644 Mec_discord/annales/tp3_synchronisation_et_taches_codes/tp3_3_dag.c
 create mode 100644 Mec_discord/annales/tp3_synchronisation_et_taches_codes/tp3_4_fibonacci.c
 create mode 100644 Mec_discord/annales/tpMPI/annale
 create mode 100644 Mec_discord/annales/tpMPI/annale.c
 create mode 100644 Mec_discord/annales/tpMPI/hello
 create mode 100644 Mec_discord/annales/tpMPI/hello.c
 create mode 100644 Mec_discord/annales/tpMPI/ping.c
 create mode 100644 Mec_discord/annales/tpMPI/prodmat
 create mode 100644 Mec_discord/annales/tpMPI/prodmat.c
 create mode 100644 Mec_discord/annales/tpMPI/tri
 create mode 100644 Mec_discord/annales/tpMPI/tri_qs_fusion.c
 create mode 100644 Mec_discord/annales/tri_fusion_first_try.c

diff --git a/Mec_discord/annales/TPnote2024/Parallele_S6.code-workspace b/Mec_discord/annales/TPnote2024/Parallele_S6.code-workspace
new file mode 100644
index 0000000..af98cda
--- /dev/null
+++ b/Mec_discord/annales/TPnote2024/Parallele_S6.code-workspace
@@ -0,0 +1,11 @@
+{
+	"folders": [
+		{
+			"path": ".."
+		},
+		{
+			"path": "../../projet-progparallele-IL3-2324"
+		}
+	],
+	"settings": {}
+}
\ No newline at end of file
diff --git a/Mec_discord/annales/TPnote2024/covariance b/Mec_discord/annales/TPnote2024/covariance
new file mode 100644
index 0000000000000000000000000000000000000000..85eacbc210d9a16ced3b6973bb9189a531b9cbde
GIT binary patch
literal 17856
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

literal 0
HcmV?d00001

diff --git a/Mec_discord/annales/TPnote2024/covariance.c b/Mec_discord/annales/TPnote2024/covariance.c
new file mode 100644
index 0000000..19871e1
--- /dev/null
+++ b/Mec_discord/annales/TPnote2024/covariance.c
@@ -0,0 +1,126 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <time.h>
+#include <math.h>
+#include <omp.h>
+
+#define ERROR          1.e-6 // Acceptable precision
+#define MAX_VAL        5.      // Random values are [0, MAX_VAL]
+
+// Matrix size
+#define N 4000
+#define M 1000
+
+#define TYPE float
+
+// Computation kernel (to parallelize)
+void covariance_kernel(TYPE data[N][M], TYPE cov[M][M], TYPE mean[M])
+{
+  #pragma omp parallel 
+  {
+    int i, j, k; 
+    #pragma omp for private(i) 
+    for ( j = 0; j < M; j++)
+    {
+      mean[j] = 0.;
+      for ( i = 0; i < N; i++)
+        mean[j] += data[i][j];
+      mean[j] /= N;
+    }
+
+    #pragma omp for private(j) 
+    for ( i = 0; i < N; i++)
+      for ( j = 0; j < M; j++)
+        data[i][j] -= mean[j];
+    
+    #pragma omp for private(j,k) reduction(+: cov[:M][:M])
+    for ( i = 0; i < M; i++)
+      for ( j = i; j < M; j++)
+      {
+        cov[i][j] = 0.;
+        for (k = 0; k < N; k++)
+          cov[i][j] += data[k][i] * data[k][j];
+        cov[i][j] /= (N - 1.);
+        cov[j][i] = cov[i][j];
+      }
+  }
+}
+
+// Reference computation kernel (do not touch)
+void covariance_reference(TYPE data[N][M], TYPE cov[M][M], TYPE mean[M])
+{
+  for (int j = 0; j < M; j++)
+  {
+    mean[j] = 0.;
+    for (int i = 0; i < N; i++)
+      mean[j] += data[i][j];
+    mean[j] /= N;
+  }
+
+  for (int i = 0; i < N; i++)
+    for (int j = 0; j < M; j++)
+      data[i][j] -= mean[j];
+
+  for (int i = 0; i < M; i++)
+    for (int j = i; j < M; j++)
+    {
+      cov[i][j] = 0.;
+      for (int k = 0; k < N; k++)
+        cov[i][j] += data[k][i] * data[k][j];
+      cov[i][j] /= (N - 1.);
+      cov[j][i] = cov[i][j];
+    }
+}
+
+// MAIN
+int main()
+{
+  TYPE (*data)[M]    = malloc(N * M * sizeof(TYPE));
+  TYPE (*cov)[M]     = malloc(M * M * sizeof(TYPE));
+  TYPE *mean         = malloc(M * sizeof(TYPE));
+  TYPE (*data_ref)[M]    = malloc(N * M * sizeof(TYPE));
+  TYPE (*cov_ref)[M] = malloc(M * M * sizeof(TYPE));
+  TYPE *mean_ref     = malloc(M * sizeof(TYPE));
+  double time_reference, time_kernel, speedup;
+
+  // INITIALIZATION
+  srand(time(NULL)+getpid());
+  for (size_t i = 0; i < N; i++)
+    for (size_t j = 0; j < M; j++)
+      data[i][j] = data_ref[i][j] = (TYPE)rand()/(RAND_MAX/MAX_VAL);
+
+  // REFERENCE CALL
+  time_reference = omp_get_wtime();
+  covariance_reference(data_ref, cov_ref, mean_ref);
+  time_reference = omp_get_wtime() - time_reference;
+  printf("Reference time : %3.5lf s\n", time_reference);
+
+  // KERNEL CALL
+  time_kernel = omp_get_wtime();
+  covariance_kernel(data, cov, mean);
+  time_kernel = omp_get_wtime() - time_kernel;
+  printf("Kernel time -- : %3.5lf s\n", time_kernel);
+
+  speedup = time_reference / time_kernel;
+  printf("Speedup ------ : %3.5lf\n", speedup);
+
+  // Check if the result differs from the reference
+  for (size_t i = 0; i < M; i++) {
+    for (size_t j = i; j < M; j++) {
+      if (fabs(cov_ref[i][j] - cov[i][j]) > ERROR)
+      {
+        printf("Bad results :-(((\n");
+        exit(1);
+      }
+    }
+  }
+  printf("OK results :-)\n");
+
+  free(data);
+  free(cov);
+  free(mean);
+  free(cov_ref);
+  free(mean_ref);
+  return 0;
+}
diff --git a/Mec_discord/annales/TPnote2024/gather b/Mec_discord/annales/TPnote2024/gather
new file mode 100644
index 0000000000000000000000000000000000000000..7285c7c7b4f65492ce17946be50c87e5f9131f10
GIT binary patch
literal 17688
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
A&;S4c

literal 0
HcmV?d00001

diff --git a/Mec_discord/annales/TPnote2024/gather.c b/Mec_discord/annales/TPnote2024/gather.c
new file mode 100644
index 0000000..065c1cb
--- /dev/null
+++ b/Mec_discord/annales/TPnote2024/gather.c
@@ -0,0 +1,121 @@
+// TP noté de programmation parallèle - exercice MPI - IL3S6P 2023/2024.
+#include <stdio.h>
+#include <unistd.h>
+#include <time.h>
+#include <stdlib.h>
+#include <string.h>
+#include <mpi.h>
+
+// affichage en couleurs :
+#define YEL "\033[33m"
+#define RED "\033[31m"
+#define GREEN "\033[32m"
+#define NORM "\033[0m"
+
+// taille du tableau par défaut [test2]
+#define N 13
+
+// variables globales, initialisées au début de main()
+int rank, size;
+
+
+// Fonction à écrire :
+void mon_gather(void *sbuf, void *rbuf, int count, MPI_Datatype type,
+                int root, MPI_Comm comm)
+{
+  // cette fonction doit faire la même chose que :
+  // MPI_Gather(sbuf, count, type, rbuf, count, type, root, comm);
+  // * sans utiliser de communication collective. *
+  
+
+
+  for(int i = 0 ;i < size; i++ )
+    if(rank == i) {
+        void *tosend = sbuf + i*(count/size);
+        MPI_Send(tosend,count/size,type, 0,0,comm); 
+
+      
+      if (i == 0 ) 
+      {
+
+        MPI_Recv(rbuf + (i*(count/size)), count/size,type,i,0,comm,NULL) ;
+      }
+    }
+
+   
+    
+  return;
+}
+
+
+// Programme de test, ne nécessite pas de modification.
+int main( int argc, char **argv )
+{
+  srand(time(0)+getpid());
+  // init
+  MPI_Init(&argc,&argv);
+  MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+  MPI_Comm_size(MPI_COMM_WORLD, &size);
+
+  if(rank==0)
+    printf("Nb process: %d\n", size);
+
+
+  // test 1 : un caractère sur root=0
+  char c = 'a' + rand()%26;
+  char s_mon[size+1], s_mpi[size+1];
+  s_mon[0] = s_mon[size] = s_mpi[size] = '\0';
+
+  mon_gather(&c, s_mon, 1, MPI_CHAR, 0, MPI_COMM_WORLD);
+  MPI_Gather(&c, 1, MPI_CHAR, s_mpi, 1, MPI_CHAR, 0, MPI_COMM_WORLD);
+
+  if(rank==0 && argc==1)
+  {
+    printf(YEL"[test1] "NORM);
+    if(strncmp(s_mon, s_mpi, size))
+    {
+      printf(RED"Failed!"NORM" ('%s' != '%s')\nAborting\n", s_mon, s_mpi);
+      MPI_Abort(MPI_COMM_WORLD, 1);
+      exit(1);
+    }
+    printf(GREEN"OK"NORM" results\n");
+  }
+
+  // synchro pour attendre le abort() éventuel du test1...
+  MPI_Barrier(MPI_COMM_WORLD);
+
+  // test 2 : tableau de N longs sur root=size-1
+  long val[N];
+  printf("val [on %d] =", rank);
+  for(int i=0; i<N; i++)
+  {
+    val[i] = rand()%100;
+    printf("%3ld", val[i]);
+  }
+  printf("\n");
+
+  long *res_mon = calloc(size*N, sizeof(long));
+  long *res_mpi = calloc(size*N, sizeof(long));
+
+  mon_gather(val, res_mon, N, MPI_LONG, size-1, MPI_COMM_WORLD);
+  MPI_Gather(val, N, MPI_LONG, res_mpi, N, MPI_LONG, size-1, MPI_COMM_WORLD);
+
+  if(rank==size-1)
+  {
+    printf(YEL"[test2] "NORM);
+    for(int i=0; i<N*size; i++)
+    {
+      if(res_mon[i] != res_mpi[i])
+      {
+        printf(RED"Failed!"NORM" ('%ld' != '%ld' [%d])\n",
+                res_mon[i], res_mpi[i], i);
+        MPI_Abort(MPI_COMM_WORLD, 1);
+        exit(1);
+      }
+    }
+    printf(GREEN"OK"NORM" results\n");
+  }
+
+  MPI_Finalize();
+  return(0);
+}
diff --git a/Mec_discord/annales/TPnote2024/tri b/Mec_discord/annales/TPnote2024/tri
new file mode 100644
index 0000000000000000000000000000000000000000..f9824bcb08ddecc2d4f4060b0ac93e772a8b618e
GIT binary patch
literal 18024
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

literal 0
HcmV?d00001

diff --git a/Mec_discord/annales/TPnote2024/tri_fusion.c b/Mec_discord/annales/TPnote2024/tri_fusion.c
new file mode 100644
index 0000000..33c5f08
--- /dev/null
+++ b/Mec_discord/annales/TPnote2024/tri_fusion.c
@@ -0,0 +1,147 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <string.h>
+#include <omp.h>
+
+#define N 10000000
+
+// fonctions de vérification définies plus loin
+void verif_init(int *);
+int verif(int *);
+
+// pour fusionner deux parties de tableau triées
+//  en tab [deb..pos1-1] et tab [pos1..pos2-1]
+// résultat en place dans tab. Utilise tmp (mêmes indices):
+int tmp[N];
+void fusion(int* restrict tab, int deb, int pos1, int pos2)
+{
+  int i1 = deb, i2 = pos1, ir = deb;
+
+  while (i1 < pos1 && i2 < pos2) {
+    if (tab[i2] < tab[i1])
+      tmp[ir++] = tab[i2++];
+    else
+      tmp[ir++] = tab[i1++];
+  }
+
+  while (i1 < pos1)
+    tmp[ir++] = tab[i1++];
+
+  while (i2 < pos2)
+    tmp[ir++] = tab[i2++];
+
+  memcpy(tab+deb, tmp+deb, (pos2-deb)*sizeof(int));
+}
+
+// Fonction de tri à paralléliser :
+// Arguments :
+// - tab un tableau d'entiers, alloué, trié en place par la fonction entre
+// les positions pos1 et pos2
+void tri(int *tab, int pos1, int pos2)
+{
+  if(pos2 - pos1 > 1)
+  {
+    #pragma omp task
+    {
+      tri(tab, pos1, (pos1+pos2)/2);
+    }
+
+    #pragma omp task
+    {
+      tri(tab, (pos1+pos2)/2, pos2);
+    }
+    
+    #pragma omp taskwait
+    fusion(tab, pos1, (pos1+pos2)/2, pos2);
+  }
+}
+
+// variable globale pour éviter le stack overflow
+int tab[N];
+
+// MAIN
+int main(int argc, char* argv[])
+{
+  // initialisation
+  srand(time(0) + getpid());
+  for (int i = 0; i < N; i++) {
+    tab[i] = rand()%N;
+  }
+  verif_init(tab);
+
+  // le tri commence ici
+  double t0 = omp_get_wtime();
+
+  #pragma omp parallel 
+  {
+    #pragma omp single
+    {
+      tri(tab, 0, N);
+    }
+  }
+ 
+  double t1 = omp_get_wtime();
+
+  printf("Execution time: %lfs\n", t1-t0);
+
+  // renvoie le code de retour de la fonction de vérification du tri
+  return verif(tab);
+}
+
+// ----------ci-dessous: fonctions de vérification-------------------------
+// ------------------Ne pas modifier---------------------------------------
+static int compte[N];
+
+// fonction d'initialisation de la vérification
+void verif_init(int* t) {
+  for (int i = 0; i < N; i++)
+    compte[i] = 0;
+  for (int i = 0; i < N; i++)
+    compte[t[i]]++;
+}
+
+// fonction de vérification : le tableau passé en argument est le tableau de
+// verif_init() trié (renvoie 0 si succès, 1 si échec + message sur stderr)
+int verif(int* t) {
+  fprintf(stderr, "result:");
+  for (int i = 0; i < 5 && i < N; i++)
+    fprintf(stderr, " %d", t[i]);
+  fprintf(stderr, " ...");
+  for (int i = (N-5 > 0)? N - 5 : 0; i < N; i++)
+    fprintf(stderr, " %d", t[i]);
+  fprintf(stderr, "\n");
+
+  // vérification que le tableau t est bien le tableau trié :
+  // vérifie que les éléments sont dans l'ordre, et que le nombre
+  // d'occurrences de chaque valeur correspond au tableau compte initialisé
+  int nb = 1;
+  for (int i = 1; i < N; i++) {
+    if (t[i-1] == t[i]) {
+      nb++;
+    }
+    else if (t[i-1] > t[i]) {
+      fprintf(stderr, "Error (%d > %d at index %d-%d)\n", t[i-1], t[i], i-1, i);
+      return 1;
+    } else {
+      // vérifie le nombre d'occurrences de la valeur précédente
+      if (compte[t[i-1]] != nb) {
+        fprintf(stderr,
+                "Error (bad count of %d: %d occurences, should be %d)\n",
+                t[i-1], nb, compte[t[i-1]]);
+        return 1;
+      }
+      nb = 1;
+    }
+  }
+  // vérifie le nombre d'occurrences de la dernière valeur
+  if(compte[t[N-1]] != nb) {
+    fprintf(stderr, "Error (bad count of %d: %d occurences, should be %d)\n",
+            t[N-1], nb, compte[t[N-1]]);
+    return 1;
+  }
+  fprintf(stderr, "Result OK!\n");
+  return 0;
+}
diff --git a/Mec_discord/annales/test.c b/Mec_discord/annales/test.c
new file mode 100644
index 0000000..e69de29
diff --git a/Mec_discord/annales/tp1_openmp_codes/ex1 b/Mec_discord/annales/tp1_openmp_codes/ex1
new file mode 100644
index 0000000000000000000000000000000000000000..80fcb9920e60dce6c91f00d06c52b50b3f5c2353
GIT binary patch
literal 17032
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

literal 0
HcmV?d00001

diff --git a/Mec_discord/annales/tp1_openmp_codes/ex2 b/Mec_discord/annales/tp1_openmp_codes/ex2
new file mode 100644
index 0000000000000000000000000000000000000000..f3f0e505388eac2a92f9735b0e62849d89493fc2
GIT binary patch
literal 17240
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
E0qnlwm;e9(

literal 0
HcmV?d00001

diff --git a/Mec_discord/annales/tp1_openmp_codes/ex3 b/Mec_discord/annales/tp1_openmp_codes/ex3
new file mode 100644
index 0000000000000000000000000000000000000000..82b5f602459ddc0066492cc4edfaaa3d0ca41ecd
GIT binary patch
literal 17656
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

literal 0
HcmV?d00001

diff --git a/Mec_discord/annales/tp1_openmp_codes/ex4 b/Mec_discord/annales/tp1_openmp_codes/ex4
new file mode 100644
index 0000000000000000000000000000000000000000..5225f469380ee028e4cdbd1aec789d3f389b13d6
GIT binary patch
literal 17648
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

literal 0
HcmV?d00001

diff --git a/Mec_discord/annales/tp1_openmp_codes/ex5 b/Mec_discord/annales/tp1_openmp_codes/ex5
new file mode 100644
index 0000000000000000000000000000000000000000..d8b2a05a5d517d5c33fcb071c2870094cb39b5ca
GIT binary patch
literal 17656
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

literal 0
HcmV?d00001

diff --git a/Mec_discord/annales/tp1_openmp_codes/ex6 b/Mec_discord/annales/tp1_openmp_codes/ex6
new file mode 100644
index 0000000000000000000000000000000000000000..32c26b3c4bb91d91634848040d346ef554c6f3bf
GIT binary patch
literal 17744
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
S*;J$`{yV0|GMj;o75@RVF*z9k

literal 0
HcmV?d00001

diff --git a/Mec_discord/annales/tp1_openmp_codes/ex7 b/Mec_discord/annales/tp1_openmp_codes/ex7
new file mode 100644
index 0000000000000000000000000000000000000000..c5e185c29a4c3dc943773630b8fd16d6e6fdd000
GIT binary patch
literal 17696
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

literal 0
HcmV?d00001

diff --git a/Mec_discord/annales/tp1_openmp_codes/tp0_1_hello.c b/Mec_discord/annales/tp1_openmp_codes/tp0_1_hello.c
new file mode 100644
index 0000000..6c2cb58
--- /dev/null
+++ b/Mec_discord/annales/tp1_openmp_codes/tp0_1_hello.c
@@ -0,0 +1,11 @@
+#include <stdio.h>
+#include <omp.h>
+int main() {
+  
+  #pragma omp parallel num_threads(6)
+  {
+    printf("Hello\n");
+    printf("World\n");
+  }
+  return 0;
+}
diff --git a/Mec_discord/annales/tp1_openmp_codes/tp0_1_hello.c:Zone.Identifier b/Mec_discord/annales/tp1_openmp_codes/tp0_1_hello.c:Zone.Identifier
new file mode 100644
index 0000000..08a05d7
--- /dev/null
+++ b/Mec_discord/annales/tp1_openmp_codes/tp0_1_hello.c:Zone.Identifier
@@ -0,0 +1,3 @@
+[ZoneTransfer]
+ZoneId=3
+ReferrerUrl=C:\Users\33788\Downloads\tp1_openmp_codes(1).tgz
diff --git a/Mec_discord/annales/tp1_openmp_codes/tp0_2_for.c b/Mec_discord/annales/tp1_openmp_codes/tp0_2_for.c
new file mode 100644
index 0000000..e58a317
--- /dev/null
+++ b/Mec_discord/annales/tp1_openmp_codes/tp0_2_for.c
@@ -0,0 +1,29 @@
+#include <stdio.h>
+#include <omp.h>
+#define SIZE  100
+#define CHUNK  10
+
+int main() {
+  int i, tid;
+  double a[SIZE], b[SIZE], c[SIZE], sum = 0.;
+  
+  for (i = 0; i < SIZE; i++)
+    a[i] = b[i] = i;
+
+  #pragma omp parallel private(tid) reduction(+: sum)
+  {
+    tid = omp_get_thread_num();
+    if (tid == 0)
+      printf("Nb threads = %d\n", omp_get_num_threads());
+    printf("Thread %d: starting...\n", tid);
+
+    #pragma omp for
+    for (i = 0; i < SIZE; i++) {
+      c[i] = a[i] + b[i];
+      sum += c[i];
+      printf("Thread %d: c[%2d] = %g\n", tid, i, c[i]);
+    }
+  }
+  printf("sum = %g\n", sum);
+  return 0;
+}
diff --git a/Mec_discord/annales/tp1_openmp_codes/tp0_2_for.c:Zone.Identifier b/Mec_discord/annales/tp1_openmp_codes/tp0_2_for.c:Zone.Identifier
new file mode 100644
index 0000000..08a05d7
--- /dev/null
+++ b/Mec_discord/annales/tp1_openmp_codes/tp0_2_for.c:Zone.Identifier
@@ -0,0 +1,3 @@
+[ZoneTransfer]
+ZoneId=3
+ReferrerUrl=C:\Users\33788\Downloads\tp1_openmp_codes(1).tgz
diff --git a/Mec_discord/annales/tp1_openmp_codes/tp1_3_addvec.c b/Mec_discord/annales/tp1_openmp_codes/tp1_3_addvec.c
new file mode 100644
index 0000000..9b42462
--- /dev/null
+++ b/Mec_discord/annales/tp1_openmp_codes/tp1_3_addvec.c
@@ -0,0 +1,71 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <omp.h>
+#define HYPERTHREADING 1 // 1 if hyperthreading is on, 0 otherwise
+#define MAX_VAL        5 // Random values are [0, MAX_VAL]
+
+// Matrix and vector sizes (5120: UHD TV)
+#define N 5120000
+
+// Reference computation kernel (do not touch)
+void addvec_reference(double c[N], double a[N], double b[N]) {
+
+  for (size_t i = 0; i < N; i++) {
+    c[i] = a[i] + b[i];
+  }
+}
+
+// Computation kernel (to parallelize)
+void addvec_kernel(double c[N], double a[N], double b[N]) {
+  
+  #pragma omp parallel for 
+  for (size_t i = 0; i < N; i++) {
+    c[i] = a[i] + b[i];
+  }
+}
+
+int main() {
+  double* a   = malloc(N * sizeof(double));
+  double* b   = malloc(N * sizeof(double));
+  double* c   = malloc(N * sizeof(double));
+  double* ref = malloc(N * sizeof(double));
+  double time_reference, time_kernel, speedup, efficiency;
+
+  // Initialization by random values
+  srand((unsigned int)time(NULL));
+  for (size_t i = 0; i < N; i++) {
+    a[i] = (float)rand()/(float)(RAND_MAX/MAX_VAL);
+    b[i] = (float)rand()/(float)(RAND_MAX/MAX_VAL);
+  }
+
+  time_reference = omp_get_wtime();
+  addvec_reference(ref, a, b);
+  time_reference = omp_get_wtime() - time_reference;
+  printf("Reference time : %3.5lf s\n", time_reference);
+
+  time_kernel = omp_get_wtime();
+  addvec_kernel(c, a, b);
+  time_kernel = omp_get_wtime() - time_kernel;
+  printf("Kernel time -- : %3.5lf s\n", time_kernel);
+
+  speedup = time_reference / time_kernel;
+  efficiency = speedup / (omp_get_num_procs() / (1 + HYPERTHREADING));
+  printf("Speedup ------ : %3.5lf\n", speedup);
+  printf("Efficiency --- : %3.5lf\n", efficiency);
+
+  // Check if the result differs from the reference
+  for (size_t i = 0; i < N; i++) {
+    if (ref[i] != c[i]) {
+      printf("Bad results :-(((\n");
+      exit(1);
+    }
+  }
+  printf("OK results :-)\n");
+
+  free(a);
+  free(b);
+  free(c);
+  free(ref);
+  return 0;
+}
diff --git a/Mec_discord/annales/tp1_openmp_codes/tp1_3_addvec.c:Zone.Identifier b/Mec_discord/annales/tp1_openmp_codes/tp1_3_addvec.c:Zone.Identifier
new file mode 100644
index 0000000..08a05d7
--- /dev/null
+++ b/Mec_discord/annales/tp1_openmp_codes/tp1_3_addvec.c:Zone.Identifier
@@ -0,0 +1,3 @@
+[ZoneTransfer]
+ZoneId=3
+ReferrerUrl=C:\Users\33788\Downloads\tp1_openmp_codes(1).tgz
diff --git a/Mec_discord/annales/tp1_openmp_codes/tp1_4_sum.c b/Mec_discord/annales/tp1_openmp_codes/tp1_4_sum.c
new file mode 100644
index 0000000..121b538
--- /dev/null
+++ b/Mec_discord/annales/tp1_openmp_codes/tp1_4_sum.c
@@ -0,0 +1,68 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <omp.h>
+#define HYPERTHREADING 1      // 1 if hyperthreading is on, 0 otherwise
+#define ERROR          1.e-20 // Acceptable precision
+#define MAX_VAL        5      // Random values are [0, MAX_VAL]
+
+// Matrix and vector sizes (5120: UHD TV)
+#define N 5120000
+
+// Reference computation kernel (do not touch)
+void sum_reference(double* psum, double a[N]) {
+  double sum = 0.;
+
+  for (size_t i = 0; i < N; i++) {
+    sum += a[i];
+  }
+  *psum = sum;
+}
+
+// Computation kernel (to parallelize)
+void sum_kernel(double* psum, double a[N]) {
+  double sum = 0.;
+
+  #pragma omp parallel for reduction (+: sum)
+  for (size_t i = 0; i < N; i++) {
+    sum += a[i];
+  }
+  *psum = sum;
+}
+
+int main() {
+  double* a = malloc(N * sizeof(double));
+  double ref, sum;
+  double time_reference, time_kernel, speedup, efficiency;
+
+  // Initialization by random values
+  srand((unsigned int)time(NULL));
+  for (size_t i = 0; i < N; i++) {
+    a[i] = (float)rand()/(float)(RAND_MAX/MAX_VAL);
+  }
+
+  time_reference = omp_get_wtime();
+  sum_reference(&ref, a);
+  time_reference = omp_get_wtime() - time_reference;
+  printf("Reference time : %3.5lf s\n", time_reference);
+
+  time_kernel = omp_get_wtime();
+  sum_kernel(&sum, a);
+  time_kernel = omp_get_wtime() - time_kernel;
+  printf("Kernel time    : %3.5lf s\n", time_kernel);
+
+  speedup = time_reference / time_kernel;
+  efficiency = speedup / (omp_get_num_procs() / (1 + HYPERTHREADING));
+  printf("Speedup ------ : %3.5lf\n", speedup);
+  printf("Efficiency --- : %3.5lf\n", efficiency);
+
+  // Check if the result differs from the reference
+  if (abs(ref - sum) > ERROR) {
+    printf("Bad results :-(((\n");
+    exit(1);
+  }
+  printf("OK results :-)\n");
+
+  free(a);
+  return 0;
+}
diff --git a/Mec_discord/annales/tp1_openmp_codes/tp1_4_sum.c:Zone.Identifier b/Mec_discord/annales/tp1_openmp_codes/tp1_4_sum.c:Zone.Identifier
new file mode 100644
index 0000000..08a05d7
--- /dev/null
+++ b/Mec_discord/annales/tp1_openmp_codes/tp1_4_sum.c:Zone.Identifier
@@ -0,0 +1,3 @@
+[ZoneTransfer]
+ZoneId=3
+ReferrerUrl=C:\Users\33788\Downloads\tp1_openmp_codes(1).tgz
diff --git a/Mec_discord/annales/tp1_openmp_codes/tp1_5_matvec.c b/Mec_discord/annales/tp1_openmp_codes/tp1_5_matvec.c
new file mode 100644
index 0000000..b49cf35
--- /dev/null
+++ b/Mec_discord/annales/tp1_openmp_codes/tp1_5_matvec.c
@@ -0,0 +1,81 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <omp.h>
+#define HYPERTHREADING 1      // 1 if hyperthreading is on, 0 otherwise
+#define ERROR          1.e-20 // Acceptable precision
+#define MAX_VAL        5      // Random values are [0, MAX_VAL]
+
+// Matrix and vector sizes (5120: UHD TV)
+#define N 5120
+
+// Reference computation kernel (do not touch)
+void matvec_reference(double c[N], double A[N][N], double b[N]) {
+  size_t i, j;
+
+  for (i = 0; i < N; i++) {
+    c[i] = 0.;
+    for (j = 0; j < N; j++) {
+      c[i] += A[i][j] * b[j];
+    }
+  }
+}
+
+// Computation kernel (to parallelize)
+void matvec_kernel(double c[N], double A[N][N], double b[N]) {
+  size_t i, j;
+
+  #pragma omp parallel for private(j)
+  for (i = 0; i < N; i++) {
+    c[i] = 0.;
+    for (j = 0; j < N; j++) {
+      c[i] += A[i][j] * b[j];
+    }
+  }
+}
+
+int main() {
+  double* A   = malloc(N * N * sizeof(double));
+  double* b   = malloc(N * sizeof(double));
+  double* c   = malloc(N * sizeof(double));
+  double* ref = malloc(N * sizeof(double));
+  double time_reference, time_kernel, speedup, efficiency;
+
+  // Initialization by random values
+  srand((unsigned int)time(NULL));
+  for (size_t i = 0; i < N; i++)
+    b[i] = (float)rand()/(float)(RAND_MAX/MAX_VAL);
+  for (size_t i = 0; i < N * N; i++)
+    A[i] = (float)rand()/(float)(RAND_MAX/MAX_VAL);
+
+  time_reference = omp_get_wtime();
+  matvec_reference(ref, (double (*)[N])A, b);
+  time_reference = omp_get_wtime() - time_reference;
+  printf("Reference time : %3.5lf s\n", time_reference);
+
+  time_kernel = omp_get_wtime();
+  matvec_kernel(c, (double (*)[N])A, b);
+  time_kernel = omp_get_wtime() - time_kernel;
+  printf("Kernel time -- : %3.5lf s\n", time_kernel);
+
+  speedup = time_reference / time_kernel;
+  efficiency = speedup / (omp_get_num_procs() / (1 + HYPERTHREADING));
+  printf("Speedup ------ : %3.5lf\n", speedup);
+  printf("Efficiency --- : %3.5lf\n", efficiency);
+
+  // Check if the result differs from the reference
+  for (size_t i = 0; i < N; i++) {
+    //if (abs(ref[i] - c[i]) > ERROR) {
+    if (ref[i] != c[i]) {
+      printf("Bad results :-(((\n");
+      exit(1);
+    }
+  }
+  printf("OK results :-)\n");
+
+  free(A);
+  free(b);
+  free(c);
+  free(ref);
+  return 0;
+}
diff --git a/Mec_discord/annales/tp1_openmp_codes/tp1_5_matvec.c:Zone.Identifier b/Mec_discord/annales/tp1_openmp_codes/tp1_5_matvec.c:Zone.Identifier
new file mode 100644
index 0000000..08a05d7
--- /dev/null
+++ b/Mec_discord/annales/tp1_openmp_codes/tp1_5_matvec.c:Zone.Identifier
@@ -0,0 +1,3 @@
+[ZoneTransfer]
+ZoneId=3
+ReferrerUrl=C:\Users\33788\Downloads\tp1_openmp_codes(1).tgz
diff --git a/Mec_discord/annales/tp1_openmp_codes/tp1_6_stencil1d.c b/Mec_discord/annales/tp1_openmp_codes/tp1_6_stencil1d.c
new file mode 100644
index 0000000..1d2bcbc
--- /dev/null
+++ b/Mec_discord/annales/tp1_openmp_codes/tp1_6_stencil1d.c
@@ -0,0 +1,81 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <omp.h>
+#define HYPERTHREADING 1      // 1 if hyperthreading is on, 0 otherwise
+#define ERROR          1.e-20 // Acceptable precision
+#define MAX_VAL        5      // Random values are [0, MAX_VAL]
+
+// Matrix and vector sizes (5120: UHD TV)
+#define N 51200000
+
+// Reference computation kernel (do not touch)
+void stencil1D_reference(double a[N], double b[N]) {
+  for (size_t i = 1; i < N; i++) {
+    a[i] = (a[i] + a[i - 1]) / 2;
+    b[i] = (b[i] + b[i - 1]) / 2;
+  }
+}
+
+void stencil1D_kernel(double a[N], double b[N]) {
+  #pragma omp parallel sections
+  {
+    #pragma omp section
+    for (size_t i = 1; i < N; i++) {
+        a[i] = (a[i] + a[i - 1]) / 2;
+    }
+    #pragma omp section
+    for (size_t i = 1; i < N; i++) {
+        b[i] = (b[i] + b[i - 1]) / 2;
+    }
+  }
+}
+
+
+int main() {
+  double* a     = malloc(N * sizeof(double));
+  double* b     = malloc(N * sizeof(double));
+  double* ref_a = malloc(N * sizeof(double));
+  double* ref_b = malloc(N * sizeof(double));
+  double time_reference, time_kernel, speedup, efficiency;
+
+  // Initialization by random values
+  srand((unsigned int)time(NULL));
+  for (size_t i = 0; i < N; i++) {
+    a[i] = (float)rand()/(float)(RAND_MAX/MAX_VAL);
+    b[i] = (float)rand()/(float)(RAND_MAX/MAX_VAL);
+    ref_a[i] = a[i];
+    ref_b[i] = b[i];
+  }
+
+  time_reference = omp_get_wtime();
+  stencil1D_reference(a, b);
+  time_reference = omp_get_wtime() - time_reference;
+  printf("Reference time : %3.5lf s\n", time_reference);
+
+  time_kernel = omp_get_wtime();
+  stencil1D_kernel(ref_a, ref_b);
+  time_kernel = omp_get_wtime() - time_kernel;
+  printf("Kernel time -- : %3.5lf s\n", time_kernel);
+
+  speedup = time_reference / time_kernel;
+  efficiency = speedup / (omp_get_num_procs() / (1 + HYPERTHREADING));
+  printf("Speedup ------ : %3.5lf\n", speedup);
+  printf("Efficiency --- : %3.5lf\n", efficiency);
+
+  // Check if the result differs from the reference
+  for (size_t i = 0; i < N; i++) {
+    //if ((abs(ref_a[i] - a[i]) > ERROR) || (abs(ref_b[i] - b[i]) > ERROR) {
+    if ((ref_a[i] != a[i]) || (ref_b[i] != b[i])) {
+      printf("Bad results :-(((\n");
+      exit(1);
+    }
+  }
+  printf("OK results :-)\n");
+
+  free(a);
+  free(b);
+  free(ref_a);
+  free(ref_b);
+  return 0;
+}
diff --git a/Mec_discord/annales/tp1_openmp_codes/tp1_6_stencil1d.c:Zone.Identifier b/Mec_discord/annales/tp1_openmp_codes/tp1_6_stencil1d.c:Zone.Identifier
new file mode 100644
index 0000000..08a05d7
--- /dev/null
+++ b/Mec_discord/annales/tp1_openmp_codes/tp1_6_stencil1d.c:Zone.Identifier
@@ -0,0 +1,3 @@
+[ZoneTransfer]
+ZoneId=3
+ReferrerUrl=C:\Users\33788\Downloads\tp1_openmp_codes(1).tgz
diff --git a/Mec_discord/annales/tp1_openmp_codes/tp1_7_reductionreinit.c b/Mec_discord/annales/tp1_openmp_codes/tp1_7_reductionreinit.c
new file mode 100644
index 0000000..d07a684
--- /dev/null
+++ b/Mec_discord/annales/tp1_openmp_codes/tp1_7_reductionreinit.c
@@ -0,0 +1,92 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <omp.h>
+#define HYPERTHREADING 1      // 1 if hyperthreading is on, 0 otherwise
+#define ERROR          1.e-20 // Acceptable precision
+#define MAX_VAL        5      // Random values are [0, MAX_VAL]
+
+// Matrix size (5120: UHD TV)
+#define N 5120
+
+// Reference computation kernel (do not touch)
+/**
+ * reduction_reinit function:
+ * this function returns the sum of all the elements of a square matrix
+ * and sets the matrix elements to 0.
+ * \param[in,out] A    The matrix to use (reset to 0 by the function).
+ * \param[out]    sum  The sum of the elements of the input matrix.
+ */
+void reduction_reinit_reference(double A[N][N], double* sum) { 
+  *sum = 0.;
+
+  for (size_t i = 0; i < N; i++) {
+    for (size_t j = 0; j < N; j++) {
+      *sum += A[i][j];
+      A[i][j] = 0.;
+    }
+  }
+}
+
+// Computation kernel (to parallelize)
+void reduction_reinit_kernel(double A[N][N], double* sum) { 
+  *sum = 0.;
+  double copie_sum = 0 ; 
+  size_t i , j ; 
+  #pragma omp parallel for reduction(+: copie_sum) private(j)
+  for ( i = 0; i < N; i++) {
+    for ( j = 0; j < N; j++) {
+      copie_sum += A[i][j];
+      A[i][j] = 0.;
+    }
+  }
+
+  *sum = copie_sum; 
+
+}
+
+int main() {
+  double* AR = malloc(N * N * sizeof(double));
+  double* AK = malloc(N * N * sizeof(double));
+  double sum_ref, sum_ker;
+  double time_reference, time_kernel, speedup, efficiency;
+
+  // Initialization by random values
+  srand((unsigned int)time(NULL));
+  for (size_t i = 0; i < N * N; i++)
+    AR[i] = AK[i] = (float)rand()/(float)(RAND_MAX/MAX_VAL);
+
+  time_reference = omp_get_wtime();
+  reduction_reinit_reference((double (*)[N])AR, &sum_ref);
+  time_reference = omp_get_wtime() - time_reference;
+  printf("Reference time : %3.5lf s\n", time_reference);
+
+  time_kernel = omp_get_wtime();
+  reduction_reinit_kernel((double (*)[N])AK, &sum_ker);
+  time_kernel = omp_get_wtime() - time_kernel;
+  printf("Kernel time    : %3.5lf s\n", time_kernel);
+
+  speedup = time_reference / time_kernel;
+  efficiency = speedup / (omp_get_num_procs() / (1 + HYPERTHREADING));
+  printf("Speedup ------ : %3.5lf\n", speedup);
+  printf("Efficiency --- : %3.5lf\n", efficiency);
+
+  // Check if the result differs from the reference
+  if (abs(sum_ref - sum_ker) > ERROR) {
+    printf("Bad results :-(((\n");
+    exit(1);
+  }
+  for (size_t i = 0; i < N; i++) {
+    for (size_t j = 0; j < N; j++) {
+      if (AR[i * N + j] != AK[i * N + j]) {
+        printf("Bad results :-(((\n");
+        exit(1);
+      }
+    }
+  }
+  printf("OK results :-)\n");
+
+  free(AK);
+  free(AR);
+  return 0;
+}
diff --git a/Mec_discord/annales/tp1_openmp_codes/tp1_7_reductionreinit.c:Zone.Identifier b/Mec_discord/annales/tp1_openmp_codes/tp1_7_reductionreinit.c:Zone.Identifier
new file mode 100644
index 0000000..08a05d7
--- /dev/null
+++ b/Mec_discord/annales/tp1_openmp_codes/tp1_7_reductionreinit.c:Zone.Identifier
@@ -0,0 +1,3 @@
+[ZoneTransfer]
+ZoneId=3
+ReferrerUrl=C:\Users\33788\Downloads\tp1_openmp_codes(1).tgz
diff --git a/Mec_discord/annales/tp1_openmp_codes/tp1_8_polynomial.c b/Mec_discord/annales/tp1_openmp_codes/tp1_8_polynomial.c
new file mode 100644
index 0000000..ade72b3
--- /dev/null
+++ b/Mec_discord/annales/tp1_openmp_codes/tp1_8_polynomial.c
@@ -0,0 +1,87 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <omp.h>
+#define max(x,y) ((x) > (y)? (x) : (y))
+#define min(x,y) ((x) < (y)? (x) : (y))
+#define HYPERTHREADING 1      // 1 if hyperthreading is on, 0 otherwise
+#define ERROR          1.e-20 // Acceptable precision
+#define MAX_VAL        5      // Random values are [0, MAX_VAL]
+
+// Matrix and vector sizes (5120: UHD TV)
+#define N 5120
+
+// Reference computation kernel (do not touch)
+/**
+ * polynomial_multiply function:
+ * this function computes the polynomial multiply c = a * b,
+ * each polynomial is represented using an array, the value stored
+ * in the n^th cell corresponds to the coefficient of x^n. E.g.:
+ * a = (3.x^2 + 2.x + 1) is represented by [3, 2, 1],
+ * b = (2.x^2 + 3.x) is represented by [2, 3, 0] and the result of
+ * a * b = 6.x^4 + 13.x^3 + 6.x^2 + 3.x is [6, 13, 6, 3, 0].
+ * \param c is the target polynomial, must be initialized to 0
+ * \param a is the first polynomial
+ * \param b is the second polynomial
+ */
+void polynomial_multiply_reference(double c[2*N-1], double a[N], double b[N]) {
+  for (size_t i = 0; i < N; i++)
+    for (size_t j = 0; j < N; j++)
+      c[i+j] += a[i] * b[j];
+}
+
+// Computation kernel (to parallelize)
+void polynomial_multiply_kernel(double c[2*N-1], double a[N], double b[N]) {
+  for (size_t i = 0; i < N; i++)
+    for (size_t j = 0; j < N; j++)
+      c[i+j] += a[i] * b[j];
+}
+
+int main() {
+  double* a     = malloc(N * sizeof(double));
+  double* b     = malloc(N * sizeof(double));
+  double* c_ref = malloc((2*N - 1) * sizeof(double));
+  double* c_ker = malloc((2*N - 1) * sizeof(double));
+  double time_reference, time_kernel, speedup, efficiency;
+
+  // Initialization of a and b by random values, and c by 0
+  srand((unsigned int)time(NULL));
+  for (size_t i = 0; i < N; i++) {
+    a[i] = (float)rand()/(float)(RAND_MAX/MAX_VAL);
+    b[i] = (float)rand()/(float)(RAND_MAX/MAX_VAL);
+  }
+  for (size_t i = 0; i < 2*N - 1; i++) {
+    c_ref[i] = c_ker[i] = 0.;
+  }
+
+  time_reference = omp_get_wtime();
+  polynomial_multiply_reference(c_ref, a, b);
+  time_reference = omp_get_wtime() - time_reference;
+  printf("Reference time : %3.5lf s\n", time_reference);
+
+  time_kernel = omp_get_wtime();
+  polynomial_multiply_kernel(c_ker, a, b);
+  time_kernel = omp_get_wtime() - time_kernel;
+  printf("Kernel time    : %3.5lf s\n", time_kernel);
+
+  speedup = time_reference / time_kernel;
+  efficiency = speedup / (omp_get_num_procs() / (1 + HYPERTHREADING));
+  printf("Speedup ------ : %3.5lf\n", speedup);
+  printf("Efficiency --- : %3.5lf\n", efficiency);
+
+  // Check if the result differs from the reference
+  for (size_t i = 0; i < 2*N - 1; i++) {
+    //if (abs(c_ref[i] - c_ker[i]) > ERROR) {
+    if (c_ref[i] != c_ker[i]) {
+      printf("Bad results :-(((\n");
+      exit(1);
+    }
+  }
+  printf("OK results :-)\n");
+
+  free(a);
+  free(b);
+  free(c_ref);
+  free(c_ker);
+  return 0;
+}
diff --git a/Mec_discord/annales/tp1_openmp_codes/tp1_8_polynomial.c:Zone.Identifier b/Mec_discord/annales/tp1_openmp_codes/tp1_8_polynomial.c:Zone.Identifier
new file mode 100644
index 0000000..08a05d7
--- /dev/null
+++ b/Mec_discord/annales/tp1_openmp_codes/tp1_8_polynomial.c:Zone.Identifier
@@ -0,0 +1,3 @@
+[ZoneTransfer]
+ZoneId=3
+ReferrerUrl=C:\Users\33788\Downloads\tp1_openmp_codes(1).tgz
diff --git a/Mec_discord/annales/tp2_parallelisation_codes/._tp2_1_matmat.c b/Mec_discord/annales/tp2_parallelisation_codes/._tp2_1_matmat.c
new file mode 100644
index 0000000000000000000000000000000000000000..3c409add6877b07f497e6e454e178d61131c9275
GIT binary patch
literal 176
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aUBqY_#1$j2;dkJ5(HHS(y;)D1)zKw
z#Rz090AirHRC0c<USdH(PO4r`VsS}nacW9RVo9oUKrl#gr;Az~h<@0hr30b?P;wN(

literal 0
HcmV?d00001

diff --git a/Mec_discord/annales/tp2_parallelisation_codes/._tp2_3_enumeration_sort.c b/Mec_discord/annales/tp2_parallelisation_codes/._tp2_3_enumeration_sort.c
new file mode 100644
index 0000000000000000000000000000000000000000..0e8871833bbe28e2429271d930f56a3d2a01fdd9
GIT binary patch
literal 176
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aUBqY_#1$j2;dkJ5(HHS(y;)D1)zKw
z#Rz090AirHRC0c<USdH(PO4r`VsS}nacW9RVo9oUKrl!#i=A2=i01M+FAAaoLk|<V

literal 0
HcmV?d00001

diff --git a/Mec_discord/annales/tp2_parallelisation_codes/bubble b/Mec_discord/annales/tp2_parallelisation_codes/bubble
new file mode 100644
index 0000000000000000000000000000000000000000..76f63f930478ada7d677c1480f4546bb710393f3
GIT binary patch
literal 17760
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
Kb!#eM#eV>0?GGIQ

literal 0
HcmV?d00001

diff --git a/Mec_discord/annales/tp2_parallelisation_codes/enum b/Mec_discord/annales/tp2_parallelisation_codes/enum
new file mode 100644
index 0000000000000000000000000000000000000000..7b16f1c1b2ae402d6139fa595b46ff1b0c44330f
GIT binary patch
literal 17824
zcmeHPeQ;D&mcN}&AY$kQ1t*9Ot-?%jO_N4M;+U~JB=9oR2n&fiBk*X_9TF!=$No@2
z8E~WQ^gtM9)^#n%tzw*Y%H7%BQP;9&tlFUyx=|EI#4mOcj0oB>qoRld#?bpa_ubQZ
z-Ra(%{bRRktNK=T&ON_#&b{ZJ`|;kp@7-)^^eis2SOh1l__mPT#RlS10{gdFLkO2x
zC@#d`uZzpY1i;1kxs*7Ywig)!rlm^H3QBfQD0w!$OzAOY4~ddpzI59KhJ>l8FnF>n
zp{(Mw>Ax$-n6f-wpPh`6?DB7#ZlH!BF*Vy!Yz|jTu{d0pNe`-aA6As@h$XwEvP&vE
zrl-guB&HlsiV6MVs=RF4Kt@PRNte>{lVKm_XI&xLadedd3#M%Mm#`y0|J=l3U!m&D
z7ndsKKU39QF}Jg0-GcdZJAKui9o>-))f*Nrs9rGN5ehiw$#zeLBh(d3Zf+50KL7RK
zKEG`8f`=}#Klk>D(K#<a{hK?<Z}Nf4BOOYl&*3LJ4L_0_?Ya*+10(vX{|{Y6^QBV|
zT$Drj>pVEsW6z=gt33LP^We>S@PEsLAIpR9&VxUf2an{zF9&YNFFW-E$Q7SudGKf+
z{DnOD&-38d0Jr0poz?@$<<Bqj;I9C`GP@As^`_>fy3Zf<ukQ$j{lVs?i#h|{{$}sG
zPQTFg^<9B(Jrwo^!@6#$=2Q%H_2}#UVg2rKN0(nP7j6&wy*|A=(j}HGTe@8D@dmw}
zo&L_W0wlVj6w1JQf`QhM@Neh{i%`(p?GrtbaESi2wtIu3C)m*)ZWFC2E6^&s{9Ua*
z8%3AF>3Zu1uin<t?d|N?L=C{SYgG;C@^*BKwxHiH0Ir9VH2a*yv{G(?;pBWrjUZ>8
zip~RF;%Ta1q|b9W=clvt9M>UuMRNWXVI~&KJn=MBOC&X<6QslfoimWo9CqP%@TzY>
zae^qbC~Ow-#bO%svx&Eg%fVB!P$^1A{DVJz2-Cbo%vM<B(hgiXibRdl=k=P`*FkkX
z98~Ku<GU5U+eM`ck;Yw;6^Cy!D6J{#QXzps6V5gyNSg36scHN<Wx~zl_N)n~^@~%b
z%g9XxQB9J7-GmnzD)MiY38x<5RO2#oRF1rUD#1b%PHp4lav3?&rynQHW#kA`muLwr
zH{p{E75Voz6MmryUu(iAoA7oMZZqLMCcNB)Z!qC}Z6fhj6F!9im44(hGUUJNatZ7*
z;dBiuq(TG=5hz5U5P?Dj{y#)O>-}S?w!P%&Tp_dvV&S6HL9I7lx;O25>bm0)rDmVN
z-}0F*<cM!4`OshrY4(2-Pq!FD2PJ=qc)GP1ib?)O;_23B=t;>B5Kp%lL%Sva9PxB(
zF|<qaPZLkK6hm7j|4+ozWp}7Y@{bWuw@gE8CI1NVbW1U`T=G97o^B<ET$2AW@pKC@
zR3rJnBA#xohU}8xL_FO}3{^-zNIcy_3<=5KL3}y!r_KYIJ>U?cZ5Mc%+%0>A%Oc#(
zEi0Wz5X{QtBT$l9Q#79J1LI6-(L}NpIW78pat3JmOp*L0Xd-#*p~Qz*#}Z$zDft^z
zk@)iav3UPIQ;OeCj7(`bDzwyI?Y<FFB}C+v<kP4<{_eRS?$x57Bu^s1$=wFheIzlm
z>LsnOt`1)RmU<#_x}qN?cxII*AB9fxZZ`EqKS;ia*eCtU^gWoyVS0JmbYx2LtYjO+
ziIEBvfWO7F5~tTBsp{e6zd+!QCct#>g_(uTlJg;Gh$j1!GaD?)#Qs~qc=c@JrK@A4
zI0D5_5n#i$y=!90iBNuyy8QRlHfqlsaB2)8H}?W@#&)6phJ=XsZ*&yLH{A$2w>Tb|
zuccyIos7#nD0~kJPxg+cQe<~KD3!R9Xm7mo_SNoH&X{{OxqCk;ejkE86s4qq8_tiK
zqOY#eqQ|w~6Q`Cpd-_Tqfn!?V<ZC6Vy9_$1Y0u&@^7HbU4J4_%vzkcB9Yku+hNofr
z?1Y@A&jqQ$@|jyvw%DsE^xabbx*LehIj==eY5gDHr1hV*YL<Q4tLMX0QGj0+P?{QS
zll8Fu);bI9L}YG@)?2q2S_s$4aGAEf?l_oa7aEgnhl~44{sX*aHQO;Ax(C8GNBPYA
z$t$s|Wu+D!p-G>7`YQyeHJQ9a(zDJ(zm=Wwr!!jZTfvZ4{+qL!<t<NN*+Nh4E1^}|
z_C;7HuGRXco^5o-&?{x<ov~s2F0J<YP<i5<<Aw5{_q)p*U$}pN<dSsngs0Q+*_Svs
z_l3LOBs5i|y6pok^}N<QP})>`F7h<3IJcvNQZeVD;cabW-eR7#{GPfBZFaY~o5^=M
zwa{6E$#+Lg6Kxi?BKrJuG#Rz%u_nwok|#C?CjSnTKQS7pd)1)V4H4ZOm}V&x;&&<B
z%sUTx`g)~d-zE!<*iYieH-GO9%6&+=qw#f{rx(A5?DWppN>REeI+)nJ<v`-($g#vn
zBX17RON@@}i}$w-yd>hsyRMJL-7N!0EQ!%0{qg?I!+T-)wOC}i*1ONH^~UU;+I?X?
zvAN>wa4HVVKg8X$2L@s3zkYw>=<6TE`y)pV#NBlR?^%!?K0xOC!;i+-o!McJyDxwJ
zIC4Af!`tJ>M|YG`q0oB$MQ}U8$>JlwKx~V&)c*1Z=Fl>;IZ!ecjZQb{BWlWJuc03|
zZ+S8C#>mIRQ+a?;3Fsq4G3-f<R+L%c<N!4<adO~Y_}FrN47vT5#7D2cg$Ba^;eOe^
za3Vf1x}&U^oOuD+on^&iWksIRQUlt3U(yIGe;^E>nzk1oz*1My@G@38TC9q()SZ)4
z`UIwN;_ThYpPoaP_W6^yyH|OlpSV}A9@+vVV|ci*@X7%qhqW3Sf2>IEgJOCOzTnG@
zp+So=$tfBy#rJ-CW!$1g-*@hJ9>QEbieZ#Ew*^b!X{ccRY1%$DZmdBVp5*3hY6QPe
zi_OPpQFL#-;&!Y!SZ9WgfzNPIxNp_^iZ62CLc_Ny`gw~M9bGA}xwWUtd;gAxcI{_P
z(JwsZi$UIS9`W?mb>ZT+^nowJGwFIubsrU;XiBc0xF957L>->m(~*;&=zH*Z5wx8#
z&z#}pQxG)OzJ1p>J$==4fXa1*?LSG||JYEAoHVALdzE{&d(9rYV7m38Y6y*W4h|e6
zcdC!!+B-HS$Cq~lmpA;cn6K_z(Sj|rQP?d_(Kp>KP0=&%W_R?f7Ok(k2k=VIoKd;_
z^!^E<>mRj-XE=|*&J+F26aBa$`hhz&^&PEuuSKgp8u`%dqFcwBCg{#Y#xLV81z;f+
zB2b7xAp(U66e3WFz@HrfdM`42y<IpQ4!c<4Z^MhM?pD8@-b2}Mu+P5Mab0JdJv2#t
z*B|WmcN%zgb%tnVkKgZ$^w_IqN{c3m#<sSO)((`nkz^)8z1L?C`a_Y<aL9f`byZcB
zSoU2LFeiui^b|meHWn!HyA(Vn%9M{P@z#8l%gsk$K5$^EWrp=zx1j*KNBZjHRO%l<
z%TA?I2S6_aeFnyFf0{~#!5{c6l{x`>@99*k0{Ek6QmKWYH-3>y(Jsj~xb68IbO-2-
zXbitIuxwf(EE_5;Gs-5G?y^j*Ae_E^Sc`K10+ds3eZ0Si0_iV@e^jrqRV=nuey9Ax
zyGyr<n=bv<)z{9tlFA_a2K*L&l1kwoF`cTAqj&s+sP8dC-L{HtMQ&SVuXTydUi6bm
zwn`vwTdDg(S=W!C;zL`fP=`oeZSsW1KI@L+-V*D13tEA;Li8klt3FSqeg-P)Z52C;
z;MO*)+h*@A_SkBQ?zGuaNrSDT-d3tXWe~pu(EkXO^nXJ7JFWFLdtY(At!hU}gRN%U
zga+Hf-iZx1SJ7WjvMqGmYTULeXw=&(VX?$k`kf2KjWE9kaafCZ#3&w+^c5|!Rqmj=
zw-v*pw`8%+W!+_&WUB%MFQC#O8whoZQ77zb(0{9uH+*R#UmD4m#<VXQ`Le|3x?`Lt
zXp($iN#jF9Ipjtm6(UfGKp_H!2oxevh(I9%g$NWP@V^lO{$7p0Pvd(}`i71Y^Yl#|
zCA<qUlKL2GvSOd9G&0i_&)>z(P&{t)Wx7;R{yvVLMJTcS%=uJ6^6J42Z`WjUsSJNZ
zR-@$ftVQWY<sV*O$fVqn-|8wz5`G>OE(4{<5=vW@JwG?mi)2b)Gl)2>0LCj-hW(By
zJ^p5m>&Lq#*&c|cDqa&x{t49(yyB2N`+>(q$=|Ewc)K9^wBM?p|7(&|-!o>{yFiVD
z#fsjdXq%#UDY{M3hZOylqR%S2Pti9OeP7Wp6rG?xvb#jlZ<s&2gHyX*hG$C_ExN&8
z)!<*(;qA6NYaIBPw0glDm9x*Qndhu=I%~39k;z*z>iL|3Sz^Vm0)H=`iCaaIJJ2Mc
zuT@KPbet7mNb>kKsbjBVg5YtUiBA+f9y0M#!Q&_szd-Q#%)}?9$8jc(S)<~diI)j`
zPJFVc$%;SOS%powa^mHJ*N4pVQMlcV7<sFhl0IKxmRj*8_SP%R2<u;*J~v^OTCt14
z>r5s-P2?KSR&h!CJKRittO71GV&tu&Qaqd!pDv!riSz0=Ru(Ng#p2V{7-Hl|vk37#
zr9L8kOexTQMK1j%O25YZ(J8Pdg|E%RX%C0W=XD>fOhNp$h%x`wvM7Ei@$vC|95|K3
z*AZC={yZi1$M?%Y;JN(I*RFSDITwlWRmhl9zH&$<SNU?ENL)N_Je-HV1y_me@i0*~
ze7ygcN__nItOjnOtA&d^7)w={|3x?jl|8=}LH{De?MZc^kj27mrNqbVIp@oRZvbv*
zB@?{|>ybUj_<S%=IgbOcfPVJ4{pURT19|YJgcpsU???0K)A=NdL+ld6dAa|GY$^Po
zQZz+WU14ezvNM2_{%&=lmivmp7f3u)m$>FUcv~KPBXEjC_PpMfNB=S4x%_+<xP81k
zA|drF)7L9jIh3dT6QoarM-^7A3{L0KFUEMghzm8*uS?t}maFk5_bMTG<k5c$<yT-G
zc+zDm1lcXJUVP4_))U@ycB359&mKQZRlR&&h@rnJtx)({b%SNhPaKoU<4+IpDMjPQ
z=e-giKTdY#!5;^1mmXyP*#kUR+};F!Wu~g+TJpqSgnQ=c*Xn*8x$y_R;SM_169|SK
zts)!Je;{9#ICMJ3)7FjSFRj6FC>+6eA+2KUppYK!(p%}MPza}Nd;xuZXJDPTQ}=}f
z!I18aY!I!m@AQZLK9rDCgO2HR=-yz^yAghcgBx);$J^!CeUYxNjW98BIyA!>s)4q)
z&Vbj)e(Cz+74D^tdgILvbWkZ%-zW5j@7?TP+O#NBBF{Ae!g)HqQBx&o4J(Ac#Ivm4
z?a`MlUc9ogS#NgNdm5=!d6=j*6p^0GqeLz~8bs%T)B&Xo?7ur+MW>oFmHj?%*qc5I
zB~Mei=r9r;LZa@VGgf1#s-%d{DH$iCGK$L6t7wFZoPL)V9p%U2s&T48evQUWHV%N%
z`KgRL<k_qY#5j|c0io;BCgTWJx(%j-U+G4SdDa%`ZZ%xXK7gkCLIJ%UC&F+z%{cg#
zt_x?g^rmH~$Jf!VM?!v|pm%_2G4&5ekZPAl%uIEsyOu_pI!%^gtn2GSA=M0dl1v6&
z4|!>n%d=`(>NrW49*(A%>tS`YjxlO2gLD=z=K;Hn^K&lA(LuG$<8B!a2uEmR7wQ5H
z2MyZJIh>#K2YZC0I}r9e)^|r7>mnUEncCq~kh{LAI_zC9q^#W=Y8MXQ#%`2n&~VU@
z+~p63u#jXhI%GkAr<V*=uBS6B95Sp9WF6}RV8i|m_)7}_lmc?pJN)fx%D4Ma2y=$1
zG4~A%&Z7ozS4S(V4}_^?I7hR`fqoJWtUg^>RC274|1*g83Fy**WmP7A{$k4e1WGJ*
zIZyN|{OFOK?fE&4DZTeJC%%p{wg4HkJwMMewX>q4+4c><@#;3f_49KdQ?8%)GkD*C
zi@g~c+Ph$Tem-Pcp#-!oKyhMw-e<T47%o+5dwz~&%KIZwkx5;KnH6i0qrC{OpPx6G
z(mPs8>_6)<{Q+dOx4}F=mon{<*2bA>(qaD<EH)uSF=cyxeq|a{id;Y2bNlaC_Vr5d
zu-cztx>Yrp?CF*x+kPi7QsMn2y5*8dQFWW5K*QHGgG>}Zv%Ou}F_rJyO$J%TiwCpp
z`T3eD`^!Zz&-CxJ?D>9+>76PbY|r&G|H~|UeqLwF`&z6|ePvGn2!`6v{U_{7s^}~d
znv&g=r>yb3IA%ZV3PXV@J+GQmcKv%GG}q7j1WeCn)z5L`GWR2cyIMJi2;==r{{I8n
z`ph$Z12*L*d){{#tftb&#+$*7@ofJt1T^+&4pZXiQU3o9^qfSA$0yryKRyf@sjxkt
zCq6uvtOR{9osrm{>4%V-?S)IJ*BF$_Hz&4ZdKyBrJwHD^tnArOE`#luKZguq>_0z8
zJfZBf^;J07To}*s_zokD7#X(zW){x&W||(mCf$Roz}u7qbR8my{o(b8<_G(3G8a{~
g2KQ-}kn3e#+BVBlk)r8p-__WUU~MDTW1JBG1zkBBP5=M^

literal 0
HcmV?d00001

diff --git a/Mec_discord/annales/tp2_parallelisation_codes/tp2_1_matmat.c b/Mec_discord/annales/tp2_parallelisation_codes/tp2_1_matmat.c
new file mode 100644
index 0000000..f0ce7a1
--- /dev/null
+++ b/Mec_discord/annales/tp2_parallelisation_codes/tp2_1_matmat.c
@@ -0,0 +1,82 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <omp.h>
+#define HYPERTHREADING 1      // 1 if hyperthreading is on, 0 otherwise
+#define ERROR          1.e-20 // Acceptable precision
+#define MAX_VAL        5      // Random values are [0, MAX_VAL]
+
+// Matrix and vector sizes
+#define N 1000
+
+// Reference computation kernel (do not touch)
+void matmat_reference(double C[N][N], double A[N][N], double B[N][N]) {
+  size_t i, j, k;
+
+  for (i = 0; i < N; i++) {
+    for (j = 0; j < N; j++) {
+      C[i][j] = 0.;
+      for (k = 0; k < N; k++) {
+        C[i][j] += A[i][k] * B[k][j];
+      }
+    }
+  }
+}
+
+// Computation kernel (to parallelize)
+void matmat_kernel(double C[N][N], double A[N][N], double B[N][N]) {
+  size_t i, j, k;
+  #pragma omp parallel for private(j,k) //schedule(dynamic,10) //collapse(2)
+  for (i = 0; i < N; i++) {
+    for (j = 0; j < N; j++) {
+      C[i][j] = 0.;
+      for (k = 0; k < N; k++) {
+        C[i][j] += A[i][k] * B[k][j];
+      }
+    }
+  }
+}
+
+int main() {
+  double* A   = malloc(N * N * sizeof(double));
+  double* B   = malloc(N * N * sizeof(double));
+  double* C   = malloc(N * N * sizeof(double));
+  double* ref = malloc(N * N * sizeof(double));
+  double time_reference, time_kernel, speedup, efficiency;
+
+  // Initialization by random values
+  srand((unsigned int)time(NULL));
+  for (size_t i = 0; i < N * N; i++) {
+    A[i] = (double)rand()/(double)(RAND_MAX/MAX_VAL);
+    B[i] = (double)rand()/(double)(RAND_MAX/MAX_VAL);
+  }
+  time_reference = omp_get_wtime();
+  matmat_reference((double (*)[N])ref, (double (*)[N])A, (double (*)[N])B);
+  time_reference = omp_get_wtime() - time_reference;
+  printf("Reference time : %3.5lf s\n", time_reference);
+
+  time_kernel = omp_get_wtime();
+  matmat_kernel((double (*)[N])C, (double (*)[N])A, (double (*)[N])B);
+  time_kernel = omp_get_wtime() - time_kernel;
+  printf("Kernel time -- : %3.5lf s\n", time_kernel);
+
+  speedup = time_reference / time_kernel;
+  efficiency = speedup / (omp_get_num_procs() / (1 + HYPERTHREADING));
+  printf("Speedup ------ : %3.5lf\n", speedup);
+  printf("Efficiency --- : %3.5lf\n", efficiency);
+
+  // Check if the result differs from the reference
+  for (size_t i = 0; i < N*N; i++) {
+    if (ref[i] != C[i]) {
+      printf("Bad results :-(((\n");
+      exit(1);
+    }
+  }
+  printf("OK results :-)\n");
+
+  free(A);
+  free(B);
+  free(C);
+  free(ref);
+  return 0;
+}
diff --git a/Mec_discord/annales/tp2_parallelisation_codes/tp2_2_pi.c b/Mec_discord/annales/tp2_parallelisation_codes/tp2_2_pi.c
new file mode 100644
index 0000000..c482557
--- /dev/null
+++ b/Mec_discord/annales/tp2_parallelisation_codes/tp2_2_pi.c
@@ -0,0 +1,76 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <math.h>
+#include <omp.h>
+#define PI             "3.141592653589793238462"
+#define HYPERTHREADING 1      // 1 if hyperthreading is on, 0 otherwise
+#define ERROR          1.e-10 // Acceptable precision
+#define MAX_VAL        5      // Random values are [0, MAX_VAL]
+
+// Matrix and vector sizes (5120: UHD TV)
+#define N 51200000
+
+// Reference computation kernel (do not touch)
+void pi_reference(size_t nb_steps, double* pi) {
+  double term;
+  double sum = 0.;
+  double step = 1./(double)nb_steps;
+
+  for (size_t i = 0; i < nb_steps; i++) {
+    term = (i + 0.5) * step;
+    sum += 4. / (1. + term * term);
+  }
+
+  *pi = step * sum;
+}
+
+// Computation kernel (to parallelize)
+void pi_kernel(size_t nb_steps, double* pi) {
+  double term;
+  double sum = 0.;
+  double step = 1./(double)nb_steps;
+
+  #pragma omp parallel for private(term) reduction(+: sum)
+  for (size_t i = 0; i < nb_steps; i++) {
+    term = (i + 0.5) * step;
+    sum += 4. / (1. + term * term);
+  }
+
+
+  *pi = step * sum;
+  
+}
+
+int main() {
+  double pi, pi_ref;
+  double time_reference, time_kernel, speedup, efficiency; 
+    
+  time_reference = omp_get_wtime();
+  pi_reference(N, &pi_ref);
+  time_reference = omp_get_wtime() - time_reference;
+  printf("Reference time : %3.5lf s\n", time_reference);
+  
+  time_kernel = omp_get_wtime();
+  pi_kernel(N, &pi);
+  time_kernel = omp_get_wtime() - time_kernel;
+  printf("Kernel time -- : %3.5lf s\n", time_kernel);
+
+  speedup = time_reference / time_kernel;
+  efficiency = speedup / (omp_get_num_procs() / (1 + HYPERTHREADING));
+  printf("Speedup ------ : %3.5lf\n", speedup);
+  printf("Efficiency --- : %3.5lf\n", efficiency);
+
+  printf("\nPi (textbook)  : %s\n", PI);
+  printf("Pi reference - : %.22g\n", pi_ref);
+  printf("Pi parallel -- : %.22g\n\n", pi);
+
+  // Check if the result differs from the reference
+  if (fabs(pi_ref - pi) > ERROR) {
+    printf("Bad results :-(((\n");
+    exit(1);
+  }
+  printf("OK results :-)\n");
+  
+  return 0;
+}
diff --git a/Mec_discord/annales/tp2_parallelisation_codes/tp2_3_enumeration_sort.c b/Mec_discord/annales/tp2_parallelisation_codes/tp2_3_enumeration_sort.c
new file mode 100644
index 0000000..af2f8ff
--- /dev/null
+++ b/Mec_discord/annales/tp2_parallelisation_codes/tp2_3_enumeration_sort.c
@@ -0,0 +1,122 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <omp.h>
+#define HYPERTHREADING 1      // 1 if hyperthreading is on, 0 otherwise
+#define ERROR          1.e-20 // Acceptable precision
+#define MAX_VAL        5      // Random values are [0, MAX_VAL]
+
+// Matrix and vector sizes (5120: UHD TV)
+#define N 10240
+
+// Reference computation kernel (do not touch)
+void enumeration_sort_reference(double tab[N]) {
+  size_t i, j;
+  size_t* position = malloc(N * sizeof(size_t));
+  double* copy     = malloc(N * sizeof(size_t));
+
+  for (i = 0; i < N; i++) {
+    position[i] = 0;
+    copy[i] = tab[i];
+  }
+  
+  for (j = 0; j < N; j++) {
+    for (i = 0; i < N; i++) {
+      if ((tab[j] < tab[i]) || ((tab[i] == tab[j]) && (i < j))) {
+        position[i]++;
+      }
+    }
+  }
+
+  for (i = 0; i < N; i++)
+    tab[position[i]] = copy[i];
+
+  free(position);
+  free(copy);
+}
+
+// Computation kernel (to parallelize)
+void enumeration_sort_kernel(double tab[N]) {
+  size_t i, j;
+  size_t* position = malloc(N * sizeof(size_t));
+  double* copy     = malloc(N * sizeof(size_t));
+
+  for (i = 0; i < N; i++) {
+    position[i] = 0;
+    copy[i] = tab[i];
+  }
+  
+  #pragma omp parallel for private(j) 
+  for (i = 0; i < N; i++) {
+    for (j = 0; j < N; j++) {
+      if ((tab[j] < tab[i]) || ((tab[i] == tab[j]) && (i < j))) {
+        position[i]++;
+      }
+    }
+  }
+
+
+  for (i = 0; i < N; i++)
+    tab[position[i]] = copy[i];
+
+  free(position);
+  free(copy);
+}
+
+void print_sample(double tab[], size_t size, size_t sample_length) {
+  if (size <= 2 * sample_length) {
+    for (size_t i = 0; i < size; i++)
+      printf("%g ", tab[i]);
+  } else {
+    for (size_t i = 0; (i < size) && (i < sample_length); i++)
+      printf("%g ", tab[i]);
+    printf("... ");
+    for (size_t i = size - sample_length; i < size; i++)
+      printf("%g ", tab[i]);
+  }
+  printf("\n");
+}
+
+int main() {
+  double* a   = malloc(N * sizeof(double));
+  double* ref = malloc(N * sizeof(double));
+  double time_reference, time_kernel, speedup, efficiency; 
+    
+  // Initialization by random values
+  srand((unsigned int)time(NULL));
+  for (size_t i = 0; i < N; i++) {
+    a[i] = (float)rand()/(float)(RAND_MAX/MAX_VAL);
+    ref[i] = a[i];
+  }
+
+  time_reference = omp_get_wtime();
+  enumeration_sort_reference(ref);
+  time_reference = omp_get_wtime() - time_reference;
+  printf("Reference time : %3.5lf s\n", time_reference);
+  
+  time_kernel = omp_get_wtime();
+  enumeration_sort_kernel(a);
+  time_kernel = omp_get_wtime() - time_kernel;
+  printf("Kernel time -- : %3.5lf s\n", time_kernel);
+
+  speedup = time_reference / time_kernel;
+  efficiency = speedup / (omp_get_num_procs() / (1 + HYPERTHREADING));
+  printf("Speedup ------ : %3.5lf\n", speedup);
+  printf("Efficiency --- : %3.5lf\n", efficiency);
+
+  print_sample(ref, N, 5);
+  print_sample(a, N, 5);
+
+  // Check if the result differs from the reference
+  for (size_t i = 0; i < N; i++) {
+    if (ref[i] != a[i]) {
+      printf("Bad results :-(((\n");
+      exit(1);
+    }
+  }
+  printf("OK results :-)\n");
+  
+  free(a);
+  free(ref);
+  return 0;
+}
diff --git a/Mec_discord/annales/tp2_parallelisation_codes/tp2_4_bubble_sort.c b/Mec_discord/annales/tp2_parallelisation_codes/tp2_4_bubble_sort.c
new file mode 100644
index 0000000..2b84989
--- /dev/null
+++ b/Mec_discord/annales/tp2_parallelisation_codes/tp2_4_bubble_sort.c
@@ -0,0 +1,119 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <omp.h>
+#define HYPERTHREADING 1      // 1 if hyperthreading is on, 0 otherwise
+#define ERROR          1.e-20 // Acceptable precision
+#define MAX_VAL        500    // Random values are [0, MAX_VAL]
+
+// Matrix and vector sizes (5120: UHD TV)
+#define N 25600
+
+// Reference computation kernel (do not touch)
+void bubble_sort_reference(double tab[N]) {
+  size_t i, j;
+  double temp;
+
+  for (i = 0; i < N ; i++) {
+    for (j = 0; j < N - i - 1; j++) {
+      if (tab[j] > tab[j + 1]) {
+        temp = tab[j + 1];
+        tab[j + 1] = tab[j];
+        tab[j] = temp;
+      }
+    }
+  }
+}
+
+// Computation kernel (to parallelize)
+void bubble_sort_kernel(double tab[N]) {
+  size_t i, j;
+  size_t num = N;
+  double temp;
+
+
+  for(size_t phase = 0 ; phase <  num ; phase++)
+  {
+    if(phase% 2 == 0){
+      #pragma omp parallel for private(temp)
+      for(i = 0 ; i < N-1 ; i +=2)
+      {
+        if (tab[i]>tab[i+1])
+        {
+          temp = tab[i] ; 
+          tab[i] = tab[i+1]; 
+          tab[i+1] = temp ; 
+        }
+      }
+    }
+    else 
+    {
+      #pragma omp parallel for private(temp)
+      for(i = 1 ; i < N-1 ; i+=2)
+      {
+        if(tab[i]> tab[i+1])
+        {
+          temp = tab[i] ; 
+          tab[i] = tab[i+1]; 
+          tab[i+1] = temp ; 
+        }
+      }
+    }
+  }
+}
+
+void print_sample(double tab[], size_t size, size_t sample_length) {
+  if (size <= 2 * sample_length) {
+    for (size_t i = 0; i < size; i++)
+      printf("%g ", tab[i]);
+  } else {
+    for (size_t i = 0; (i < size) && (i < sample_length); i++)
+      printf("%g ", tab[i]);
+    printf("... ");
+    for (size_t i = size - sample_length; i < size; i++)
+      printf("%g ", tab[i]);
+  }
+  printf("\n");
+}
+
+int main() {
+  double* a   = malloc(N * sizeof(double));
+  double* ref = malloc(N * sizeof(double));
+  double time_reference, time_kernel, speedup, efficiency;
+
+  // Initialization by random values
+  srand((unsigned int)time(NULL));
+  for (size_t i = 0; i < N; i++)
+    ref[i] = a[i] = (float)rand()/(float)(RAND_MAX/MAX_VAL);
+
+  time_reference = omp_get_wtime();
+  bubble_sort_reference(ref);
+  time_reference = omp_get_wtime() - time_reference;
+  printf("Reference time : %3.5lf s\n", time_reference);
+
+  time_kernel = omp_get_wtime();
+  bubble_sort_kernel(a);
+  time_kernel = omp_get_wtime() - time_kernel;
+  printf("Kernel time -- : %3.5lf s\n", time_kernel);
+
+  speedup = time_reference / time_kernel;
+  efficiency = speedup / (omp_get_num_procs() / (1 + HYPERTHREADING));
+  printf("Speedup ------ : %3.5lf\n", speedup);
+  printf("Efficiency --- : %3.5lf\n", efficiency);
+
+  print_sample(ref, N, 5);
+  print_sample(a, N, 5);
+
+  // Check if the result differs from the reference
+  for (size_t i = 0; i < N; i++) {
+    if (ref[i] != a[i]) {
+      printf("bad results :-(((\n");
+      exit(1);
+    }
+  }
+  printf("OK results :-)\n");
+
+  free(a);
+  free(ref);
+  return 0;
+}
diff --git a/Mec_discord/annales/tp3_synchronisation_et_taches_codes/._tp3_1_nb_threads.c b/Mec_discord/annales/tp3_synchronisation_et_taches_codes/._tp3_1_nb_threads.c
new file mode 100644
index 0000000000000000000000000000000000000000..d71db6817efc9667509656b701e8b0da43744119
GIT binary patch
literal 176
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aUBqY_#1$j2;dkJ5(HHS(y;)D1)zKw
y#Rz090AirHRC0c<USdH(PO4r`VsS}nacW9RVo9oUKrmRbi&`9r*2|o$2ciK)WfS87

literal 0
HcmV?d00001

diff --git a/Mec_discord/annales/tp3_synchronisation_et_taches_codes/._tp3_4_fibonacci.c b/Mec_discord/annales/tp3_synchronisation_et_taches_codes/._tp3_4_fibonacci.c
new file mode 100644
index 0000000000000000000000000000000000000000..cbfc5527e8b5573558be607feaf00b95c3df8799
GIT binary patch
literal 176
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aUBqY_#1$j2;dkJ5(HHS(y;)D1)zKw
z#Rz090AirHRC0c<USdH(PO4r`VsS}nacW9RVo9oUKrl%0Mt8M15UqD*g&Bwj08;rC
A6#xJL

literal 0
HcmV?d00001

diff --git a/Mec_discord/annales/tp3_synchronisation_et_taches_codes/ex1 b/Mec_discord/annales/tp3_synchronisation_et_taches_codes/ex1
new file mode 100644
index 0000000000000000000000000000000000000000..1a704398cf343e9a324bab54c64d14a8d310564e
GIT binary patch
literal 17128
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
F{tdt*>@ffU

literal 0
HcmV?d00001

diff --git a/Mec_discord/annales/tp3_synchronisation_et_taches_codes/ex2 b/Mec_discord/annales/tp3_synchronisation_et_taches_codes/ex2
new file mode 100644
index 0000000000000000000000000000000000000000..b1dd4f3b9aab764071e442ac24c43ab374666ecb
GIT binary patch
literal 17816
zcmeHP4{#jSd4JML_TfJ#8QY041ut+eGN3~;wj%+q?_^2d3uj|&*^pvbpLHkchSQyL
zw})lIP!nOAix731KPCMWV5U<#)9I8jv;~raj4Ytd(6O1OxJ@WdfaDYmk%a*jV_$#Y
z+xM;Z)^|)N)0s}EdYZlOeZTj8-}~P8-oD*^yHCH@8R@F7suG+$;&%jbQ%fx*s0xm6
zP#KV*Xcdd`yHZ>#=7Fz~m{lIM2uiJVyt<Tn7488gy#~sZp}%Fpf+>4Ql=Ld4-~y|J
zsi?Pj(yOJc;@vc-9AnDmc6}NtBWd#2rn>T<sZ)<))7oUox2pIt<+z+s@nJn;Nl#aL
zy3%7RSYA<%C&h%0R^^YIYAB<m$zLJddbcS(H|<dJOsNh^JKiy4ze#=Dl-_Agnh|aq
zvtYrL>$?Sd6qo;Q;%?r~epcv*S5zFCQh!srHksJFe(kl%SW_~Q$_+IQwXSbkzc!Ff
z2iC}P@{8)AF|~Q?PU@C1!c-V#Uo2BRmA`V)FOF>-x;1_Km2a*8!-nrY`kiZ@yN_*9
zog_nv^tp?Pr##sq8LR#GBWGbmkH!CafM})kB`984rf_uy+y_~$jQr9H^8Ju4XTPC>
z{EiCpn=8m)1$hmJJG~8{T)j_Mz+bC?w^XS2?h5iWRhFyQR{?K>9Sw&&{RMz>c7DGC
z-U|DdyNwW!aoU$27^IQeB8+hN79$qV#QPFiGoI<*vMHHP#k-?>lW}1feFN!~ku{?k
z(=aU2vVxm$-m=X|rqhE)JQXui>3z|JDNu#c7dMT4W?~>Nq)0kLHN{BE0;CS3sK-q7
zSk+m@gV9VhnT#hZ3#Z~kvo)o11IAz`-IFb?P5Mu*?x7~HN3#YqiImxE^z`2);zMwC
zFlS}~L$K#ALXF;NB1vdZe>5Wo;6u6x<vl}Dqc@R?CKLBiaLA$x&OkJg61|zYYUkQO
zv*khyG8CIN1VqB^n~=LMu-4Ac=GFw(p=+w;*;|csx(4$EoyoQMn}=Mjm@j#+!s-03
z!C}oQ+dz+A@!Oalyy8xPG|vS6#LpA`ia**&e68r?@>Rrp#2^_#szUx_P@V_PixL+I
z)H<Z(mn9O5>5B1y;&Usgyjnc0^!Yl)*NLMv2_Xg5^@#C93ik$Ov3*@({`f`<r@4#g
zMnX<FaJEHw!GXgeJ54$8B{nL=j00D$$kIIupASwoN#gwu+&Rw<I&cKiPD2h{-an|4
z0}kAIUHX~>r@A>Ea^UI~MHW5cz!$PG=wl9ikpurr2aXQ3(~}OI=5S8WIPf|KLB||8
zj}a<<#eqBLr=t#B-5NTq&1L5zFc*Qj2+T#`|5^k-sJrwNefXqTAF2JfYw_55aLlYO
z9@U4Bc*kW^itDZdJY8IMHAvk`LGpCZFQzAdRxB0|NuDmS)04++o-VA@lZS1dF8tGz
z-?w?Xz)nv-Zu4|uou2%L&C>;Sdh&jorwi%y<d<!pZWyK~qc%@B3e%If*gRcerzb-;
zPZ!qd$rhWZ3+nXbWj0S2(&@=1HcuDO>B%bQ(fU^d)cOt~+Yf$~i@(IhFL&{aU3{&J
zKigDl|3er5o{N9S#lPX=f9&F4b@3A}{vTZY-#YnF_s$m%te7WuV4yU|^pToXjR=sQ
z@9;Oaj1}%dm}GG{f21$~M$b<aYKe}T{)R~YmlJ1})c6a-7zBm)&k?-t+lz&mIJ0|^
z{{<R3&(P1rOygk)M*QAF7`lZcQquHmdj8jzffvcZUt0#!mVp|l0a?pp=uVuehZ+3V
z_$NNN^C+~J`K3Jxq5254^W(F17hZ=|6fX1Uk5A0pI(E3Q5>gu>C1t9PADfvtbJdvT
z=eu`~6`mk3M$o$FXyl@ag>S<-LNtlMXW3qTq#F%r>-IO~`dY^HgRhxO^^wSg2)8Xd
zlG~^k$Mm)rbMNV+8%|<G77m{+7RlCkLCL~5h>jr0G5tC#<hd{4#B6REyZw&P?s2FU
zN$u+plYSO78JrE@C)Bjj1wac2!P?`u<-KtJ*qwU*=lby5Q`@>DqqVzmM(U%B-=tQI
zZty~*xctSdg*bf(>?AV!XzkC5w9S~yF;#qz@|Y?vD4wWWc>pmG<BCH5St-BnDI%-S
z>G>)B@cSF}!!sVe>LvZyIdd5d<dgw#@kFomi}h(fIk16>MegdI`tXMBl-2X^n2Yq0
z4ZFY;5}%?$F}V0r?H2G=cR<&!pY$j9p-}lleCXEDu4ie^2<Oj*c80p2qxtFi#~!Q_
zJ84Ka>Lb^_fR>BMXwqLF8IAe9Tk?}z@+V4$dIN^~o2dDLv0S9kg$#8~gWWZC2mgfp
z96r)WofEnvbZ5vQzry*g^`V!#8c;M|9d3Jb-=&fK`_#)<NL%L9`p9m-H!^aszh1_H
zWUIn2ch!?a&(e=Re8zKkW8KOJkf%r-Z+T7s_>?|;xS9skqk7wq_Wg=#vEo?x!I@$)
zJksUW^SdWR;XUGtUEX&O6uydVubi*L`I&J3R7>%BGT+-9VB2*ogIwh~k9ocH2i-SY
zU)!ndN>rNrl|KAZwSND(#}UHZtKodxI4W2E!Ka^v^J{0MNbzNsdg9&V_W0Y;@{fA{
z1DGu{o#^>r==mG{7)I?hnqThlQ^yI)$j6kI5Oh)KLR%>QXr;$>ip--^<o5BxH$R~<
zAm{7Qt@>!qg`r*4_u>3$bb9`byymq{)eZlEthY_0o#FhC_54}AuIt6f=(+-`jf~#-
zGL7;p9Wl~JcH)HpNS<&wrH3cHh3}%KNZZ-m+n6-|4r;2ba6jSs6Oq-0aNCi)*XX0y
zjBg$Fzom~}G6E?+Utmwq|A*6F7<%Ehldv~@#QOqW%Vvkv<U{|7UYzZ+L;Asw%-18M
z{*U$1rnNAuk1W;m@7w0ay@gMp5pMfw?wxo4#*Rm1bi)m+gb3{l=l?adGo1f0)E&xy
zx)V080lXu!`Ygq#@aD$|^Wn1|b7jj<l)sVuGzM@-{+FTRvNtiNtMs-vXgnP8&N?~n
zaFEWwaWsLbj5#EUpG$KQn2W$%1m+?z7lFA5{O?7e3TytW?#XE)5C~{ud%PE~bW%NW
zjb8I;*K4b;3#?1_YS{(irg$b5Pg;0WQ%TW|!FW8D8`PR)vWpgo&feZcPXhM#Q<<aS
z=9{!kJey0JS?&6!)ztd-Xv~Hh_hr(lJ`FE`_Qo?>x>v&+9(ZH%+0{^KY;05^E72>F
z(_(2Yl{U4WbOv<|rc*K2th(59!yf1_#Bt59i^XpdohlZ82zn#vzYu>4JRVFxoh}yd
z1%L8`V(}#Cr>BcWdKY)^hq$=|Jqb$hTt5A%SUe4y#4Xc}c)s9w5monW7ga;`RTnRs
z?>&Ta!s(laA=t%=iVz+1<$bLm*|j(hy<aTK7Z$$yE?>hJ>lW_w9uON>Tz}Pd{>w?6
z^mpUvhu_Y1d%{f|dw@@Ya?+7`2*(WSqj!{|%UAyg)$P89hdp2PX`?mmzQ%`YZ}K%i
zI4|UD9iHFe+f%)Dfv+{>YYzDu+kF}&+kN%zK5xfD`7Y@=O#BeB_zEZ`4F|=g5pfv+
z6`j8N;p&@w!RlQLeDxupH?&ZY5A~?qgv?^w2Q=?t4{A_8bl5&@hVq}ohpzK{xMiV?
z(QeqF_WwxPdZ;?&Yk1Jp<<o|1I(*waU#(i;(>D1ULeg<KfYgEGTO^PEiW4B?5GEfw
z$%jsggY-eCIKYQgxhTjO{1kQ?VTT_6=h9pR<{~f`fw>6GMPM!ha}k(}!2gd3@b^&s
z{S)0<QgT!J28+@ni`XAz;pLJ{{S6kqNb&sL)y0a(lCDfE6y@))=ox|%mw$M!m?r))
zTGL13d($zM;ct{)QRVy%(jO~_<xMj5lsjU%v@-jn)P%0S1EN<bl<0djO7#3eiNAUJ
zyv2&+%0b2(6wiK-DLMYui|fBs;Vg#*f7w1%Cn3BXko?z_VZ8B?Jo|;mILZI6D#s$Y
z<hdQn{QnrSzt47AY*r6xK}EMIx<}DLMGq)?NYTd>eNxdeMUN_aLeVKjh59J2-uZEy
z%a_k$y+NyV^QKMLYmGbi=2B)(YYX7p$EKE?<XY}q(;R4C8(6d2!avKJRp!Cj&`>7e
z9;`X=_vub69(*Cl-=CM_HR9f~c53bMUMfFN@Hj8U=L<d`N^!5?aZ-w3Ab5P0;tK?i
z<5GN~J>E-koc-KSjsg#MQD|jxpU}$mqes+<=CXLb(3~IZsX9Cu6g<B;szsC`tT_=Y
z?-5Jw@9~|b9-Q5`UFJkse!1ZJ%310WpR>OcEyX`C%AF@3%sM=;l*(gP3_1}j?-46R
zeOa7m%~>6qo@&IY;w)n2DD2hfloM*=l4~QtuEbGJevOjXc%lPOX)O-2v(1HXRybcD
zNS4waII0}}lYf+wII7CT?VG^KK3{K0meQj*sxV8t<NrMHa{gCp*Q?UbGSP7bGLBTq
z4vCbr{}ZXZ{JegrwV^6;e!qXH<lX*zWkAj!hZh6KY;xW>c^wmeHC<g@=aKbYf4$hF
zE+~9G48cyBQ$_5kfYbF&lfIVzT!DHuasK$E@2Sh#{|@ka$h*hwpH+~*f$-|{&)=sj
z$R7p1q<X2CaXI@|1^H_DU(V0VfRmphSlZqI@N)LsfxD`dinjnSXFnzFTqO8<!?k>c
zaMDo5YE;43E7*Ce0{*JR>&2A10f{R+Z&Z-q0K6XOV?$60Dsm;;Q6D>BtMF4w-rbL9
zE7+&&--W0_Q^AmHmauh+#7pZW?h8u(#OJIsxn7EFhr$OHF4tOt-%`O&5AY?`=a09v
z#Lpim^m$gf{(S_vX1P-G`xNkU{rgW6NBq?dB(D?yJMha(ELhA(73>Ie@H%4+?d=$d
zX9GP#W{kV!ONf9$yHR>m*oM)QF|%e4-y8IZ*=;X|IbihA#uwTK5=$F>$@Jc6(ukSq
zOxB3zhC~nalW{X13$!+`$F7-jLbNv|VMH^T=zi>QF*EzIBP2QyH)6Sgf&EZ%a0VpJ
z647*TZ!#T?v1^9WwLP?@)9BpVK|60s<zvF=_|n$Umhh(15^JN2VPI#N(Wxs7ddGHQ
zY>wRA9*P(@cXjRP>^8bX?U7EhDtEB-WOLGUxql@X<ZUXnAw}(gDFr`k#}I9#aY@Hx
zQ8QY)87LU!Ju&V*H?z8H;hu_#ad#BGP`YPmcApVc$QtdmId4nOtT}28It{L<{YA6Z
zdvmEC%e-s9Q^}Sk8QYS&V%fCOA5Fz*qg422n2jY;MlKuwjIB+yTghRA#w6{KviB`n
zfpIj2`i6#z+Joe7&)#fSHK)W^1jkW}+?(Xw^E7LPwj$v)Nts4AO5?laoRM3jW@W7i
zVt<%DCLP^lm}<iqV-!>dX@^<mZDYL0OL<INr>rwK!*3SRan7Arr7p>aSKLOXj8a5J
zAiIA6Zi1Q_i}rI45r}67MF21V;(@+YE`VKRgYk^H-vRB-C9t(K5mQj8J=|nQ`-Bwl
zk7oNtAhth+DlBSdtdhIqnQS7RDq#$iW#Y*wDX83F(i8#N(E(%weQB_i$;Nv`z@$BH
z0h(MOotCFlAl|R0ll~a2F=yGZ<`qkW^QbC1kbp5u9Ro)MFsBV*o+>lN{zeepN#oW5
z_f}S->lh`by#8RJmMrIqUV(!iy;;9i=`+<(=1lyY&)9loocgyZeWvuj)S38xfw3?$
zPJMoUWU8^CqHg_Lf#a2Kn*HZ>6{cK2udBHIk3yf;R9K&%N14u0aFNJI%CbJMe<XlW
zlUbjiTbc5@4Mb#8=9m><Mvm4*Sf8J7nO>zN*?*Q}dLPPZjfHuB4rY2t>2r+Pe+7$C
zWGJSr&(F(D$CMz~&-&c{KT`VbO76H4V9M)Gq)$3-{l|e(OxQkd!K|dH`$^H=|9|Sz
z*OVSpX<V5k;xaFuaO<n*c7CpBc{ag3(<fc}{M^rUiWL=QJ*LmP^!fgiX{Q|+%K+=K
z*%w^;ypF(>*DqP#9lr^s&;2hnC8_9X#WLakW8Qi$ogF`?Sx?az3o7capPoml|G9o%
zzhF8=g^uK|{~eV1aHwg=e$M9q=iruSp6My*);aWf-8R?+5Q*h1ZkA{KEDETLxPD$Y
z;r|Q44Wsjq66<k4{uMB4qOGsiZFTh^^9(6D66-Ua2W6+e2rA)bi*h||g7uhR1ZBdw
zetur6SNd*ws>_*{sQQ(-UBvoV+lZB6eJAC<cZvp;!P}Grm!Pl(2m8bG53NVD?@s+k
dS}ks+Yrt{6EK8?*IsL!C(UMr<QgE^2zW}rN$E*MV

literal 0
HcmV?d00001

diff --git a/Mec_discord/annales/tp3_synchronisation_et_taches_codes/ex3 b/Mec_discord/annales/tp3_synchronisation_et_taches_codes/ex3
new file mode 100644
index 0000000000000000000000000000000000000000..9f653c98f068353bfaeb3cf2b4a5378815eb8ed9
GIT binary patch
literal 17936
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

literal 0
HcmV?d00001

diff --git a/Mec_discord/annales/tp3_synchronisation_et_taches_codes/ex4 b/Mec_discord/annales/tp3_synchronisation_et_taches_codes/ex4
new file mode 100644
index 0000000000000000000000000000000000000000..424a1e8385cb567102f9ae0bf52213adaeb5db54
GIT binary patch
literal 17792
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

literal 0
HcmV?d00001

diff --git a/Mec_discord/annales/tp3_synchronisation_et_taches_codes/mandel.c b/Mec_discord/annales/tp3_synchronisation_et_taches_codes/mandel.c
new file mode 100644
index 0000000..cded68a
--- /dev/null
+++ b/Mec_discord/annales/tp3_synchronisation_et_taches_codes/mandel.c
@@ -0,0 +1,227 @@
+/*
+ * @UFR@
+ * @MODULE@
+ * Université Pierre et Marie Curie
+ * Calcul de l'ensemble de Mandelbrot, Version séquentielle
+ * compilation, exécution : voir fichier Makefile
+ *
+ * $Id: mandel.c,v 1.3 2004/03/02 22:04:59 bereziat Exp $
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <time.h>	/* chronometrage */
+
+#include "rasterfile.h"
+
+
+char info[] = "\
+Usage:\n\
+      mandel dimx dimy xmin ymin xmax ymax prof\n\
+\n\
+      dimx,dimy : dimensions de l'image a generer\n\
+      xmin,ymin,xmax,ymax : domaine a calculer dans le plan complexe\n\
+      prof : nombre maximale d'iteration\n\
+\n\
+Quelques exemples d'execution\n\
+      mandel 800 800 0.35 0.355 0.353 0.358 200\n\
+      mandel 800 800 -0.736 -0.184 -0.735 -0.183 500\n\
+      mandel 800 800 -0.736 -0.184 -0.735 -0.183 300\n\
+      mandel 800 800 -1.48478 0.00006 -1.48440 0.00044 100\n\
+      mandel 800 800 -1.5 -0.1 -1.3 0.1 10000\n\
+";
+
+
+/**
+ * Convertion entier (4 octets) LINUX en un entier SUN
+ * @param i entier à convertir
+ * @return entier converti
+ */
+
+int swap(int i) {
+  int init = i; 
+  int conv;
+  unsigned char *o, *d;
+	  
+  o = ( (unsigned char *) &init) + 3; 
+  d = (unsigned char *) &conv;
+  
+  *d++ = *o--;
+  *d++ = *o--;
+  *d++ = *o--;
+  *d++ = *o--;
+  
+  return conv;
+}
+
+/**
+ *  Sauvegarde le tableau de données au format rasterfile
+ *  8 bits avec une palette de 256 niveaux de gris du blanc (valeur 0)
+ *  vers le noir (255)
+ *    @param nom Nom de l'image
+ *    @param largeur largeur de l'image
+ *    @param hauteur hauteur de l'image
+ *    @param p pointeur vers tampon contenant l'image
+ */
+
+void sauver_rasterfile( char *nom, int largeur, int hauteur, unsigned char *p) {
+  FILE *fd;
+  struct rasterfile ras;
+  int i;
+  unsigned char o;
+
+  if ( (fd=fopen(nom, "w")) == NULL ) {
+	printf("erreur dans la creation du fichier %s \n",nom);
+	exit(1);
+  }
+
+  ras.ras_magic  = swap(RAS_MAGIC);	
+  ras.ras_width  = swap(largeur);	  /* largeur en pixels de l'image */
+  ras.ras_height = swap(hauteur);         /* hauteur en pixels de l'image */
+  ras.ras_depth  = swap(8);	          /* profondeur de chaque pixel (1, 8 ou 24 )   */
+  ras.ras_length = swap(largeur*hauteur); /* taille de l'image en nb de bytes		*/
+  ras.ras_type    = swap(RT_STANDARD);	  /* type de fichier */
+  ras.ras_maptype = swap(RMT_EQUAL_RGB);
+  ras.ras_maplength = swap(256*3);
+
+  fwrite(&ras, sizeof(struct rasterfile), 1, fd); 
+  
+  /* Palette de couleurs : composante rouge */
+  i = 256;
+  while( i--) {
+	o= i/2;
+	fwrite( &o, sizeof(unsigned char), 1, fd);
+  }
+
+  /* Palette de couleurs : composante verte */
+  i = 256;
+  while( i--) {
+	o=(i%190);
+	fwrite( &o, sizeof(unsigned char), 1, fd);
+  }
+
+  /* Palette de couleurs : composante bleu */
+  i = 256;
+  while( i--) {
+	unsigned char o=(i%120) * 2;
+	fwrite( &o, sizeof(unsigned char), 1, fd);
+  }
+
+  fwrite( p, largeur*hauteur, sizeof(unsigned char), fd);
+  fclose( fd);
+}
+
+/**
+ * Étant donnée les coordonnées d'un point \f$c=a+ib\f$ dans le plan
+ * complexe, la fonction retourne la couleur correspondante estimant
+ * à quelle distance de l'ensemble de mandelbrot le point est.
+ * Soit la suite complexe défini par:
+ * \f[
+ * \left\{\begin{array}{l}
+ * z_0 = 0 \\
+ * z_{n+1} = z_n^2 - c
+ * \end{array}\right.
+ * \f]
+ * le nombre d'itérations que la suite met pour diverger est le
+ * nombre \f$ n \f$ pour lequel \f$ |z_n| > 2 \f$. 
+ * Ce nombre est ramené à une valeur entre 0 et 255 correspond ainsi a 
+ * une couleur dans la palette des couleurs.
+ */
+
+unsigned char xy2color(double a, double b, int prof) {
+  double x, y, temp, x2, y2;
+  int i;
+
+  x = y = 0.;
+  for( i=0; i<prof; i++) {
+    /* garder la valeur précédente de x qui va etre ecrase */
+    temp = x;
+    /* nouvelles valeurs de x et y */
+    x2 = x*x;
+    y2 = y*y;
+    x = x2 - y2 + a;
+    y = 2*temp*y + b;
+    if( x2 + y2 >= 4.0) break;
+  }
+  //  return i*255/prof;
+  return (i==prof)?255:(int)((i%255)); 
+}
+
+/* 
+ * Partie principale: en chaque point de la grille, appliquer xy2color
+ */
+
+int main(int argc, char *argv[]) {
+  /* Domaine de calcul dans le plan complexe */
+  double xmin, ymin;
+  double xmax, ymax;
+  /* Dimension de l'image */
+  int w,h;
+  /* Pas d'incrementation */
+  double xinc, yinc;
+  /* Profondeur d'iteration */
+  int prof;
+  /* Image resultat */
+  unsigned char	*grid, *pgrid;
+  /* Variables intermediaires */
+  int  i, j;
+  double x, y;
+  /* Chronometrage */
+  clock_t debut, fin;
+
+  /* debut du chronometrage */
+  debut = clock();
+
+  if( argc == 1) fprintf( stderr, "%s\n", info);
+  
+  /* Valeurs par defaut de la fractale */
+  xmin = -2; ymin = -2;
+  xmax =  2; ymax =  2;
+  w = h = 800;
+  prof = 200;
+  
+  /* Recuperation des parametres */
+  if( argc > 1) w    = atoi(argv[1]);
+  if( argc > 2) h    = atoi(argv[2]);
+  if( argc > 3) xmin = atof(argv[3]);
+  if( argc > 4) ymin = atof(argv[4]);
+  if( argc > 5) xmax = atof(argv[5]);
+  if( argc > 6) ymax = atof(argv[6]);
+  if( argc > 7) prof = atoi(argv[7]);
+
+  /* Calcul des pas d'incrementation */
+  xinc = (xmax - xmin) / (w-1);
+  yinc = (ymax - ymin) / (h-1);
+  
+  /* affichage parametres pour verificatrion */
+  fprintf( stderr, "Domaine: {[%lg,%lg]x[%lg,%lg]}\n", xmin, ymin, xmax, ymax);
+  fprintf( stderr, "Increment : %lg %lg\n", xinc, yinc);
+  fprintf( stderr, "Prof: %d\n",  prof);
+  fprintf( stderr, "Dim image: %dx%d\n", w, h);
+  
+  /* Allocation memoire du tableau resultat */  
+  pgrid = grid = (unsigned char *)malloc( w*h*sizeof(unsigned char));
+  
+  if( grid == NULL) {
+    fprintf( stderr, "Erreur allocation mémoire du tableau \n");
+    return 0;
+  }
+  
+  /* Traitement de la grille point par point */
+  for ( y = ymin, i = 0; i < h; y += yinc, i++) {	
+    for ( x = xmin, j = 0; j < w; x += xinc, j++) {
+      *pgrid++ = xy2color( x, y, prof); 
+    }
+  }
+  
+  /* Sauvegarde de la grille dans le fichier resultat "mandel.ras" */
+  sauver_rasterfile( "mandel.ras", w, h, grid);
+  
+  /* fin du chronometrage */
+  fin = clock();
+  fprintf( stderr, "Temps total de calcul : %g sec\n", 
+	   (double) (fin - debut) / CLOCKS_PER_SEC);
+  fprintf( stdout, "%g\n", (double) (fin - debut) / CLOCKS_PER_SEC);
+
+  return 0;
+}
diff --git a/Mec_discord/annales/tp3_synchronisation_et_taches_codes/rasterfile.h b/Mec_discord/annales/tp3_synchronisation_et_taches_codes/rasterfile.h
new file mode 100644
index 0000000..184f827
--- /dev/null
+++ b/Mec_discord/annales/tp3_synchronisation_et_taches_codes/rasterfile.h
@@ -0,0 +1,50 @@
+/*	@(#)rasterfile.h 1.11 89/08/21 SMI	*/
+
+/*
+ * Description of header for files containing raster images
+ */
+
+#ifndef _rasterfile_h
+#define _rasterfile_h
+
+struct rasterfile {
+	int	ras_magic;		/* magic number */
+	int	ras_width;		/* width (pixels) of image */
+	int	ras_height;		/* height (pixels) of image */
+	int	ras_depth;		/* depth (1, 8, or 24 bits) of pixel */
+	int	ras_length;		/* length (bytes) of image */
+	int	ras_type;		/* type of file; see RT_* below */
+	int	ras_maptype;		/* type of colormap; see RMT_* below */
+	int	ras_maplength;		/* length (bytes) of following map */
+	/* color map follows for ras_maplength bytes, followed by image */
+};
+#define	RAS_MAGIC	0x59a66a95
+
+	/* Sun supported ras_type's */
+#define RT_OLD		0	/* Raw pixrect image in 68000 byte order */
+#define RT_STANDARD	1	/* Raw pixrect image in 68000 byte order */
+#define RT_BYTE_ENCODED	2	/* Run-length compression of bytes */
+#define RT_FORMAT_RGB	3	/* XRGB or RGB instead of XBGR or BGR */
+#define RT_FORMAT_TIFF	4	/* tiff <-> standard rasterfile */
+#define RT_FORMAT_IFF	5	/* iff (TAAC format) <-> standard rasterfile */
+#define RT_EXPERIMENTAL 0xffff	/* Reserved for testing */
+
+	/* Sun registered ras_maptype's */
+#define RMT_RAW		2
+	/* Sun supported ras_maptype's */
+#define RMT_NONE	0	/* ras_maplength is expected to be 0 */
+#define RMT_EQUAL_RGB	1	/* red[ras_maplength/3],green[],blue[] */
+
+/*
+ * NOTES:
+ * 	Each line of the image is rounded out to a multiple of 16 bits.
+ *   This corresponds to the rounding convention used by the memory pixrect
+ *   package (/usr/include/pixrect/memvar.h) of the SunWindows system.
+ *	The ras_encoding field (always set to 0 by Sun's supported software)
+ *   was renamed to ras_length in release 2.0.  As a result, rasterfiles
+ *   of type 0 generated by the old software claim to have 0 length; for
+ *   compatibility, code reading rasterfiles must be prepared to compute the
+ *   true length from the width, height, and depth fields.
+ */
+
+#endif /*!_rasterfile_h*/
diff --git a/Mec_discord/annales/tp3_synchronisation_et_taches_codes/tp3_1_nb_threads.c b/Mec_discord/annales/tp3_synchronisation_et_taches_codes/tp3_1_nb_threads.c
new file mode 100644
index 0000000..961ccc7
--- /dev/null
+++ b/Mec_discord/annales/tp3_synchronisation_et_taches_codes/tp3_1_nb_threads.c
@@ -0,0 +1,16 @@
+#include <stdio.h>
+
+void nb_thread_kernel() {
+  size_t nb_threads = 0;
+  #pragma omp parallel
+  {
+    #pragma omp critical
+    nb_threads++;
+  }
+  printf("nb_threads = %zu\n", nb_threads);
+}
+
+int main() {
+  nb_thread_kernel();
+  return 0;
+}
diff --git a/Mec_discord/annales/tp3_synchronisation_et_taches_codes/tp3_2_primes.c b/Mec_discord/annales/tp3_synchronisation_et_taches_codes/tp3_2_primes.c
new file mode 100644
index 0000000..b7d2608
--- /dev/null
+++ b/Mec_discord/annales/tp3_synchronisation_et_taches_codes/tp3_2_primes.c
@@ -0,0 +1,123 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <unistd.h>
+#include <stdbool.h>
+#include <omp.h>
+#define HYPERTHREADING 1      // 1 if hyperthreading is on, 0 otherwise
+#define ERROR          1.e-20 // Acceptable precision
+#define MAX_VAL        5      // Random values are [0, MAX_VAL]
+
+#define PRIME_MIN  3
+#define PRIME_MAX  100000
+
+// Reference computation kernel (do not touch)
+void prime_reference(size_t primes[], size_t* ptr_nb_primes) {
+  size_t nb_primes = 0;
+  size_t divisor;
+  bool is_prime;
+
+  for (size_t i = PRIME_MIN; i < PRIME_MAX; i+=2) {
+    is_prime = true;
+    divisor = PRIME_MIN;
+
+    while ((divisor < i) && is_prime) {
+      if ((i % divisor) == 0)
+        is_prime = false;
+      divisor += 2;
+    }
+
+    if (is_prime) {
+      primes[nb_primes] = i;
+      nb_primes++;
+    }
+  }
+
+  *ptr_nb_primes = nb_primes;
+}
+
+// Computation kernel (to parallelize)
+void prime_kernel(size_t primes[], size_t* ptr_nb_primes) {
+  size_t nb_primes = 0;
+  size_t divisor;
+  bool is_prime;
+
+   #pragma omp parallel for schedule(dynamic) ordered private(divisor,is_prime)
+  for (size_t i = PRIME_MIN; i < PRIME_MAX; i+=2) {
+    is_prime = true;
+    divisor = PRIME_MIN;
+
+    while ((divisor < i) && is_prime) {
+     
+        if ((i % divisor) == 0)
+          is_prime = false;
+        divisor += 2;
+      
+    }
+
+    if (is_prime) {
+      #pragma omp ordered
+      primes[nb_primes] = i;
+      nb_primes++;  
+    }
+  }
+
+  *ptr_nb_primes = nb_primes;
+}
+
+void print_sample(size_t tab[], size_t size, size_t sample_length) {
+  if (size <= 2 * sample_length) {
+    for (size_t i = 0; i < size; i++)
+      printf("%zu ", tab[i]);
+  } else {
+    for (size_t i = 0; (i < size) && (i < sample_length); i++)
+      printf("%zu ", tab[i]);
+    printf("... ");
+    for (size_t i = size - sample_length; i < size; i++)
+      printf("%zu ", tab[i]);
+  }
+  printf("\n");
+}
+
+int main() {
+  size_t* primes_ref = malloc(PRIME_MAX/2 * sizeof(size_t));
+  size_t* primes     = malloc(PRIME_MAX/2 * sizeof(size_t));
+  size_t  nb_primes_ref; 
+  size_t  nb_primes; 
+  double time_reference, time_kernel, speedup, efficiency; 
+    
+  time_reference = omp_get_wtime();
+  prime_reference(primes_ref, &nb_primes_ref);
+  time_reference = omp_get_wtime() - time_reference;
+  printf("Reference time : %3.5lf s\n", time_reference);
+  
+  time_kernel = omp_get_wtime();
+  prime_kernel(primes, &nb_primes);
+  time_kernel = omp_get_wtime() - time_kernel;
+  printf("Kernel time -- : %3.5lf s\n", time_kernel);
+
+  speedup = time_reference / time_kernel;
+  efficiency = speedup / (omp_get_num_procs() / (1 + HYPERTHREADING));
+  printf("Speedup ------ : %3.5lf\n", speedup);
+  printf("Efficiency --- : %3.5lf\n", efficiency);
+
+  print_sample(primes_ref, nb_primes_ref, 5);
+  print_sample(primes, nb_primes, 5);
+
+  // Check if the result differs from the reference
+  if (nb_primes_ref != nb_primes) {
+    printf("Bad results (wrong number of prime numbers) :-(((\n");
+    exit(1);
+  }
+  for (size_t i = 0; i < nb_primes; i++) {
+    if (primes_ref[i] != primes[i]) {
+      printf("Bad results (prime numbers do not correspond) :-(((\n");
+      exit(1);
+    }
+  }
+  printf("OK results :-)\n");
+  
+  free(primes_ref);
+  free(primes);
+  return 0;
+}
diff --git a/Mec_discord/annales/tp3_synchronisation_et_taches_codes/tp3_3_dag.c b/Mec_discord/annales/tp3_synchronisation_et_taches_codes/tp3_3_dag.c
new file mode 100644
index 0000000..fe0444b
--- /dev/null
+++ b/Mec_discord/annales/tp3_synchronisation_et_taches_codes/tp3_3_dag.c
@@ -0,0 +1,109 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <time.h>
+#include <omp.h>
+#define HYPERTHREADING 1 // 1 if hyperthreading is on, 0 otherwise
+#define MAX_VAL        5 // Random values are [0, MAX_VAL]
+
+double f(double x, double y, unsigned int time) {
+  sleep(time);
+  return x + 2 * y;
+}
+
+// Reference computation kernel (do not touch)
+void dag_reference(double r1, double r2, double r3, double* r) {
+  double d1, d2, d3, d4, d5, d6;
+
+  d1 = f(r1, r2, 1);
+  d2 = f(r2, r3, 1);
+  d3 = f(d1, d2, 1);
+  d4 = f(r1, r3, 2);
+  d5 = f(r2, d2, 1);
+  d6 = f(d5, d4+d3, 1);
+
+  *r = d6;
+}
+
+// Computation kernel (to parallelize)
+void dag_kernel(double r1, double r2, double r3, double* r) {
+  double d1, d2, d3, d4, d5, d6;
+
+  #pragma omp parallel
+  {
+    #pragma omp single
+    {
+      #pragma omp task depend(out: d1)
+      {
+        d1 = f(r1,r2,1) ; 
+      }
+
+      #pragma omp task depend(out: d2)
+      {
+        d2 = f(r2,r3,1); 
+      }
+
+    
+
+      #pragma omp task depend(in: d1,d2) depend(out:d3)
+      {
+        d3 = f(d1,d2,1); 
+      }
+
+      #pragma omp task depend(out:d4)
+      {
+        d4 = f(r1,r3,2); 
+      }
+
+      #pragma omp task depend(in: d2) depend(out: d5)
+      {
+        d5 = f(r2,d2,1); 
+      }
+      
+
+
+      #pragma omp task depend(in:d5,d4,d3)
+      {
+        d6 = f(d5, d4+d3, 1);
+      }
+   
+      
+    }
+  }
+   *r = d6;
+
+}
+
+int main() {
+  double val_ref, val_ker;
+  double time_reference, time_kernel, speedup, efficiency;
+  // Initialization by random values
+  srand((unsigned int)time(NULL));
+  double val1 = (double)rand()/(double)(RAND_MAX/MAX_VAL);
+  double val2 = (double)rand()/(double)(RAND_MAX/MAX_VAL);
+  double val3 = (double)rand()/(double)(RAND_MAX/MAX_VAL);
+    
+  time_reference = omp_get_wtime();
+  dag_reference(val1, val2, val3, &val_ref);
+  time_reference = omp_get_wtime() - time_reference;
+  printf("Reference time : %3.5lf s\n", time_reference);
+  
+  time_kernel = omp_get_wtime();
+  dag_kernel(val1, val2, val3, &val_ker);
+  time_kernel = omp_get_wtime() - time_kernel;
+  printf("Kernel time    : %3.5lf s\n", time_kernel);
+
+  speedup = time_reference / time_kernel;
+  efficiency = speedup / (omp_get_num_procs() / (1 + HYPERTHREADING));
+  printf("Speedup ------ : %3.5lf\n", speedup);
+  printf("Efficiency --- : %3.5lf\n", efficiency);
+
+  // Check if the result differs from the reference
+  if (val_ref != val_ker) {
+    printf("Bad results :-(((\n");
+    exit(1);
+  }
+  printf("OK results :-)\n");
+
+  return 0;
+}
diff --git a/Mec_discord/annales/tp3_synchronisation_et_taches_codes/tp3_4_fibonacci.c b/Mec_discord/annales/tp3_synchronisation_et_taches_codes/tp3_4_fibonacci.c
new file mode 100644
index 0000000..868ea23
--- /dev/null
+++ b/Mec_discord/annales/tp3_synchronisation_et_taches_codes/tp3_4_fibonacci.c
@@ -0,0 +1,92 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <time.h>
+#include <omp.h>
+#define HYPERTHREADING 1 // 1 if hyperthreading is on, 0 otherwise
+
+// -------------------------------------------------------
+// Reference computation part (do not touch)
+
+int fibor(int n) {
+  if (n < 2)
+    return n;
+
+  return fibor(n-1) + fibor(n-2);
+}
+
+void fibonacci_reference(int n, int* fibo) {
+  *fibo = fibor(n);
+}
+
+// -------------------------------------------------------
+// Computation kernel (to parallelize)
+
+int fibok(int n) {
+  if (n < 2)
+    return n;
+
+  int x , y ; 
+  #pragma omp task shared(x)
+  {
+    x = fibok(n-1) ;
+  }
+
+  #pragma omp task shared(y)
+  {
+    y = fibok(n-2); 
+  }
+
+  #pragma omp taskwait
+  return x+y;
+}
+
+void fibonacci_kernel(int n, int* fibo) {
+  #pragma omp parallel 
+  {
+    #pragma omp single
+    {
+      *fibo = fibok(n);
+    }
+  }
+}
+
+// -------------------------------------------------------
+
+int main(int argc, char* argv[]) {
+  double time_reference, time_kernel, speedup, efficiency;
+  int n, fibo_ref, fibo_ker;
+  
+  if (argc != 2) { 
+    fprintf(stderr, "usage: %s number\n", argv[0]);
+    exit(1);
+  }
+  n = atoi(argv[1]);
+
+  time_reference = omp_get_wtime();
+  fibonacci_reference(n, &fibo_ref);
+  time_reference = omp_get_wtime() - time_reference;
+  printf("Reference time : %3.5lf s\n", time_reference);
+  
+  time_kernel = omp_get_wtime();
+  fibonacci_kernel(n, &fibo_ker);
+  time_kernel = omp_get_wtime() - time_kernel;
+  printf("Kernel time -- : %3.5lf s\n", time_kernel);
+
+  speedup = time_reference / time_kernel;
+  efficiency = speedup / (omp_get_num_procs() / (1 + HYPERTHREADING));
+  printf("Speedup ------ : %3.5lf\n", speedup);
+  printf("Efficiency --- : %3.5lf\n", efficiency);
+
+  // Check if the result differs from the reference
+  if (fibo_ref != fibo_ker) {
+    printf("Bad results :-(((\n");
+    printf("Reference: fibo(%d) = %d\n", n, fibo_ref);
+    printf("Kernel:    fibo(%d) = %d\n", n, fibo_ker);
+    exit(1);
+  }
+  printf("fibo(%d) = %d\n", n, fibo_ref);
+  printf("OK results :-)\n");
+
+  return 0;
+}
diff --git a/Mec_discord/annales/tpMPI/annale b/Mec_discord/annales/tpMPI/annale
new file mode 100644
index 0000000000000000000000000000000000000000..2a1145fd87b53e700f99da3dac38b73ce8608bee
GIT binary patch
literal 18136
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
Tbh}ovKflb>xWZ;&W7&TK1H=_e

literal 0
HcmV?d00001

diff --git a/Mec_discord/annales/tpMPI/annale.c b/Mec_discord/annales/tpMPI/annale.c
new file mode 100644
index 0000000..a93f753
--- /dev/null
+++ b/Mec_discord/annales/tpMPI/annale.c
@@ -0,0 +1,373 @@
+// TRI QSORT/FUSION EN PARALLÈLE
+
+// Le but de ce TP est d'obtenir un programme de tri parallèle distribué sur
+// un cluster de noeuds (en MPI) et d'utiliser tous les coeurs de chaque noeud
+// grâce à une fonction qsort multi-threads (en OpenMP).
+
+// Vous pouvez faire des tests de performance sur une machine unique en
+// lançant m processus MPI et t threads OpenMP, avec des valeurs de m et t
+// contrôlées au moment de l'exécution.
+
+// Le sujet comporte 3 questions, notées QUESTION 1 (ligne 109), QUESTION 2
+// (ligne 156) et QUESTION 3 (ligne 207) de ce programme original.
+// Déposez un seul fichier sur moodle avant la fin du temps indiqué.
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <mpi.h>
+#include <omp.h>
+
+// Taille du tableau à trier
+//#define N 100000000
+// Pour faire de tous petits tests, on peut utiliser :
+ #define N 48
+
+
+/* INITIALISATIONS VARIABLES ET FONCTIONS GLOBALES, NE PAS MODIFIER */
+// fonction d'initialisation de la vérification (à appeler sur tableau initial)
+void verif_init(int *);
+// fonction de vérification : le tableau passé en argument est le tableau de
+// verif_init() trié.
+// (renvoie 0 si succès, 1 si échec + message sur stderr)
+int verif(int *);
+
+// variables globales pour éviter les stack overflow.
+int tab_init[N], res_init[N];
+int *tab = tab_init, *res = res_init;
+
+
+/* FONCTION DONNÉE, NE PAS MODIFIER. */
+// fonction qui fait la fusion de deux parties de tableau triées tab1 et tab2
+// et remplit le tableau res avec le résultat de la fusion
+void fusion(int *restrict res, int *restrict tab1, int len1,
+  int *restrict tab2, int len2)
+{
+  int is=0, js=0, r=0;
+
+  while(is<len1 && js<len2)
+  {
+    if(tab2[js] < tab1[is])
+      res[r++] = tab2[js++];
+    else
+      res[r++] = tab1[is++];
+  }
+  while(is<len1)
+    res[r++] = tab1[is++];
+  while(js<len2)
+    res[r++] = tab2[js++];
+}
+
+
+/* FONCTION DONNÉE, NE PAS MODIFIER. */
+// échange les valeurs de tab[i] et tab[j]
+void echange(int *tab, int i, int j)
+{
+  int tmp = tab[j];
+  tab[j] = tab[i];
+  tab[i] = tmp;
+}
+
+
+/* FONCTION DONNÉE, NE PAS MODIFIER. */
+// sépare le tableau tab entre debut et fin, éléments inférieurs à un pivot au
+// début et éléments supérieurs au pivot à la fin.
+int separe(int *tab, int deb, int fin)
+{
+  // prend le pivot au début
+  int pivot = tab[deb];
+
+  // place tous les éléments inférieurs au pivot au début de tab
+  // (en position ind_plus_petit, un entier qui croît) après le pivot
+  int ind_plus_petit = deb;
+  for(int i=deb+1 ; i<fin ; i++)
+  {
+    if(tab[i] < pivot)
+    {
+      ind_plus_petit++;
+      // échange tab[i] et [ind_plus_petit]
+      echange(tab, i, ind_plus_petit);
+    }
+  }
+
+  // puis place le pivot (mis au début) en position ind_plus_petit
+  echange(tab, ind_plus_petit, deb);
+
+  // et retourne sa position dans tab
+  return(ind_plus_petit);
+}
+
+
+/* LA MÊME FONCTION, À PARALLÉLISER */
+/* RÉPONDRE AUX QUESTIONS CI-DESSOUS :
+QUESTION 1 :
+Paralléliser la boucle principale de cette fonction à l'aide d'OpenMP, en
+protégeant les variables partagées 'tab' et 'ind_plus_petit' contre les accès
+concurrents.
+
+
+- est-ce que cette parallélisation est correcte ? pourquoi ?
+non :(
+>>>
+
+
+
+- que faudrait-il faire pour la rendre correcte ?
+>>>
+   
+
+- pourquoi est-ce que la parallélisation de cette boucle ne peut pas rendre
+  ce programme parallèle efficace ?
+>>>
+
+>>>
+
+*/
+// sépare le tableau tab entre debut et fin, éléments inférieurs à un pivot au
+// début et éléments supérieurs à la fin.
+int separe_openmp(int *tab, int deb, int fin)
+{
+  // prend le pivot au début
+  int pivot = tab[deb];
+
+  // place tous les éléments inférieurs au pivot au début de tab
+  // (en position ind_plus_petit, un entier qui croît) après le pivot
+  int ind_plus_petit = deb;
+
+  #pragma omp parallel for reduction(+:ind_plus_petit)
+  for(int i=deb+1 ; i<fin ; i++)
+  {
+    if(tab[i] < pivot)
+    {
+    
+      
+        #pragma omp parallel critical
+        {
+          ind_plus_petit++;
+          // échange tab[i] et [ind_plus_petit]
+
+          echange(tab, i, ind_plus_petit);
+        }
+    }
+  }
+
+  // puis place le pivot (mis au début) en position ind_plus_petit
+  echange(tab, ind_plus_petit, deb);
+
+  // et retourne sa position dans tab
+  return(ind_plus_petit);
+}
+
+
+
+/* FONCTION À PARALLÉLISER */
+/* RÉPONDRE AUX QUESTIONS CI-DESSOUS :
+QUESTION 2:
+Paralléliser cette fonction en utilisant des tâches OpenMP. Vous ferez en
+sorte de limiter le nombre de threads OpenMP créés.
+Remarque 1 : vous pouvez modifier l'appel de cette fonction depuis la fonction
+tri() (en-dessous) pour utiliser OpenMP efficacement.
+Remarque 2 : utilisez la fonction separe() (en commentaire ci-dessous), au
+lieu de la fonction separe_openmp() que vous avez modifiée.
+
+
+- pour obtenir de bonnes performances, il faut arrêter de créer des threads
+  OpenMP à partir d'une certaine taille limite. Pourquoi ?
+>>>
+
+
+- La performance est améliorée si on augmente le nombre de threads OpenMP au
+  delà du nombre de coeurs d'une machine. Quelle pourrait être une raison
+  possible à cela ?
+>>>
+
+
+*/
+// quicksort parallèle du tableau tab
+// données en entrée : tab[deb] à tab[(fin-1)]
+void monsort_q(int *tab, int deb, int fin)
+{
+  // condition d'arrêt : si 2 éléments ou moins à trier
+  if(fin-deb <= 2)
+  {
+    // si 2 éléments exactement et qu'ils sont dans le désordre
+    if(fin-deb == 2 && tab[deb] > tab[fin-1])
+    {
+      // échange tab[deb] et [fin-1] puis termine
+      echange(tab, deb, fin-1);
+    }
+    return;
+  }
+
+  int pos_pivot;
+  // UTILISER LA VERSION ORIGINALE (NON PARALLÉLISÉE) POUR LES QUESTIONS 2 ET 3
+  // pos_pivot = separe(tab, deb, fin);
+  pos_pivot = separe(tab, deb, fin);
+
+  // appels récursifs
+  #pragma omp task  shared(tab) if (fin - deb > 100)
+  {
+    monsort_q(tab, deb, pos_pivot);
+  }
+  #pragma omp task shared(tab) if (fin - deb > 100)
+  {
+     monsort_q(tab, pos_pivot+1, fin);
+  }
+  #pragma omp taskwait
+}
+
+
+
+/* FONCTION À PARALLÉLISER EN UTILISANT MPI */
+/* RÉPONDRE AUX QUESTIONS CI-DESSOUS :
+QUESTION 3:
+Paralléliser cette fonction en utilisant MPI. Vous devrez également modifier
+le programme principal (main()) ci-dessous. Le processus de rang 0 doit faire
+l'initialisation du tableau et la vérification.
+Le nombre de processus MPI est arbitraire, mais vous pouvez supposer que c'est
+une puissance de 2. Vous pouvez supposer que le nombre de processus divise N.
+Chaque processus MPI devra faire le tri d'une partie de tableau, puis tous les
+processus devront collaborer pour faire des fusions de sous-tableaux deux à
+deux selon un arbre binaire.
+
+
+- Quel est l'intérêt d'effectuer les fusions deux à deux selon un arbre
+  binaire, au lieu d'envoyer toutes les données directement sur le processus 0
+  immédiatement après l'appel à qsort ?
+>>>
+
+
+- Que faudrait-il faire pour pouvoir considérer un nombre de processus MPI qui
+  n'est pas une puissance de 2 et une taille de tableau non divisible par le
+  nombre de processus MPI ?
+>>>
+
+
+*/
+// trie le tableau global tab (utilise le tableau res)
+void tri(int rank , int size,int part_size)
+{
+  // trie deux moitiés de tableaux (première et deuxième moitié de tab)
+ 
+  monsort_q(tab, 0, part_size);
+
+  // fusionne les deux parties
+  
+  for(int i = 1 ; i  < size ; i*=2)
+   {
+    if ((rank %(2*i)) != 0)
+    {
+      MPI_Send(tab,part_size*i, MPI_INT,rank-i,0,MPI_COMM_WORLD); 
+      MPI_Finalize(); 
+      return(0); 
+    }
+    else 
+    {
+      MPI_Recv(tab + (part_size*i), part_size*i, MPI_INT, rank +i , 0 ,MPI_COMM_WORLD, MPI_STATUS_IGNORE); 
+      fusion(res,tab,part_size*i,tab+ part_size*i,part_size*i); 
+      int *tmp = tab; 
+      tab= res ; 
+      res = tmp ; 
+    }
+   }
+}
+
+
+/* PROGRAMME PRINCIPAL */
+/* À MODIFIER POUR ÉCRIRE LA VERSION MPI (QUESTION 3) */
+int main(int argc, char **argv)
+{
+  double t1=0, t2; // pour la mesure du temps d'exécution
+  int rank,size; 
+  MPI_Init(&argc, &argv); 
+  MPI_Comm_size(MPI_COMM_WORLD,&size); 
+  MPI_Comm_rank(MPI_COMM_WORLD,&rank); 
+
+  if (rank == 0 ){
+    // initialisation du tableau et de la vérification
+    srand(time(0)+getpid());
+    for(int i=0 ; i<N ; i++)
+    {
+      tab[i] = rand()%N;
+    }
+    verif_init(tab);
+    // fin initialisation
+  }
+  // mesure du temps début du calcul
+  t1 = MPI_Wtime();
+
+
+   int part_size = N / size;
+  MPI_Scatter(tab, part_size, MPI_INT, tab, part_size, MPI_INT, 0, MPI_COMM_WORLD);
+  /* le tri */
+  tri(rank ,  size, part_size)
+
+
+  // mesure le temps d'exécution du tri
+  t2 = MPI_Wtime();
+  fprintf(stderr, "temps d'exécution : %lgs\n", t2-t1);
+
+  MPÏ_Finalize(); 
+  // vérifie que le tableau tab est trié et renvoie un code d'erreur
+  return(verif(tab));
+}
+
+
+
+/* NE PAS MODIFIER LE RESTE DU PROGRAMME CI-DESSOUS */
+// fonctions de vérification du tri
+static int compte[N];
+void verif_init(int *t)
+{
+  for(int i=0 ; i<N ; i++)
+    compte[i]=0;
+  for(int i=0 ; i<N ; i++)
+    compte[t[i]]++;
+}
+int verif(int *t)
+{
+  fprintf(stderr, "result:");
+  for(int i=0 ; i<5&&i<N ; i++)
+    fprintf(stderr, " %d", t[i]);
+  fprintf(stderr, " ...");
+  for(int i=N-5>0?N-5:0 ; i<N ; i++)
+    fprintf(stderr, " %d", t[i]);
+  fprintf(stderr, "\n");
+
+  /* vérification que le tableau t est bien le tableau trié : */
+  /* vérifie que les éléments sont dans l'ordre, et que le nombre   */
+  /* d'occurrences de chaque valeur correspond au tableau compte.   */
+  int nb = 1;
+  for(int i=1 ; i<N ; i++)
+  {
+    if(t[i-1] == t[i])
+    {
+      nb++;
+    }
+    else if(t[i-1] > t[i])
+    {
+      fprintf(stderr, "Error (%d > %d at index %d-%d)\n", t[i-1], t[i], i-1, i);
+      return(1);
+    }
+    else
+    {
+      // vérifie le nombre d'occurrences de la valeur précédente
+      if(compte[t[i-1]] != nb)
+      {
+        fprintf(stderr, "Error (bad count of %d: %d occurences, should be %d)\n", t[i-1], nb, compte[t[i-1]]);
+        return(1);
+      }
+      nb = 1;
+    }
+  }
+  // vérifie le nombre d'occurrences de la dernière valeur
+  if(compte[t[N-1]] != nb)
+  {
+    fprintf(stderr, "Error (bad count of %d: %d occurences, should be %d)\n", t[N-1], nb, compte[t[N-1]]);
+    return(1);
+  }
+  fprintf(stderr, "Result OK!\n");
+  return(0);
+}
diff --git a/Mec_discord/annales/tpMPI/hello b/Mec_discord/annales/tpMPI/hello
new file mode 100644
index 0000000000000000000000000000000000000000..a767f0662dea926449077d71e171bf1e9c1b2c57
GIT binary patch
literal 17128
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

literal 0
HcmV?d00001

diff --git a/Mec_discord/annales/tpMPI/hello.c b/Mec_discord/annales/tpMPI/hello.c
new file mode 100644
index 0000000..df99308
--- /dev/null
+++ b/Mec_discord/annales/tpMPI/hello.c
@@ -0,0 +1,22 @@
+#include <stdio.h>
+#include <mpi.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+int main(int argc, char **argv)
+{
+    int rang, size; 
+    char hn[100]; 
+    gethostname(hn,100) ; 
+    
+    if (MPI_Init(&argc,&argv))
+    {
+        fprintf(stderr,"Erreur MPI_Init\n"); 
+        exit(1); 
+    }
+    MPI_Comm_rank(MPI_COMM_WORLD,&rang); 
+    MPI_Comm_size(MPI_COMM_WORLD,&size) ;
+    printf("Je suis le processus numéro %d, sur %d(sur la machine %s) \n",rang,size,hn); 
+    MPI_Finalize(); 
+    return 0;
+}
\ No newline at end of file
diff --git a/Mec_discord/annales/tpMPI/ping.c b/Mec_discord/annales/tpMPI/ping.c
new file mode 100644
index 0000000..1d0dc45
--- /dev/null
+++ b/Mec_discord/annales/tpMPI/ping.c
@@ -0,0 +1,59 @@
+#include <mpi.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+int main(int argc, char** argv)
+{
+    double start,end;
+    int my_rank , num_procs;
+    int tag =0 ;
+    MPI_Status status;
+
+    //Init MPI
+    MPI_Init(&argc, &argv);
+    MPI_Comm_rank(MPI_COMM_WORLD,&my_rank) ;
+    MPI_Comm_size(MPI_COMM_WORLD,&num_procs);
+    int message_size = atoi(argv[1]);
+    int num_messages = atoi(argv[2]);
+    char *msg =  malloc(message_size*sizeof(char));
+
+    for(int i = 0; i < message_size ; i++)
+        msg[i] = 'a' ;
+    start = MPI_Wtime();
+    for (int i = 0; i < num_messages; i++)
+    {
+        if (my_rank == 0)
+        {
+            MPI_Ssend(msg,message_size,MPI_CHAR,1,tag,MPI_COMM_WORLD);
+            MPI_Recv(msg,message_size,MPI_CHAR,1,tag,MPI_COMM_WORLD,&status);
+        }
+        else
+        {
+            MPI_Recv(msg,message_size,MPI_CHAR,0,tag,MPI_COMM_WORLD,&status) ;
+            MPI_Ssend(msg,message_size,MPI_CHAR,0,tag,MPI_COMM_WORLD);
+        }
+
+    }
+
+    end = MPI_Wtime();
+    if (my_rank == 0)
+    {
+        printf("Temps (process 0) : %f s\n",end-start);
+    }
+    if (my_rank == 1)
+    {
+        printf("Temps (process 1) : %f s\n", end-start);
+    }
+    if (my_rank == 0)
+    {
+        double temps_transmission = (end - start) / (num_messages * 2);
+        double debit = (message_size / temps_transmission) / (1024 * 1024 * 1024);
+        printf("%d pingpong effectués avec un message de taille %d\n",num_messages,message_size) ;
+        printf("Temps de transmission d'un message : %e s\n",temps_transmission);
+        printf("Débit : %f Goctets/s\n",debit);
+    }
+    free(msg);
+    MPI_Finalize();
+    return 0 ;
+}
\ No newline at end of file
diff --git a/Mec_discord/annales/tpMPI/prodmat b/Mec_discord/annales/tpMPI/prodmat
new file mode 100644
index 0000000000000000000000000000000000000000..895953339b167b82cd43e7381644f919d1597b39
GIT binary patch
literal 17640
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
C&DSIV

literal 0
HcmV?d00001

diff --git a/Mec_discord/annales/tpMPI/prodmat.c b/Mec_discord/annales/tpMPI/prodmat.c
new file mode 100644
index 0000000..40a7d2a
--- /dev/null
+++ b/Mec_discord/annales/tpMPI/prodmat.c
@@ -0,0 +1,107 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <time.h>
+#include <sys/time.h>
+#include <math.h>
+#include <mpi.h>
+
+
+/* matrix size */
+#define N 2496
+
+// Random values are [0, MAX_VAL]
+#define MAX_VAL 5
+
+// Nomber of checks
+#define NBCHECKS 10
+// acceptable error (in check)
+#define ERROR   1.e-3
+
+#define DIFFTEMPS(a,b) (((b).tv_sec - (a).tv_sec) + ((b).tv_usec - (a).tv_usec)/1000000.)
+
+/* global to avoid stack overflow */
+double a[N][N],b[N][N],c[N][N];
+
+int main(int argc, char** argv)
+{
+   int size,rank ; 
+   MPI_Init(&argc,&argv);
+   MPI_Comm_size(MPI_COMM_WORLD,&size); 
+   MPI_Comm_rank(MPI_COMM_WORLD,&rank) ;
+   if (N%size != 0)
+   {
+    MPI_Finalize(); 
+    printf("erreur pas divisible! \n"); 
+    exit(1); 
+   } 
+
+  struct timeval tv_init, tv_begin, tv_end;
+  gettimeofday(&tv_init, NULL);
+
+  /***************************************************************************/
+  // initialization
+  if (rank == 0 )
+  { 
+    srand((unsigned int)time(NULL)+getpid());
+    for (int i=0;i<N;i++)
+        for (int j=0;j<N;j++)
+        {
+            b[i][j]=(double)rand()/(double)(RAND_MAX/MAX_VAL);
+            a[i][j]=(double)rand()/(double)(RAND_MAX/MAX_VAL);
+        }
+ 
+  }
+  MPI_Scatter(a, (N/size)*N,MPI_DOUBLE,a,(N/size) *N, MPI_DOUBLE,0,MPI_COMM_WORLD) ; 
+  MPI_Bcast(b,N*N, MPI_DOUBLE,0 ,MPI_COMM_WORLD); 
+
+
+  /***************************************************************************/
+  // compute
+
+    gettimeofday(&tv_begin, NULL);
+
+    for(int i=0;i<N/size;i++)
+        for(int j=0;j<N;j++)
+        c[i][j] = 0.;
+    for(int i=0 ; i<N/size ; i++)
+        for(int j=0 ; j<N ; j++)
+        for(int k=0 ; k<N ; k++)
+            c[i][j] += a[i][k] * b[k][j];
+
+
+    gettimeofday(&tv_end, NULL);
+  
+
+  /***************************************************************************/
+  // check some arbitrary values
+  MPI_Gather(c, N*N/size,MPI_DOUBLE,c, N*N/size,MPI_DOUBLE,0,MPI_COMM_WORLD); 
+  if (rank == 0){
+    int check_ok = 1;
+    for(int checks=0 ; checks<NBCHECKS ; checks++)
+    {
+        int i = rand()%N;
+        int j = rand()%N;
+        double val = 0.;
+        for(int k=0 ; k<N ; k++)
+        val += a[i][k] * b[k][j];
+        if(fabs(val - c[i][j]) > ERROR)
+        {
+        fprintf(stderr, "BAD RESULTS !");
+        fprintf(stderr, " (value[%d][%d] = %g should be %g)\n",
+                i, j, c[i][j], val);
+        check_ok = 0;
+        }
+    }
+    if(check_ok)
+        fprintf(stderr, "Ok results :)\n");
+
+    /***************************************************************************/
+    /* execution times */
+    printf("Init : %lfs, Compute : %lfs\n",
+            DIFFTEMPS(tv_init,tv_begin),
+            DIFFTEMPS(tv_begin,tv_end));
+  }
+  MPI_Finalize(); 
+  return(0);
+}
\ No newline at end of file
diff --git a/Mec_discord/annales/tpMPI/tri b/Mec_discord/annales/tpMPI/tri
new file mode 100644
index 0000000000000000000000000000000000000000..7efd1c755987566016dc4107966ce49dfe9d7e8f
GIT binary patch
literal 17728
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
LSZFh_vEqLKE?(lo

literal 0
HcmV?d00001

diff --git a/Mec_discord/annales/tpMPI/tri_qs_fusion.c b/Mec_discord/annales/tpMPI/tri_qs_fusion.c
new file mode 100644
index 0000000..b8ac43d
--- /dev/null
+++ b/Mec_discord/annales/tpMPI/tri_qs_fusion.c
@@ -0,0 +1,148 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <mpi.h>
+
+//#define N 10000000
+#define N 1000
+// pour qsort
+int compare(const void *p1, const void *p2)
+{
+  int v1=*(int *)p1, v2=*(int *)p2;
+  if(v1<v2)
+    return(-1);
+  else if(v2<v1)
+    return(1);
+  else
+    return(0);
+}
+
+// pour fusionner deux parties de tableau triées tab1 et tab2
+// remplit res avec la fusion
+void fusion(int *restrict res, int *restrict tab1, int len1, int *restrict tab2, int len2)
+{
+  int is=0, js=0, r=0;
+
+  while(is<len1 && js<len2)
+  {
+    if(tab2[js] < tab1[is])
+      res[r++] = tab2[js++];
+    else
+      res[r++] = tab1[is++];
+  }
+  while(is<len1)
+    res[r++] = tab1[is++];
+  while(js<len2)
+    res[r++] = tab2[js++];
+
+}
+
+// fonction d'initialisation de la vérification
+void verif_init(int *);
+// fonction de vérification : le tableau passé en argument est le tableau de verif_init() trié
+// (renvoie 0 si succès, 1 si échec + message sur stderr)
+int verif(int *);
+
+int tabi[N], resi[N];
+
+int main(int argc, char **argv) {
+    int rank, size;
+    MPI_Init(&argc, &argv);
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &size);
+
+    int *res = resi;
+    int *tab = tabi;
+
+    if (rank == 0) {
+        srand(time(0) + getpid());
+        for (int i = 0; i < N; i++) {
+            tab[i] = rand() % N;
+        }
+       verif_init(tab); 
+    }
+
+    int part_size = N / size;
+
+    MPI_Scatter(tab, part_size, MPI_INT, tab, part_size, MPI_INT, 0, MPI_COMM_WORLD);
+
+    qsort(tab, part_size, sizeof(int), compare);
+   
+   for(int i = 1 ; i  < size ; i*=2)
+   {
+    if ((rank %(2*i)) != 0)
+    {
+      MPI_Send(tab,part_size*i, MPI_INT,rank-i,0,MPI_COMM_WORLD); 
+      MPI_Finalize(); 
+      return(0); 
+    }
+    else 
+    {
+      MPI_Recv(tab + (part_size*i), part_size*i, MPI_INT, rank +i , 0 ,MPI_COMM_WORLD, MPI_STATUS_IGNORE); 
+      fusion(res,tab,part_size*i,tab+ part_size*i,part_size*i); 
+      int *tmp = tab; 
+      tab= res ; 
+      res = tmp ; 
+    }
+   }
+    MPI_Finalize();  
+    return verif(tab); 
+}
+
+static int compte[N];
+void verif_init(int *t)
+{
+  for(int i=0 ; i<N ; i++)
+    compte[i]=0;
+  for(int i=0 ; i<N ; i++)
+    compte[t[i]]++;
+}
+int verif(int *t)
+{
+  fprintf(stderr, "result:");
+  for(int i=0 ; i<5&&i<N ; i++)
+    fprintf(stderr, " %d", t[i]);
+  fprintf(stderr, " ...");
+  for(int i=N-5>0?N-5:0 ; i<N ; i++)
+    fprintf(stderr, " %d", t[i]);
+  fprintf(stderr, "\n");
+
+  /* vérification que le tableau t est bien le tableau trié : */
+  /* vérifie que les éléments sont dans l'ordre, et que le nombre   */
+  /* d'occurrences de chaque valeur correspond au tableau compte.   */
+  int nb = 1;
+  for(int i=1 ; i<N ; i++)
+  {
+    if(t[i-1] == t[i])
+    {
+      nb++;
+    }
+    else if(t[i-1] > t[i])
+    {
+      fprintf(stderr, "Error (%d > %d at index %d-%d)\n", t[i-1], t[i], i-1, i);
+      return(1);
+    }
+    else
+    {
+      // vérifie le nombre d'occurrences de la valeur précédente
+      if(compte[t[i-1]] != nb)
+      {
+        fprintf(stderr, "Error (bad count of %d: %d occurences, should be %d)\n", t[i-1], nb, compte[t[i-1]]);
+        return(1);
+      }
+      nb = 1;
+    }
+  }
+  // vérifie le nombre d'occurrences de la dernière valeur
+  if(compte[t[N-1]] != nb)
+  {
+    fprintf(stderr, "Error (bad count of %d: %d occurences, should be %d)\n", t[N-1], nb, compte[t[N-1]]);
+    return(1);
+  }
+  fprintf(stderr, "Result OK!\n");
+
+
+  return(0);
+}
diff --git a/Mec_discord/annales/tri_fusion_first_try.c b/Mec_discord/annales/tri_fusion_first_try.c
new file mode 100644
index 0000000..f5c35d2
--- /dev/null
+++ b/Mec_discord/annales/tri_fusion_first_try.c
@@ -0,0 +1,420 @@
+// TRI QSORT/FUSION EN PARALLÈLE
+
+// Le but de ce TP est d'obtenir un programme de tri parallèle distribué sur
+// un cluster de noeuds (en MPI) et d'utiliser tous les coeurs de chaque noeud
+// grâce à une fonction qsort multi-threads (en OpenMP).
+
+// Vous pouvez faire des tests de performance sur une machine unique en
+// lançant m processus MPI et t threads OpenMP, avec des valeurs de m et t
+// contrôlées au moment de l'exécution.
+
+// Le sujet comporte 3 questions, notées QUESTION 1 (ligne 109), QUESTION 2
+// (ligne 156) et QUESTION 3 (ligne 207) de ce programme original.
+// Déposez un seul fichier sur moodle avant la fin du temps indiqué.
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <mpi.h>
+#include <omp.h>
+
+// Taille du tableau à trier
+#define N 100000000
+// Pour faire de tous petits tests, on peut utiliser :
+// #define N 48
+
+
+/* INITIALISATIONS VARIABLES ET FONCTIONS GLOBALES, NE PAS MODIFIER */
+// fonction d'initialisation de la vérification (à appeler sur tableau initial)
+void verif_init(int *);
+// fonction de vérification : le tableau passé en argument est le tableau de
+// verif_init() trié.
+// (renvoie 0 si succès, 1 si échec + message sur stderr)
+int verif(int *);
+
+// variables globales pour éviter les stack overflow.
+int tab_init[N], res_init[N];
+int *tab = tab_init, *res = res_init;
+
+
+/* FONCTION DONNÉE, NE PAS MODIFIER. */
+// fonction qui fait la fusion de deux parties de tableau triées tab1 et tab2
+// et remplit le tableau res avec le résultat de la fusion
+void fusion(int *restrict res, int *restrict tab1, int len1,
+  int *restrict tab2, int len2)
+{
+  int is=0, js=0, r=0;
+
+  while(is<len1 && js<len2)
+  {
+    if(tab2[js] < tab1[is])
+      res[r++] = tab2[js++];
+    else
+      res[r++] = tab1[is++];
+  }
+  while(is<len1)
+    res[r++] = tab1[is++];
+  while(js<len2)
+    res[r++] = tab2[js++];
+}
+
+
+/* FONCTION DONNÉE, NE PAS MODIFIER. */
+// échange les valeurs de tab[i] et tab[j]
+void echange(int *tab, int i, int j)
+{
+  int tmp = tab[j];
+  tab[j] = tab[i];
+  tab[i] = tmp;
+}
+
+
+/* FONCTION DONNÉE, NE PAS MODIFIER. */
+// sépare le tableau tab entre debut et fin, éléments inférieurs à un pivot au
+// début et éléments supérieurs au pivot à la fin.
+int separe(int *tab, int deb, int fin)
+{
+  // prend le pivot au début
+  int pivot = tab[deb];
+
+  // place tous les éléments inférieurs au pivot au début de tab
+  // (en position ind_plus_petit, un entier qui croît) après le pivot
+  int ind_plus_petit = deb;
+  for(int i=deb+1 ; i<fin ; i++)
+  {
+    if(tab[i] < pivot)
+    {
+      ind_plus_petit++;
+      // échange tab[i] et [ind_plus_petit]
+      echange(tab, i, ind_plus_petit);
+    }
+  }
+
+  // puis place le pivot (mis au début) en position ind_plus_petit
+  echange(tab, ind_plus_petit, deb);
+
+  // et retourne sa position dans tab
+  return(ind_plus_petit);
+}
+
+
+/* LA MÊME FONCTION, À PARALLÉLISER */
+/* RÉPONDRE AUX QUESTIONS CI-DESSOUS :
+QUESTION 1 :
+Paralléliser la boucle principale de cette fonction à l'aide d'OpenMP, en
+protégeant les variables partagées 'tab' et 'ind_plus_petit' contre les accès
+concurrents.
+
+
+- est-ce que cette parallélisation est correcte ? pourquoi ?
+>>>
+
+ L'ordre dans lequel les éléments sont échangés dépend de 
+ l'ordonnancement des threads. Et comme l'echange se fait 
+ en se basant sur ind_plus_petit qui est partagé, même si on
+ protège notre boucle des accès concurrents, les échanges ne 
+ seront pas dans la bon ordre.
+
+- que faudrait-il faire pour la rendre correcte ?
+>>>
+
+
+
+
+- pourquoi est-ce que la parallélisation de cette boucle ne peut pas rendre
+  ce programme parallèle efficace ?
+  L'utilisation de la clause critical dans la boucle où chaque thread peut potentiellement entrer en compétition pour accéder à cette section critique rend l'exécution largement séquentielle, 
+  car les threads doivent attendre leur tour pour effectuer l'échange. Cela crée un goulot d'étranglement significatif qui réduit les bénéfices de la parallélisation, puisque les threads sont 
+  souvent bloqués en attente de l'accès à la section critique.
+>>>
+
+
+*/
+// sépare le tableau tab entre debut et fin, éléments inférieurs à un pivot au
+// début et éléments supérieurs à la fin.
+int separe_openmp(int *tab, int deb, int fin)
+{
+  // prend le pivot au début
+  int pivot = tab[deb];
+
+  // place tous les éléments inférieurs au pivot au début de tab
+  // (en position ind_plus_petit, un entier qui croît) après le pivot
+  int ind_plus_petit = deb;
+
+  #pragma omp parallel for reduction(+:ind_plus_petit)
+  for(int i=deb+1 ; i<fin ; i++)
+  {
+    if(tab[i] < pivot)
+    {
+      #pragma omp critical
+      {
+        ind_plus_petit++;
+        // échange tab[i] et [ind_plus_petit]
+        echange(tab, i, ind_plus_petit);
+      }
+    }
+  }
+
+  // puis place le pivot (mis au début) en position ind_plus_petit
+
+    echange(tab, ind_plus_petit, deb);
+ 
+  // et retourne sa position dans tab
+  return(ind_plus_petit);
+}
+
+
+
+/* FONCTION À PARALLÉLISER */
+/* RÉPONDRE AUX QUESTIONS CI-DESSOUS :
+QUESTION 2:
+Paralléliser cette fonction en utilisant des tâches OpenMP. Vous ferez en
+sorte de limiter le nombre de threads OpenMP créés.
+Remarque 1 : vous pouvez modifier l'appel de cette fonction depuis la fonction
+tri() (en-dessous) pour utiliser OpenMP efficacement.
+Remarque 2 : utilisez la fonction separe() (en commentaire ci-dessous), au
+lieu de la fonction separe_openmp() que vous avez modifiée.
+
+
+- pour obtenir de bonnes performances, il faut arrêter de créer des threads
+  OpenMP à partir d'une certaine taille limite. Pourquoi ?
+>>>
+La création de threads OpenMP entraîne un certain coût en termes de temps et de 
+ressources. Lorsque la taille des données à traiter devient petite par rapport à ce coût, 
+le bénéfice de la parallélisation diminue et peut même devenir négligeable voire négatif.
+Pour des données très petites, il est possible que le temps de création et de gestion des 
+threads soit plus important que le temps nécessaire pour effectuer le travail réel.
+
+- La performance est améliorée si on augmente le nombre de threads OpenMP au
+  delà du nombre de coeurs d'une machine. Quelle pourrait être une raison
+  possible à cela ?on
+>>>
+
+L'augmentation du nombre de threads OpenMP au-delà du nombre de cœurs physiques d'une 
+machine peut parfois améliorer les performances en raison de l'exploitation des unités 
+d'exécution simultanée (SMT, Simultaneous Multi-Threading) ou de l'hyper-threading. 
+Ces technologies permettent à chaque cœur physique de traiter plusieurs threads 
+simultanément, en fournissant des ressources supplémentaires pour exécuter les threads 
+supplémentaires, même si les ressources matérielles sont déjà utilisées à pleine capacité 
+par les threads existants.
+
+*/
+// quicksort parallèle du tableau tab
+// données en entrée : tab[deb] à tab[(fin-1)]
+void monsort_q(int *tab, int deb, int fin)
+{
+  
+  // condition d'arrêt : si 2 éléments ou moins à trier
+  if(fin-deb <= 2)
+  {
+    // si 2 éléments exactement et qu'ils sont dans le désordre
+    if(fin-deb == 2 && tab[deb] > tab[fin-1])
+    {
+      // échange tab[deb] et [fin-1] puis termine
+      echange(tab, deb, fin-1);
+    }
+    return;
+  }
+
+  int pos_pivot;
+  // UTILISER LA VERSION ORIGINALE (NON PARALLÉLISÉE) POUR LES QUESTIONS 2 ET 3
+   //pos_pivot = separe(tab, deb, fin);
+   //monsort_q(tab, deb, pos_pivot);
+   // monsort_q(tab, pos_pivot + 1, fin);
+  //pos_pivot = separe_openmp(tab, deb, fin);
+
+     // Utilisation de tâches OpenMP pour paralléliser les appels récursifs
+   
+    pos_pivot = separe(tab, deb, fin);
+    
+    // Appels récursifs parallélisés
+    #pragma omp task shared(tab) if (fin - deb > 100) // Utilisation d'une condition pour limiter la création de tâches
+    {
+      monsort_q(tab, deb, pos_pivot);
+    }
+
+    #pragma omp task shared(tab) if (fin - deb > 100) // Utilisation d'une condition pour limiter la création de tâches
+    {
+      monsort_q(tab, pos_pivot + 1, fin);
+    }
+
+    // Synchronisation des tâches avant de terminer
+    #pragma omp taskwait
+   
+}
+
+
+
+/* FONCTION À PARALLÉLISER EN UTILISANT MPI */
+/* RÉPONDRE AUX QUESTIONS CI-DESSOUS :
+QUESTION 3:
+Paralléliser cette fonction en utilisant MPI. Vous devrez également modifier
+le programme principal (main()) ci-dessous. Le processus de rang 0 doit faire
+l'initialisation du tableau et la vérification.
+Le nombre de processus MPI est arbitraire, mais vous pouvez supposer que c'est
+une puissance de 2. Vous pouvez supposer que le nombre de processus divise N.
+Chaque processus MPI devra faire le tri d'une partie de tableau, puis tous les
+processus devront collaborer pour faire des fusions de sous-tableaux deux à
+deux selon un arbre binaire.
+
+
+- Quel est l'intérêt d'effectuer les fusions deux à deux selon un arbre
+  binaire, au lieu d'envoyer toutes les données directement sur le processus 0
+  immédiatement après l'appel à qsort ?
+>>>
+L'intérêt d'effectuer les fusions deux à deux selon un arbre binaire réside dans la réduction de la communication entre les processus MPI. 
+Plutôt que d'envoyer toutes les données directement au processus 0, ce qui peut entraîner des goulets d'étranglement 
+et une charge disproportionnée sur ce processus, la fusion deux à deux permet de distribuer la charge de manière équilibrée entre les processus.
+ De plus, cela peut réduire le temps de communication global, car chaque processus fusionne localement avec un autre processus, 
+ ce qui peut être plus efficace en termes de bande passante et de latence.
+
+
+- Que faudrait-il faire pour pouvoir considérer un nombre de processus MPI qui
+  n'est pas une puissance de 2 et une taille de tableau non divisible par le
+  nombre de processus MPI ?
+  Oui, vous avez raison. Une autre approche possible consiste à distribuer le travail entre les processus pairs et impairs. Cela peut être une solution plus simple et efficace, surtout si la taille du tableau n'est pas nécessairement divisible par le nombre de processus MPI.
+
+Voici comment cela pourrait être mis en œuvre :
+
+    Nombre de processus MPI non une puissance de 2 :
+        Divisez le tableau en deux parties : une pour les processus pairs et une pour les processus impairs.
+        Distribuez les parties du tableau aux processus de manière équilibrée, en attribuant à chaque processus une quantité de travail similaire.
+
+    Taille de tableau non divisible par le nombre de processus MPI :
+        Si la taille du tableau n'est pas divisible par le nombre de processus, vous pouvez attribuer équitablement les éléments du tableau à partir du premier élément jusqu'à ce que tous les éléments soient attribués.
+        Les processus impairs peuvent traiter un élément supplémentaire si nécessaire.
+
+Cela garantit que chaque processus MPI a une charge de travail équilibrée, et la gestion de la distribution des éléments du tableau est plus simple.
+>>>
+
+
+*/
+// trie le tableau global tab (utilise le tableau res)
+// trie le tableau global tab (utilise le tableau res)
+void tri(int rank , int size,int part_size)
+{
+  // trie deux moitiés de tableaux (première et deuxième moitié de tab)
+ 
+  monsort_q(tab, 0, part_size);
+
+  // fusionne les deux parties
+  
+  for(int i = 1 ; i  < size ; i*=2)
+   {
+    if ((rank %(2*i)) != 0)
+    {
+      MPI_Send(tab,part_size*i, MPI_INT,rank-i,0,MPI_COMM_WORLD); 
+      MPI_Finalize(); 
+      return(0); 
+    }
+    else 
+    {
+      MPI_Recv(tab + (part_size*i), part_size*i, MPI_INT, rank +i , 0 ,MPI_COMM_WORLD, MPI_STATUS_IGNORE); 
+      fusion(res,tab,part_size*i,tab+ part_size*i,part_size*i); 
+      int *tmp = tab; 
+      tab= res ; 
+      res = tmp ; 
+    }
+   }
+}
+
+
+/* PROGRAMME PRINCIPAL */
+/* À MODIFIER POUR ÉCRIRE LA VERSION MPI (QUESTION 3) */
+int main(int argc, char **argv)
+{
+  double t1=0, t2; // pour la mesure du temps d'exécution
+  int rank,size; 
+  MPI_Init(&argc, &argv); 
+  MPI_Comm_size(MPI_COMM_WORLD,&size); 
+  MPI_Comm_rank(MPI_COMM_WORLD,&rank); 
+
+  if (rank == 0 ){
+    // initialisation du tableau et de la vérification
+    srand(time(0)+getpid());
+    for(int i=0 ; i<N ; i++)
+    {
+      tab[i] = rand()%N;
+    }
+    verif_init(tab);
+    // fin initialisation
+  }
+  // mesure du temps début du calcul
+  t1 = MPI_Wtime();
+
+
+   int part_size = N / size;
+  MPI_Scatter(tab, part_size, MPI_INT, tab, part_size, MPI_INT, 0, MPI_COMM_WORLD);
+  /* le tri */
+  tri(rank ,  size, part_size)
+
+
+  // mesure le temps d'exécution du tri
+  t2 = MPI_Wtime();
+  fprintf(stderr, "temps d'exécution : %lgs\n", t2-t1);
+
+  MPÏ_Finalize(); 
+  // vérifie que le tableau tab est trié et renvoie un code d'erreur
+  return(verif(tab));
+}
+
+
+
+
+/* NE PAS MODIFIER LE RESTE DU PROGRAMME CI-DESSOUS */
+// fonctions de vérification du tri
+static int compte[N];
+void verif_init(int *t)
+{
+  for(int i=0 ; i<N ; i++)
+    compte[i]=0;
+  for(int i=0 ; i<N ; i++)
+    compte[t[i]]++;
+}
+int verif(int *t)
+{
+  fprintf(stderr, "result:");
+  for(int i=0 ; i<5&&i<N ; i++)
+    fprintf(stderr, " %d", t[i]);
+  fprintf(stderr, " ...");
+  for(int i=N-5>0?N-5:0 ; i<N ; i++)
+    fprintf(stderr, " %d", t[i]);
+  fprintf(stderr, "\n");
+
+  /* vérification que le tableau t est bien le tableau trié : */
+  /* vérifie que les éléments sont dans l'ordre, et que le nombre   */
+  /* d'occurrences de chaque valeur correspond au tableau compte.   */
+  int nb = 1;
+  for(int i=1 ; i<N ; i++)
+  {
+    if(t[i-1] == t[i])
+    {
+      nb++;
+    }
+    else if(t[i-1] > t[i])
+    {
+      fprintf(stderr, "Error (%d > %d at index %d-%d)\n", t[i-1], t[i], i-1, i);
+      return(1);
+    }
+    else
+    {
+      // vérifie le nombre d'occurrences de la valeur précédente
+      if(compte[t[i-1]] != nb)
+      {
+        fprintf(stderr, "Error (bad count of %d: %d occurences, should be %d)\n", t[i-1], nb, compte[t[i-1]]);
+        return(1);
+      }
+      nb = 1;
+    }
+  }
+  // vérifie le nombre d'occurrences de la dernière valeur
+  if(compte[t[N-1]] != nb)
+  {
+    fprintf(stderr, "Error (bad count of %d: %d occurences, should be %d)\n", t[N-1], nb, compte[t[N-1]]);
+    return(1);
+  }
+  fprintf(stderr, "Result OK!\n");
+  return(0);
+}
-- 
GitLab