有没有办法用触发器调节某些东西? 具体来说,我有一个MPI实现,并希望在收到其他一些后立即发送一些数据。 到现在为止我已经使用过:
MPI_Wait(&recv_request,&status)
MPI_ISend(...)
我想知道是否有办法跳过等待并进行一些计算,只有在recv_request
被触发时才会回来。
答案 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实现。