MPI を使用して分散型遺伝的アルゴリズム (島モデル) を実装しようとしています。すべてのノードは新しい集団を繰り返し生成し、k 回の反復ごとに最適な個体を交換します。任意のプロセスが他の任意のプロセスにメッセージを送信できるように交換をランダムにしたいと考えています。したがって、k回の反復ごとに、各プロセスはランダムに選択されたプロセスにメッセージを送信します。ただし、これを MPI で実装する方法がわかりません。この投稿 - Sending data to random selected hosts by using MPIから、非同期通信が役立つという考えが浮かびましたが、正確な方法はわかりません。
質問する
652 次
1 に答える
4
ランダムな通信パターンを MPI に実装するのは困難です。MPI は、決定論的な一連の通信パターンを持つすべてのランクに基づいています。
ポイント ツー ポイント ソリューションの場合、各ランクは MPI_ANY_SOURCE で MPI_Irecv を呼び出します。データ交換が発生すると、各ランクは MPI_Send を特定のターゲット ランクに呼び出すことができます。ターゲット ランクは、次の反復に備えるために MPI_Irecv を再度呼び出す必要があります。ジョブが完了すると、未使用の MPI_Irecv 呼び出しは MPI_Cancel できます。
集合的なアプローチの場合、各ランクは MPI_Alltoall または MPI_Alltoallv を呼び出します (交換されるデータの量が異なる場合)。各ランクは、データを受信するためにランダムに選択された 1 つのランクにのみデータを取り込みます。この種の「まばらな」データ交換は、MPI_Alltoall では非常に一般的です。集合はコストがかかる可能性がありますが、k 回の反復ごとにハード同期が可能であり、MPI_Cancel のクリーンアップを回避できます。
于 2013-04-27T01:56:42.307 に答える