Je développe la version 3D d'un code utilisant la bibliothèque MPI (Message Passing Interface). Dans ce code, j'échange des tableaux 2D entre différents processus grâce à la fonction "MPI_Sendrecv".

Pour cela, mon tableau 3D doit être dynamiquement alloué et contigu en mémoire selon les dimensions x[size_tot_y][size_tot_x][size_tot_z]. Voici ce que j'ai essayé :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 x = malloc(size_tot_y * sizeof(*x));
 
 for (i = 0; i < size_tot_y; i++) {
   x[i] = malloc(size_tot_x * sizeof(**x));
   for (j = 0; j < size_tot_x; j++) {
     x[i][j] = malloc(size_tot_z * sizeof(***x));
   }
 }
Malheureusement, j'ai des segmentations fault à l'exécution.

Dans la version 2D de ce code, j'alloue dynamiquement des tableaux 2D contigus de la manière suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
  x0 = malloc(size_tot_y*sizeof(double*));
  x0_vals = malloc(size_tot_x*size_tot_y*sizeof(double));
 
  for(j=0;j<=size_tot_y-1;j++) {
    x0[j] = &x0_vals[j*size_tot_x];
  }
quel est selon vous la version 3D de cette allocation ?