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; .... world.send(1,0, message);
time seems to be ok, and I can see a time difference between message and 
But I want to allocate array dynamically like that:
short *message = new short; ... 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?
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(*)>(message));
The int(*) type is a pointer to an integer array with 100 elements.