I'm new to MPI and i would like to send an int
array via MPI_Send
to another process.
// 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
I would like to ask three things.
MPI_Send()
and MPI_Recv()
?Any help is appreciated.
If you are going to dynamically allocate the array, the send and receive would be:
MPI_Send(array,10,MPI_INT,1,tag,MPI_COMM_WORLD);
and
MPI_Recv (array,10,MPI_INT,0,tag,MPI_COMM_WORLD,&status);
(Note that array is array
and not &array
)
As suggested in the comments, your understanding of MPI seems fine however refreshing your usage of C pointers may help.
Edit: As mentioned by Gilles, all processes receiving data into an array need to have memory allocated for them too. (Maybe send the size of the data first so the receiver knows how big to allocate the array? There are other ways to do this however that is a simple explanation)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With