2017-11-28 16 views
0

私は全く新しいMPI並列プロセスを使用しています。2次元配列のMPIマスター/スレーブ

私は、MASTER/SLAVEアプローチに関する以下の問題を扱っています。

私はSIZE=5002D二乗配列を持っている、と私は次元のいくつかのブロックにそれを破るする必要があります。

D < SIZE

Iは、各プロセッサが受信し、Nが関与するプロセッサの数とサブブロックの寸法Dに依存する場合、マスタNブロックに送り返すマスター/スレーブMPIを実装する必要があります。

元の配列をストライプに分割して問題を解決することができましたが、四角形の処理方法はわかりません。

答えて

0

問題を簡略化するために、Dは500の除算値でなければなりません。今度はブロックの総数はblocks = sqr(500/D)になります。 Nは、n = blocks/cpusという行に沿ったものでなければなりません。

IMHO最も簡単な方法は、配列からDxD要素の正方形を作成し、そのチャンクをクライアントに送信することです。言語と方法によっては、小さなオブジェクトを作成してクライアントに送信したり、完全な行列を複製したり、チャンクの座標を送信したりすることができます。

0

他のオプションは、配列の特定の(サブ)正方形/矩形の派生データ型を作成するためにMPI_Type_create_subarray()を使用することです。

この派生データ型は、MPI_Scatter[v]()MPI_Gather[v]()などの集合演算では使用できません。これは、通常、データの分散/再組み立ての「自然な」MPI方法です。

+0

あなたは私にそれを使用する方法を見つけることができる参照をリンクできますか? ありがとう – rob