MPI在某个进程找到解决方案时使用广播结束程序
MPI end program with Broadcast when some process finds a solution
我在使用MS-MPI结束程序时遇到问题
所有的返回值看起来都很好,但我必须在cmd中ctrl+c才能结束它(看起来它不在计算,所以退出条件看起来很好)
我想用N个进程运行一个程序。当其中一个找到解决方案时,它应该将标志设置为false,将其发送给所有其他人,然后在下一次迭代中,它们都将停止,程序结束
这个程序实际上做了一些更高级的计算,为了清晰起见,我正在编写简化版本。我只是想确保沟通有效。
int main(int argc, char* argv[])
{
MPI_Init(&argc, &argv);
int world_size;
MPI_Comm_size(MPI_COMM_WORLD, &world_size);
int world_rank;
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
//sets as 0 -> (N-1) depending on number of processes running
int c = world_rank;
bool flag = true;
while (flag) {
std::cout << "process: " << world_rank << " value: " << c << std::endl;
c += world_size;
//dummy condition just to test stop
if (c == 13) {
flag = false;
}
MPI_Barrier(MPI_COMM_WORLD);
//I have also tried using MPI_Bcast without that if
if(!flag) MPI_Bcast(&flag, 1, MPI_C_BOOL, world_rank, MPI_COMM_WORLD);
MPI_Barrier(MPI_COMM_WORLD);
} //end of while
MPI_Finalize();
return 0;
}
我认为它的工作原理:它从每个进程定义其c和标志开始,然后在每次(while)传递时,它将其c递增一个固定的数字。然后,当它达到停止条件时,它将标志设置为false,并将其发送给所有剩余的进程。当我用4个进程运行它时,我得到了什么:
流程:0值:0
流程:2值:2
进程:1值:1
过程:3值:3
程序:1值;5
处理:3值;7
工艺:0值;4
工序:2值;6
工程:3值,11
加工:1值,9
:2值,10
(我对这几个额外的值很满意)
但在那之后,我必须用ctrl+c手动终止它。当在1个进程上运行时,它会从1平滑地变为12并退出。
MPI_Bcast()
是一个集体操作,通信器的所有列都必须为root
参数使用相同的值(在您的程序中,它们都使用不同的值)。
一种有效的方法(尽管不太可能是最佳方法)是向秩0
发送终止消息,相应地更新flag
,并使所有秩调用MPI_Bcast(..., root=0, ...)
。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- C++,系统无法执行指定的程序
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 重载操作程序时出错>>用于类中的字符串 memebr
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 试图在visual studio上用C++创建一个桌面应用程序
- 模板元程序查找相似的连续类型名称
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 如何通过cpp程序运行shell脚本
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- IPC使用多个管道和分支进程来运行Python程序
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 基于boost的程序的静态链接——zlib问题
- 程序崩溃并显示"std::out_of_range"错误
- 在C应用程序中运行C++(带有STL)函数
- MPI在某个进程找到解决方案时使用广播结束程序
- 具有单消息和广播的c++客户机/服务器应用程序