通过OpenMPI发送int向量的向量

时间:2017-12-23 00:41:04

标签: c++ vector openmpi

我已经设置了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错误,所以我一定做错了。我的问题是这种方法有什么问题,或者如果有更有效的方法可行,甚至更好!?

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

1 个答案:

答案 0 :(得分:0)

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

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

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