MPIに、特定のプロセスのメッセージの可用性を通知する方法はありますか?現在、非同期MPI_Iprobeの後にMPI_Recvを使用してポーリングを使用しています。これは、プロセスが実行中の処理を停止し、このメソッドを時々呼び出す必要があることを意味します。信号/割り込みを介してメッセージの可用性について通知を受ける方法はありますか?別のオプションは、このポーリングを別のスレッドで実行することですが、CPU時間を消費するため、それが許容できるかどうかはわかりません。
int poll(int& source,int& message_id) {
int flag;
MPI_Status mpi_status;
MPI_Iprobe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD,&flag,&mpi_status);
if(flag) {
message_id = mpi_status.MPI_TAG;
source = mpi_status.MPI_SOURCE;
return true;
}
return false;
}
編集: MPI実装はポーリングを使用しているようですhttp://blogs.cisco.com/performance/polling-vs-blocking-message-passingprogress/
これに対する最善の解決策は、ブロッキングMPI_Probe()を使用してから、mpirun -n 2 --mca yield_when_idleを使用することです。これにより、メッセージが送信されるまでポーリングスレッドがブロックされます。ただし、一部のmpi実装にはmcaオプションがありません。