是否存在符合逻辑的C ++?

时间:2018-01-10 12:50:47

标签: c++ mpi

有没有办法用触发器调节某些东西? 具体来说,我有一个MPI实现,并希望在收到其他一些后立即发送一些数据。 到现在为止我已经使用过:

MPI_Wait(&recv_request,&status)
MPI_ISend(...)

我想知道是否有办法跳过等待并进行一些计算,只有在recv_request被触发时才会回来。

1 个答案:

答案 0 :(得分:1)

MPI中的解决方案是使用MPI_Test

int flag;
MPI_Test(&recv_request, &flag, &status);
while (!flag) {
    do_work();
    MPI_Test(&recv_request, &flag, &status);
}
// At this point, the request state is the same as for a completed MPI_Wait

do_work的工作粒度是一种权衡。如果每次调用工作量太少,则连续测试的开销将很大,并且几乎不会进行任何工作。如果在每次通话中工作量太大,则延迟会增加。如果您使用MPI_Wait,则与MPI_Test相比的延迟总是更糟。

现在还有其他方法可以通过使用线程来实现,但这可能会更复杂,尤其需要一个与必要线程级别兼容的MPI实现。