Bonjour à tous,
Je désire envoyer une structure en MPI. Voila ma structure :
le b est alloué dynamiquement avec malloc(). Disons qu'il contienne n elements, je ne connais pas ce nombre à l'avance.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 typedef struct{ float a; int* b; }structure_t;
J'arrive très bien à envoyer cette structure quand elle est alloué non dynamiquement, avec :
par exemple, mais pas quand elle est alloué par un malloc.
Code : Sélectionner tout - Visualiser dans une fenêtre à part int b[10]
Je créé ma structure MPI comme suit :
A la reception, je ne peux pas acceder à mes données sous peine d'un seg fault. Tout se passe très bien quand ce n'est pas alloué dynamiquement par contre...
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
19
20 structure_t resultat; MPI_Datatype MPI_NOUVEAUTYPE; MPI_Datatype oldtypes[2]; int blockcounts[2]; MPI_Aint offsets[2]; MPI_Address( &resultat.a, &offsets[0]); oldtypes[0] = MPI_FLOAT; blockcounts[0] = 1; //La longueur du parcours MPI_Address( &resultat.b, &offsets[1]); oldtypes[1] = MPI_INT; blockcounts[1] = n; //Le parcours offsets[1] -= offsets[0]; offsets[0]=0; // On créé la structure et on la prépare MPI_Type_struct(2, blockcounts, offsets, oldtypes, &NOUVEAUTYPE);
Vous avez une idée ?
Merci![]()
Partager