如何持续运行 MPI 程序
How to continuosly run MPI programs?
我正在使用MPI编写一个C++程序来模拟交通信号灯。基本上,我需要每两秒钟,进程 0 应该向所有其他进程(红绿灯)发送一条消息,他们需要更改颜色。我目前的方法类似于(我没有实际代码):
if ( process_rank == 0)
{
while(true)
{
Sleep(2000); //we sleep for 2 seconds
for(i=1; i<=n;i++)
{
MPI_Send( message to change color to process i);
}
}
}
else
{
MPI_Recv(message to change color);
}
代码还可以,没有编译错误,但问题似乎出在我的逻辑中。由于某种原因,我无法理解,该程序没有按照预期进行操作。有没有一种好方法可以持续运行 MPI 程序并每 X 秒发送一条消息?谢谢
您的更高进程在接收后退出。如果不应该,则接收也必须处于循环中。
此外,程序的其他逻辑必须适合那里。您可能会使用一些函数来执行其他有用的操作。即使是主站和其他主机的完整代码也可能具有不同的功能。
#include <stdio.h>
#include "mpi.h"
#include <unistd.h>
int main(argc,argv)
int argc;
char *argv[];{
int color, rank, numtasks;
MPI_Status status;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &numtasks);
if ( rank == 0)
{
color = 0;
while(1)
{
sleep(2); //we sleep for 2 seconds
for(int i=1; i<numtasks;i++)
{
color = (color + 1) % 3;
MPI_Send((void*)&color, 1, MPI_INT, i, 0, MPI_COMM_WORLD);
}
}
}
else
{
while(1)
{
MPI_Recv((void*)&color, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, &status);
printf("rank %i color is %in",rank, color);
}
}
MPI_Finalize();
}
相关文章:
- 从Visual Studio 2017运行MPI应用程序,每个进程在不同的cmd窗口中
- MPI 应用程序无法连接到 SMPD 管理器 (空):55846 错误 1722
- 使用MPI/OpenMP的C 程序带有派生数据类型(嵌套类对象)容器
- 为什么我的 MPI 应用程序会触发断点?
- 如何使用 Open MPI 使我的程序更快?我的 Open MPI 程序目前比原来慢,我有什么不明白的?
- 正在查找OpenMP+MPI应用程序的资源
- MPI在某个进程找到解决方案时使用广播结束程序
- 在Linux Makefile上运行MPI程序
- Python "print"嵌入到 MPI 程序中时不起作用
- 如何使用 MPI 程序从命令行读取参数
- 如何测试MPI程序
- 将带有迭代器的C++程序转换为 Boost MPI 并行程序
- 如何优化C++程序以运行 MPI
- 如何持续运行 MPI 程序
- 在 MPI 应用程序中处理信号/正常退出
- MPI程序仅捕获来自秩1的消息
- 如何使用MPI在多个独立启动的程序之间传输数据
- 使用MPI的客户端/服务器应用程序
- 使用MPI程序,所有进程都从用户输入获取数据
- 无法运行简单的 mpi 程序