【问题标题】:Sending dynamic arrays in MPI, C++在 MPI、C++ 中发送动态数组
【发布时间】:2014-04-18 20:44:17
【问题描述】:

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

当我发送这样初始化的数组时:

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

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

但我想像这样动态分配数组:

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

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

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

【问题讨论】:

  • 这是 mpi::communicator 世界;

标签: c++ boost mpi


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2014-09-17
    • 2021-07-23
    • 1970-01-01
    • 2013-12-20
    • 2013-11-13
    • 2012-03-19
    • 2012-03-05
    • 2021-06-11
    相关资源
    最近更新 更多