damian
damian

Reputation: 352

Sending dynamic arrays in MPI, C++

My task is to measure time of communication betweeen two processes. I want to send 4,8,...,1000,...., 10000 bytes of data and measure time it takes to send and receive back the message. So i figured out that i will send an array of shorts.

When i send array initialised like that:

mpi::communicator world;
short message[100000];
....
world.send(1,0, message);

time seems to be ok, and I can see a time difference between message[100000] and [1000]

But I want to allocate array dynamically like that:

short *message = new short[100000];
...
world.send(1,0, *message);

It seems like the second send is always sending the same amount of data no matter what size the array will be.

So my question is, how to send a dynamically allocated array?

Upvotes: 0

Views: 1412

Answers (1)

Hristo Iliev
Hristo Iliev

Reputation: 74355

In the second case message is of type short * and *message dereferences to a scalar short, i.e. to the first element of the array only. Use

world.send(1, 0, message, n);

instead and vary the value of n. It should also (probably) work if you cast the pointer to a pointer to an array and then dereference it:

world.send(1, 0, *reinterpret_cast<int(*)[100]>(message));

The int(*)[100] type is a pointer to an integer array with 100 elements.

Upvotes: 2

Related Questions