gpt4 book ai didi

sockets - MPI消息可用性通知

转载 作者:行者123 更新时间:2023-12-03 11:55:57 25 4
gpt4 key购买 nike

在MPI中,有没有一种方法可以针对特定进程通知消息的可用性? Currenlty我将轮询与异步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选项。

最佳答案

这样的机制不是以便携式方式直接可用的。

您可以使用带有MPI_Wait(或其 flavor )的线程-或更简单地使用MPI_Recv。但是,不能保证您的MPI实现在等待消息时不会消耗CPU。 (尽管可以保证通过MPI_Iprobe进行轮询确实会消耗100%的CPU。)另外,对于MPI和线程也要小心,存在陷阱和不同的操作模式。

您为什么首先要这样做?对于您的工作,可能会有更好的机制,例如使用单面沟通。

关于sockets - MPI消息可用性通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15122875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com