0

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

4

1 回答 1

1

接收后您的更高进程退出。如果他们不应该,接收也必须在一个循环中。

程序的其他逻辑也必须适合那里。你可能会使用一些函数来做其他有用的事情。即使是 master 和其他人的完整代码也可能在不同的函数中。

#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();
}
于 2013-11-06T07:26:25.653 回答