4

Fortran 90 行列を列ではなく行で散布する最良の方法は何ですか? つまり、行列 a(4,50) があり、各部分が alocal(2,50) である 2 つのプロセスに MPI_SCATTER したいとします。ここで、ランク 0 には行 1 と 2 があり、ランク 1 には行 3 と行があります。 4. C では、配列は行優先なので単純ですが、Fortran 90 では列優先です。

TRANSPOSE を使用して分散前に a を反転する (つまり、メモリ使用量を 2 倍にする) ことを避けようとしていますが、MPI にはこれを行う方法が必要であると考えています。MPI_TYPE_VECTOR でしょうか。MPI_TYPE_CREATE_SUBARRAY?

同様に、3 次元配列 b(4,50,3) があり、blocal(2,50,3) の 2 つの分散行列を上記のように分散させたい場合はどうすればよいでしょうか?

4

2 に答える 2

1

はい、MPI_TYPE_VECTOR と MPI_TYPE_CREATE_SUBARRAY が必要です。前者は最初の問題、後者は 2 番目の問題です。コールを書いてほしい場合はコメントしてください。

于 2010-03-23T09:38:02.737 に答える
0

ほとんどの MPI データ転送呼び出しにはstride引数がありませんでしたか? データ型のサイズに行列の高さを掛けた値に設定すると、そこに行きます...

私はMPI リファレンスを調べましたが、それに対する明示的な引数はありませんでしたが、5.12 の例に行くと、ストライドされた int をMPI_Scattervandで送信する方法が示されていますMPI_Gatherv

于 2010-03-23T09:41:30.363 に答える