通过OpenMPI发送INT矢量的向量
Sending vector of int vectors through OpenMPI
我已经设置了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风格数组中。与实际发送相比,本地复制不太昂贵。
相关文章:
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- EASTL矢量<向量<int>>连续的
- 如何写向量的无序向量集,即unordered_set<向量<向量<int>>集合?
- 为什么我不能返回向量<向量<int>>(进程返回 -1073741819 (0xC0000005))
- 如何在没有循环的C++中总结向量 int 的向量
- C++:向量<向量<int>>迭代器?
- C++:在向量<int> vn{MyAllocator<int>(a)} 中调用哪些构造函数?
- 初始化一个类型向量的巨大向量<int>
- adjacent_difference算法,back_inserter向量<向量<int>>
- 如何在函数中将向量<int>v[n] 作为变速器传递?
- 将向量<int>转换为整数
- 如何正确地将向量<int>转换为空隙*并返回向量<int>?
- 有没有一种优雅的方法来读取二进制文件并将其内容复制到向量<int>
- 从<string>向量<int>中定义的索引处的向量中删除字符串
- 如何使用另一个"Eigen::VectorXd"向量中的值初始化"Eigen::VectorXd",基于索引的"向量<int>"
- 有没有办法将向量<double>*指向向量<int>?
- 如何在不复制的情况下更新 std::unordered_map<std::string, std::vector> 中的向量<int>?
- 向量的向量 int 向量
- 在向量中仅制作外部向量<向量<int>>固定
- 如何在 c++ 中将质因数向量<int >减少到映射<int,int>?