gpt4 book ai didi

c++ - 如果 recv 和 send 匹配,mpi 请求是否完成

转载 作者:行者123 更新时间:2023-11-30 01:26:17 24 4
gpt4 key购买 nike

从两个匹配的非阻塞发送和接收操作中只检查一个请求对象是否足够?

这会很棒,因为这会减少在我的程序中处理请求对象的工作量。

这是一个使用 boost mpi 的小例子:

#include <boost/mpi.hpp>

int main(int argc, char* argv[]) {
// initialize mpi

mpi::environment env(argc, argv);
boost::mpi::communicator world;
boost::mpi::request req0, req1;
double blub;
if(world.rank()==1)
req1 = world.irecv(0, 23, blub);
if(world.rank()==0)
req0 = world.isend(0, 23, blub);

//now I want to synchronize the processors is this enough?
req0.wait();
//or do I also need this line
req1.wait();

}

最佳答案

排名 1 没有有效的 req0,排名 0 没有有效的 req1;它们是仅对实际执行非阻塞操作(并返回请求句柄)的任务有效的请求。

所以不,这里的 rank 都不需要(甚至可以)在两个请求上调用等待;每个都根据它的请求调用等待,例如

if(world.rank()==0)
req0.wait();
if(world.rank()==1)
req1.wait();

或者,更好(我假设 0 级的 isend 应该去 1 级,而不是 0):

boost::mpi::request req;
...
if(world.rank()==1)
req = world.irecv(0, 23, blub);
if(world.rank()==0)
req = world.isend(1, 23, blub);

if (world.rank() == 0 || world.rank() == 1)
req.wait();

请注意,当您确实需要等待多个请求对应的多个操作时,您可以有一个请求列表并调用wait_all。 .

关于c++ - 如果 recv 和 send 匹配,mpi 请求是否完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10817192/

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