Dezhi Zhou
Dezhi Zhou

Reputation: 21

How to send pointer in struct in MPI

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!

Upvotes: 0

Views: 3928

Answers (1)

user3002273
user3002273

Reputation:

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.

Upvotes: 1

Related Questions