2016-05-21 8 views
0

を含む構造体の配列を送信する私は、次のC構造を持っている:MPI:ポインタ

typedef struct chromosome{ 
int *genes; 
float cout; 
}chromosome; 

私はにMPI_Send関数を使用して染色体の配列をお送りしたいと思います。

MPI_Datatype MPI_CHROMOSOME; 
MPI_Datatype TYPES_ELEMENTAIRES[2] = {MPI_INT, MPI_FLOAT}; 
int blocklengths[2] = {NB_SOMMETS,1}; //NB_SOMMET is a known integer value at this point (number of elements of the "genes" array) 
MPI_Aint offsets[2]; 

offsets[0] = offsetof(chromosome, genes); 
offsets[1] = offsetof(chromosome, cout); 

MPI_Type_create_struct(2, blocklengths, offsets, TYPES_ELEMENTAIRES, &MPI_CHROMOSOME); 
MPI_Type_commit(&MPI_CHROMOSOME); 

それから私は、染色体の配列送信しようとした:

chromosome *sub_pop = malloc(taille_sub_pop*sizeof(chromosome));//taille_sub_pop is a known integer value 
/* ... Fills sub_pop with chromosomes ...*/ 
MPI_Send(sub_pop,taille_sub_pop,MPI_CHROMOSOME, 1, 3, MPI_COMM_WORLD); 

を...しかし、私はエラー(YOUR OF ONE OF BAD終了を得た私はこのようなMPI_CHROMOSOMEデータ型が定義されてきましたアプリケーションプロセス...終了コード139 ...アプリケーションが終了すると終了しました:セグメント化エラー(シグナル11))。

どうすればこのアレイを適切に送信できますか?私はあなたの助けに感謝します。どうもありがとう。

答えて

1

MPIを使用して他のプロセスへのポインタを送信することはできません。まあ、技術的には可能ですが、各プロセスに独自のメモリスペースとアドレッシングがあるため、あるプロセスで有効なポインタは、別のプロセスで無効なメモリを指している可能性が非常に高いです。とにかく、ポインタ自体ではなく、ポインタが指しているデータを送信したいとします。 、あなたの答えに感謝を Creating an MPI_Datatype for a structure containing pointers

+0

こんにちは:

は、この質問を参照してください。あなたが私に送ったリンクでは、実際には1つの要素だけでなく、そのような構造の配列を送信したいと思っています... – Reda94