2

すべては、64 ビット整数を MPI_Bcast する必要があったときに始まりました。MPI はそれを処理する方法がわからないので、次のようにしました。

template<typename T>
inline int BcastObjects(T* pointer, 
                        int count, 
                        int root, 
                        MPI_Comm comm)
{
    return MPI_Bcast(pointer, 
                     count * sizeof(*pointer), 
                     MPI_BYTE, 
                     root,
                     comm);
}

今私はできる:

int64_t i = 0;
BcastObjects(&i, 1, root_rank, some_communicator);

次に、BcastObjects を使用して構造体の配列を送信し始めました。そんなことしていいのかな?

MPI_Datatype に関するマニュアルは、それを行う方法に焦点を当てていますが、なぜそれを行う必要があるかについては説明していません。

4

1 に答える 1

3

なぜ使用しないのMPI_INT64_Tですか?

いつでも自分のデータ型をモックアップすることができMPI_Byteます。データ型のものはそこにあるので、そうする必要はありません。多くの場合、それははるかに簡単です。「穴」のあるデータ (たとえば、多次元配列のスライス、ギャップのある構造内のデータ) を送信する場合は、データ型を使用してかなり簡単にマッピングできますが、手動で行う必要があります。バイト文字列を数えて、それ以外のようなものを使用しMPI_Packます。もちろん、データ構造の何かが変更された場合でも、より高いレベルでデータを記述することは確かに脆弱ではありません。

于 2013-01-14T18:12:01.633 に答える