MPI发送/recv的向量
MPI send/recv of a vector
大家好,我正在为大学涉及使用MPI库的一个项目,不幸的是,我无法分享整个代码,但我希望有人能给我一些指针。我需要将一个从proc x发送到proc 0的数组,但是当我在Google上阅读时,发送dinamycced创建的数组的唯一方法是找出大小,将大小发送到Proc 0,然后发送阵列(我无法预先确定它的大小(,所以这就是我在Proc X:
上所做的。vector<int> tosend = aglib.ExtractEvaluationFunctions();
int tosend_size = tosend.size();
MPI_Send(&tosend_size, 1, MPI_INT, 0, 666, MPI_COMM_WORLD);
MPI_Send(&tosend, tosend_size, MPI_INT, 0, 777, MPI_COMM_WORLD);
这是Proc 0上发生的情况(我无法共享与向量Tosend在Proc1中本地创建的相同缓冲区(:
vector<int> results_and_rank;
int results_rank_size;
MPI_Recv(&results_rank_size, 1, MPI_INT, MPI_ANY_SOURCE, 666, MPI_COMM_WORLD, &status);
MPI_Recv(&results_and_rank, results_rank_size, MPI_INT, MPI_ANY_SOURCE, 777, MPI_COMM_WORLD, &status);
cout << "size of results_and_rank is :"<< results_and_rank.size()endl;
cout<< "last element of array is :"<< results_and_rank.back()<<endl;
我认为通信效果很好,因为我能够读取与我发送的矢量相同的接收向量的大小,但是每当我尝试访问array rastem_and_rank的一个元素时,我的代码就会崩溃打印。顺便说一句,我需要将阻止通信用于我的项目。
我想念什么吗?谢谢您的时间和帮助。
您要将 data 接收到向量,因此您需要向量内部的数据,而不是向量本身。
在这里,您将std::vector
本身的地址传递给MPI_Recv()
,该地址将损坏std::vector
。
MPI_Recv(&results_and_rank, results_rank_size, MPI_INT, MPI_ANY_SOURCE, 777, MPI_COMM_WORLD, &status);
正确的方式:
发件人:
MPI_Send(&tosend[0], tosend_size, MPI_INT, 0, 777, MPI_COMM_WORLD);
接收器:
results_and_rank.resize(results_rank_size);
MPI_Recv(&results_and_rank[0], results_rank_size, MPI_INT, MPI_ANY_SOURCE, 777, MPI_COMM_WORLD, &status);
相关文章:
- 写入向量<向量<bool>>
- 函数向量_指针有不同的原型,我可以构建一个吗
- std::向量与传递值的动态数组
- 将值指定给向量(2D)的向量中的某个位置
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 如何使用向量的template_back函数
- 尝试通过多个向量访问变量时,向量下标超出范围
- 如何通过派生类函数更改基类中的向量
- C++从另一个类访问公共静态向量的正确方法是什么
- 如何将ampl中的集合表示为c++中的向量
- 变量没有改变?通过向量的函数调用
- 迭代时从向量和内存中删除对象
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 计算排序向量的向量中唯一值的计数
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 矩阵向量乘法(cublasDgemv)返回零
- 一对向量构造函数:初始值设定项列表与显式构造
- 将结构向量排序为子组
- MPI发送/recv的向量