我正在使用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秒发送一条消息?谢谢
答案 0 :(得分:1)
您的更高级别的流程会在收到后退出。如果它们不应该,那么接收也必须处于循环中。
该程序的其他逻辑也必须适合那里。你可能会有一些函数来做其他有用的东西。即使是主人和其他人的完整代码也可能有不同的功能。
#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 %i\n",rank, color);
}
}
MPI_Finalize();
}