在MPI,C ++中发送动态数组

时间:2014-03-13 20:24:29

标签: c++ boost mpi

我的任务是测量两个过程之间的通信时间。 我想发送4,8,...,1000,....,10000字节的数据并测量发送和接收消息所需的时间。 所以我发现我会发送一系列短裤。

当我发送数组初始化时:

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

时间似乎还可以,我可以看到消息[100000]和[1000]之间的时差

但我想动态分配数组:

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

似乎第二个发送总是发送相同数量的数据,无论数组的大小是多少。

所以我的问题是,如何发送动态分配的数组?

1 个答案:

答案 0 :(得分:2)

在第二种情况下,message类型为short **message取消引用标量short,即仅引用数组的第一个元素。使用

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

而是改变n的值。如果你将指针强制转换为指向数组的指针,然后取消引用它,它也应该(可能)工作:

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

int(*)[100]类型是指向包含100个元素的整数数组的指针。