Bonjour,

je suis en train de développer une petite application // et rencontre un petit problème.
Je souhaite envoyer une structure en utilisant MPI_Datatype.

Voici la structure :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
typedef struct 
{
  float x,y,z,t;
  int n,m;
} new;
 
new vect[N];
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
  MPI_Datatype newtype,oldtypes[2];
  int blockcounts[2];
  MPI_Aint extent, offsets[2];
 
   MPI_Init(&argc, &argv);
 
   ierr = MPI_Comm_rank(MPI_COMM_WORLD, &rank);  
   ierr = MPI_Comm_size(MPI_COMM_WORLD, &size);
   offsets[0] = 0;
   oldtypes[0] = MPI_FLOAT;
   blockcounts[0] = 4;
   MPI_Type_extent(MPI_FLOAT,&extent);
   offsets[1] = blockcounts[0]*extent;
   oldtypes[1] = MPI_INT;
   blockcounts[0] = 2;
   ierr = MPI_Type_struct(2, blockcounts, offsets, oldtypes, &newtype);
   ierr = MPI_Type_commit(&newtype);
J'initialise un tableau de cette structure avec le rang 0 et l'envoi via le type newtype.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
MPI_Isend(&vect[j],1,newtype,(i+1)%size,1,MPI_COMM_WORLD,&req);
Je reçois bien la structure, mais seulement les 2 premiers float de la structure sont corrects, les autres valeurs sont nulles.

Quelqu'un a une idée ?