How to send pointer in struct in MPI

半世苍凉 提交于 2021-01-29 08:06:16

问题


I have struct like this:

typedef struct
{
    int x;
    double *y;
    int **z;
}
ind;

how could I send pointer like *y and **z via MPI to other processes? I know that many answers said that never send pointers by MPI. But if I cannot change *y to an array because it is used in other part of the main program, what should I do to transfer them through processes via MPI? Especially for **z, how should I do ? Thanks in advance!


回答1:


Just following the code from the second example here, I did the following. I believe this is what you want.

#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>

int main(int argc, char *argv[]) {
  int *send, *recv;
  int rank, i;
  MPI_Status status;

  MPI_Init(&argc, &argv);
  MPI_Comm_rank(MPI_COMM_WORLD, &rank);

  send = malloc(sizeof(int)*10);
  recv = malloc(sizeof(int)*10);

  for (i=0;i<10;i++)
    send[i] = 5*i;

  if (rank == 0)
    MPI_Send(send, 10, MPI_INT, 1, 0, MPI_COMM_WORLD);
  else {
    MPI_Recv(recv, 10, MPI_INT, 0, 0, MPI_COMM_WORLD, &status);

    for (i=0;i<10;i++)
      printf("%d\n", recv[i]);
  }

  MPI_Finalize();
  return 0;
}

Running it outputs,

$ mpiexec -n 2 mpi_test
0
5
10
15
20
25
30
35
40
45

Now you just have to adapt it to your own problem.



来源:https://stackoverflow.com/questions/32217553/how-to-send-pointer-in-struct-in-mpi

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!