如何连续运行MPI程序?

时间:2013-11-06 07:20:39

标签: c++ mpi

我正在使用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秒发送一条消息?谢谢

1 个答案:

答案 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();
}