私はMPIを使って分散画像(グレースケール)畳み込みを実装しています。私の既存のパターンは、ルートプロセスでイメージを1Dフラットアレイとして読み取った後、それらをすべてのプロセス(行分解)に散布し、ルートプロセスでMPI_Gather
を実行し、イメージを1Dフラットアレイ。明らかに、これは期待された結果をもたらしません。なぜなら、画像の畳み込みによって、状況は境界では厄介になるからです。MPIのゴーストセル交換パターン
if (rank == 0) {
src = null
dest = rank + 1
}
if (rank == size - 1) {
src = rank - 1
dest = null
} else {
src = rank - 1
dest = rank + 1
}
MPI_SendRecv(&sendbuf[offset], slen, dest..
&recvbuf[offset], rlen, src);
がどのように私は「幽霊のためにメモリを割り当てるか:
ので、前述のパターンを改善するために、私は、プロセスは擬似コードでghost rows.
で自分の行を交換する前記いわゆるghost cell exchange
パターンを実装したいです各プロセスの「行」?私はメモリをあらかじめ割り振ってから散らすべきですか?私が検討している問題の範囲を過度に超えているので、私は「カスタムデータ型」の解決策に行きたくはありません。
完全に明確な答えをいただきありがとうございます。あなたは通信コストについて何か言及しました。今度は、画像サイズを増やしてこのモデルをテストすると、パフォーマンスが低下するはずです。 –
基本的に、1次元分解の通信コストは、2次元分解*より悪くなります。通信のオーバーヘッドは、画像サイズ(大きい方が良い)、ランクの数(少ない方が良い)、繰り返しごとの計算(それ以上の方が良い)のバランスに依存します。 – Zulan
私はその部分に同意します.1dのコミュニケーションには多くの交流が必要です。あなたのすべての協力に感謝します。私は先に進み、すぐに答えを受け入れる –