0

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?

1
  • it's mpi::communicator world; Commented Mar 13, 2014 at 20:28

1 Answer 1

2

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.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.