fonctionnement de MPI_Datatype
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:
1 2 3 4 5 6 7 8
|
typedef struct
{
float x,y,z,t;
int n,m;
} new;
new vect[N]; |
Code:
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:
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 ?