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

Sending dynamic arrays in MPI, C++

本文关键字:动态 数组 MPI c++      更新时间:2023-10-16

我的任务是测量两个进程之间的通信时间。我想发送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);

无论数组大小如何,第二次发送似乎总是发送相同数量的数据。

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

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

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

,并改变n的值。如果您将指针强制转换为指向数组的指针,然后对其解引用,则应该(可能)工作:

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

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