我的任务是测量两个过程之间的通信时间。 我想发送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);
似乎第二个发送总是发送相同数量的数据,无论数组的大小是多少。
所以我的问题是,如何发送动态分配的数组?
答案 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个元素的整数数组的指针。