通过MPI_Send

时间:2018-11-27 18:14:35

标签: c mpi openmpi

我是MPI的新手,我想通过intMPI_Send数组发送到另一个进程。

// Code example

      int main(int argc, char ** argv)
      {
       int * array;
       int tag=1;
       int size;
       int rank;
       MPI_Status status;
       MPI_Init (&argc,&argv);
       MPI_Comm_size (MPI_COMM_WORLD,&size);
       MPI_Comm_rank (MPI_COMM_WORLD,&rank);
       if (rank == 0)
       {
         array = malloc (10 * sizeof(int)); // Array of 10 elements
         if (!array) // error checking
         {
          MPI_Abort (MPI_COMM_WORLD,1);
         }
       MPI_Send(&array,10,MPI_INT,1,tag,MPI_COMM_WORLD);
       }
       if (rank == 1)
       {
        MPI_Recv (&array,10,MPI_INT,0,tag,MPI_COMM_WORLD,&status);
        // more code here
       }
      MPI_Finalize();
// More code here

我想问三件事。

  1. 这是将数组发送到另一个进程级别的安全方法吗?
  2. 这是MPI_Send()MPI_Recv()的语法明智的正确用法吗?
  3. 有没有更好的方式发送和接收数组而没有太多麻烦?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

如果要动态分配数组,则发送和接收为:

MPI_Send(array,10,MPI_INT,1,tag,MPI_COMM_WORLD);

MPI_Recv (array,10,MPI_INT,0,tag,MPI_COMM_WORLD,&status);

(请注意,数组是array而不是&array

如评论中所建议,您对MPI的理解似乎不错,但是刷新使用C指针可能会有所帮助。

编辑:正如Gilles提到的,所有将数据接收到数组中的进程也需要为其分配内存。 (也许首先发送数据的大小,以便接收方知道分配数组的大小?但是还有其他方法可以做到这一点,这是一个简单的解释)