Отправка массива int через MPI_Send - PullRequest
0 голосов
/ 27 ноября 2018

Я новичок в MPI, и я хотел бы отправить массив int через MPI_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 голосов
/ 12 декабря 2018

Если вы собираетесь динамически распределять массив, отправка и получение будут:

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 выглядит нормально, однако может помочь обновление вашего использования указателей языка Си.

РедактироватьКак уже упоминал Жиль, всем процессам, получающим данные в массив, также должна быть выделена память для них.(Может быть, сначала отправьте размер данных, чтобы получатель знал, насколько велик размер массива? Есть другие способы сделать это, однако это простое объяснение)

...