0
これについてはサイトhereに質問がありますが、これはcで実装されています。私はそれのC + +バージョンが必要です。C++ MPIフィールドchar [16]と整数を持つ構造体の配列を作成して送信する
問題は次のとおりです。 私はこれらの構造体の配列を送信する必要があり、以下のフォーム
struct word
{
char value[WORD_MAX_LENGTH];
int freq;
};
を持つ構造体を作成しました。どのようにしてこの構造体をシリアル化し、MPI_Sendを使用してそれらのうちの500個を別のプロセスに送ることができますか?私がこれまでに得たのはここ
は次のとおりです。私はこれを行うと、私はそれを実行しようとすると、
MPI_Datatype word_type, oldtypes[2];
int blockcounts[2];
MPI_Aint offsets[2], extent;
//Determine the offset and block length of the first element of the struct which is a char array.
offsets[0] = 0;
oldtypes[0] = MPI_CHAR;
blockcounts[0] = WORD_MAX_LENGTH;
//Determine the offset of int ferq of the struct.
MPI_Type_extent(MPI_CHAR, &extent);
offsets[1] = 16 * extent;
blockcounts[1] = 1;
// Finally create the type.
MPI_Type_create_struct(2, blockcounts, offsets, oldtypes, &word_type);
MPI_Type_commit(&word_type);
が、それはしかし、エラーなしでコンパイルされます。 それは文句を言う
Fatal error in PMPI_Type_create_struct: Invalid datatype, error stack:
PMPI_Type_create_struct(173): MPI_Type_create_struct(count=2,
array_of_blocklengths=0x7fffbd059f70,
array_of_displacements=0x7fffbd059f80, array_of_types=0x7fffbd059f60,
newtype=0x7fffbd059f14) failed
PMPI_Type_create_struct(142): Invalid datatype
助けていただければ幸いです。 注:私は、ブーストライブラリを使用することはできません。
ありがとうございました!私は質問をした後にオフセットを編集するのを忘れてしまった。とにかくヘッドアップのおかげで、私はすでにそれを変更しました。彼らはこのオフセット[1] =(size_t)&(word.freq) - (size_t)&word;のようになりました。また、私はoldtypesにMPI_INTを追加しました。それは今働いているようです:D –
これは動作しています。どのようにしてこれらの構造体の複数をスレーブに送ることができますか? –
'MPI_Send(words、n、word_type、...)' –