通过OpenMPI发送INT矢量的向量

Sending vector of int vectors through OpenMPI

本文关键字:向量 INT OpenMPI 发送 通过      更新时间:2023-10-16

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

在Main上,我宣布了我的矢量,并使其两者发送和接收侧面:

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故障,因此我必须做错了什么。我的问题是这种方法出了什么问题,或者如果有更有效的方法可以做到的话,或者根本更好!?

此外,我更喜欢使用Boost,因此我可以更好地掌握此级别的情况。

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

使用两个向量,在两个位置将有ints,&v1[0]&v2[0](或C 11中的v1.data())。如果正确调整了向量大小,则可以将一个向量内的一个矢量中的一个INT数组记忆到另一个矢量中,但是无论如何,您必须每个向量进行一个发送操作(即每个实际的int阵列)。


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