通过OpenMPI发送int向量的向量

问题描述 投票:0回答:1

我已经设置了2个int向量的向量,现在我想发送它并通过OpenMPI接收它,以便我可以在从属节点上对这个结构进行计算。如果可能的话,我想一次性发送这个庞大的结构......

在主要方面,我已经宣布了我的向量并使其在发送和接收方面都很常见:

std::vector < std::vector<int> > temp;

在发送方面,我填写了这个结构,后来,我试图发送它:

MPI_Send(&temp[0], 2, MPI_INT, 1, 0, MPI_COMM_WORLD);

而且,在接收方,我一直在表演:

temp.resize(2);
MPI_Recv(&temp[0], 2, MPI_INT, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);

但是,一旦我尝试访问收到的项目,接收方就会抛出一个seg故障,所以我一定做错了。我的问题是这种方法有什么问题,或者如果有更有效的方法可行,甚至可能更好!?

此外,我不喜欢使用提升,所以我可以更好地掌握这个级别的情况。

c++ vector openmpi
1个回答
0
投票

你不能发送一组矢量。向量就像指向动态分配的数组的指针。您正在将指针(或向量的内存布局中首先出现的任何内容)复制到接收向量的数组中,然后尝试访问该地址(但该地址是指发送方中分配的内存)。

有两个向量,在两个地方都会有一些内容,&v1[0]&v2[0](或C ++ 11中的v1.data())。如果你正确地调整了向量的大小,你可以在一个向量中将一个int的数组存储到另一个向量中,但无论如何你必须对每个向量进行一次发送操作(即每个实际的int数组)。


编辑:如果你对这一切都不满意,只需将所有内容(两个向量的大小和内容)复制到一个大的int[] C风格的数组中。与实际发送相比,本地复制不太可能昂贵。

© www.soinside.com 2019 - 2024. All rights reserved.