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 选项。