ノード間で 2D 配列データを共有するための MPI 通信
並列コンピューティングでは、パフォーマンスを最適化するために複数のノード間でデータを分散することが必要になることがよくあります。 。この場合の目標は、MPI を使用して 2D 配列を送受信し、計算を 4 つのノードに分割して処理することです。
提案されたアプローチ
最初のアプローチには、送信が含まれます。 MPI_SEND と MPI_RECEIVE を使用して隣接ノード間のエッジ値を取得します。たとえば、ノード 0 はエッジ データをノード 1 に送信し、ノード 1 からデータを受信しますが、他のノード間でも同様の操作が発生します。
改訂されたアプローチ
提案されたアプローチは次のことができます。データ構造と通信パターンを最適化することで改善できます。配列を連続ブロックとして割り当てると、2D 配列全体の送受信が簡素化されます。 MPI_Barriers を使用する代わりに、ブロッキング送受信を使用することをお勧めします。次のコードは、この改訂されたアプローチの例です。
if (myrank == 0) { MPI_Send(&(A[0][0]), N*M, MPI_INT, 1, tagA, MPI_COMM_WORLD); MPI_Recv(&(B[0][0]), N*M, MPI_INT, 1, tagB, MPI_COMM_WORLD, &status); } else if (myrank == 1) { MPI_Recv(&(A[0][0]), N*M, MPI_INT, 0, tagA, MPI_COMM_WORLD, &status); MPI_Send(&(B[0][0]), N*M, MPI_INT, 0, tagB, MPI_COMM_WORLD); }
代替アプローチ
考慮すべきその他の手法は次のとおりです。
デッドロック回避の最適化
回避すべきコミュニケーション パターンには細心の注意を払う必要があります行き詰まり。提案されたアプローチでは、プロセスが他のノードからのデータを無期限に待機しないようにすることが重要です。送受信をブロックすると、そのような状況を防ぐことができます。
以上がノード間で 2D 配列データを共有するために MPI 通信を最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。