如果接收和发送匹配,MPI 请求是否完成
Does a mpi request finish if recv and send is matched
从
两个匹配的非阻塞发送和 recv 操作中只检查一个请求对象就足够了吗?
这将很棒,因为这将减少在我的程序中处理请求对象的工作量。
这里有一个带有提升 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
;它们是仅对实际执行非阻塞操作(并返回请求句柄)的任务有效的请求。
所以不,这里的排名都不需要(甚至不能)调用两个请求的等待;每个调用它拥有的请求的等待,例如
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。
相关文章:
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 用MacOS Mojave编译C++:致命错误:mpi.h:没有这样的文件或目录
- 如何在boost beast http请求中设置http头
- 发送一个带有libcurl C++问题的帖子请求:s
- MPI突然停止了对多个核心的操作
- 在多个核心中处理一个HTTP请求
- 设置 Visual Studio for MPI: 找不到标识符错误
- 使用 make 编译 MPI,几个命名空间错误,例如"错误:未知类型名称'使用'?
- 如何使用 MPI 的远程内存访问 (RMA) 功能并行化数据聚合?
- 错误:请求非类类型为"MULTIMEDIA_FILME [500]"的成员|
- 使用 Winsock2.h C++向不和谐 API 发送 HTTP 请求时出现问题
- 每个服务器请求的内存预算
- 重载 MPI 中的运算符 ()
- std::getline没有在while循环中重新请求用户输入
- 如何释放提升::mpi::请求
- 我错过了boost :: mpi ::请求?测试似乎改变了状态
- 如果接收和发送匹配,MPI 请求是否完成
- 测试后无法取消 MPI 请求
- 提升 mpi 请求m_handler的目的是什么
- MPI 警告:程序退出并显示未完成的接收请求