MPI を使用してノード間で 2D 配列を効率的に送受信するにはどうすればよいですか?
MPI を介した 2D 配列の送受信
並列処理に MPI を利用すると、特に大規模な行列を含む計算の場合、パフォーマンスに大きな利点が得られます。このようなシナリオでは、行列を複数のノードに分割すると、プロセスを大幅に最適化できます。
エッジ値共有の実装
提供されたシナリオでは、各ノードはエッジ値を共有する必要があります。その隣人たち。 MPI を使用してこれを実現するための推奨スキームは次のとおりです。
if (myrank == 0) { for (i = 0 to x) { for (y = 0 to y) { C++ CODE IMPLEMENTATION MPI_SEND(A[x][0], A[x][1], A[x][2], Destination= 1...) MPI_RECEIVE(B[0][0], B[0][1]......Sender = 1...) } } if (myrank == 1) { for (i = x+1 to xx) { for (y = 0 to y) { C++ CODE IMPLEMENTATION MPI_SEND(B[x][0], B[x][1], B[x][2], Destination= 0...) MPI_RECEIVE(A[0][0], A[0][1]......Sender = 1...) } } }
配列割り当ての最適化
メモリ管理と MPI 通信を簡素化するには、連続した要素を持つ配列を割り当てることを検討してください。 C の「多次元配列」の代わりに。これは、次のような関数を使用して実現できます。
int **alloc_2d_int(int rows, int cols) { int *data = (int *)malloc(rows*cols*sizeof(int)); int **array= (int **)malloc(rows*sizeof(int*)); for (int i=0; i<rows; i++) array[i] = &(data[cols*i]); return array; } int **A; A = alloc_2d_init(N,M);
MPI Send/Receive
配列が連続して割り当てられると、N x M 配列全体の送受信が簡単になります。 :
MPI_Send(&(A[0][0]), N*M, MPI_INT, destination, tag, MPI_COMM_WORLD);
バリアと送受信のブロッキング
MPI は、ブロッキング (MPI_Send など) や非ブロッキング (MPI_Send など) を含む通信用の複数の機能を提供します。 MPI_Isend)。通信が本質的に同期しているため、ブロック操作の場合、バリアは不要です。
その他の MPI 関数
MPI_Send と MPI_Receive に加えて、より柔軟な通信を行うには MPI_Sendrecv の使用を検討してください。通信と計算をオーバーラップする MPI_Isend や MPI_Irecv などのノンブロッキング操作。
以上がMPI を使用してノード間で 2D 配列を効率的に送受信するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











C言語関数によって返される値の種類は何ですか?返品値を決定するものは何ですか?

STL(ソート、検索、変換など)のアルゴリズムを効率的に使用するにはどうすればよいですか?
