如何持续运行 MPI 程序

How to continuosly run MPI programs?

本文关键字:程序 MPI 运行 何持续      更新时间:2023-10-16

我正在使用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();
}