boost mpi send recv-vector<class>
2016-03-01 05:12
309 查看
接上例:如果vector中元素是class,要将他们分给不同进程,程序如下:
#include "stdafx.h" #include <boost/mpi.hpp> #include <iostream> #include <vector> #include "VecAndMatrix.h" namespace mpi = boost::mpi; class cPoint { private: friend class boost::serialization::access; template<class Archive> void serialize(Archive &ar, const unsigned int version) { ar & x; ar & y; ar & z; ar & m; } public: double x,y,z; double m; cPoint(){;}; cPoint(double xt,double yt,double zt,double mt):x(xt),y(yt),z(zt),m(mt){;}; }; int main(int argc, char *argv[]) { mpi::environment env(argc, argv); mpi::communicator world; int tag = 99; std::vector<cPoint> v; for(int i=0;i<10;i++)v.push_back(cPoint(i,i,i,5)); if (world.rank() == 0) { int load = v.size()/world.size(); int start = load+v.size()%world.size(); for (int i = 1; i < world.size(); ++i){ std::vector<cPoint> to_send (v.begin()+start,v.begin()+start+load); world.send(i,tag,to_send); start+=load;} } else { std::vector<cPoint> v; world.recv(0,tag,v); for(int i=0;i<v.size();i++){ std::cout<<world.rank()<<'\t'<<i<<'\t'<<v[i].x<<'\t'<<v[i].y<<'\t'<<v[i].z<<'\t'<<v[i].m<<std::endl;} } }
相关文章推荐
- Java中final关键字用法总结
- Java中集合类用法总结
- spark streaming & storm
- Android应用的调试
- 如何记忆Android模拟器中的快捷键
- 反编译Android应用
- 我所理解的i++和++i
- Android中各种drawable的使用
- 机器学习能做什么
- 我与小娜(23):什么是“暗物质“?
- Maximum Likelihood(ML) 和 Maximum a posterior(MAP)的直观理解
- spark streaming
- php的学习历程
- codeblocks 搭建opencv
- LeetCode Add Digits
- [Immutable.js] Working with Subsets of an Immutable.js Map()
- CentOS6.5安装mysql5.7.11
- [Immutable,js] Iterating Over an Immutable.js Map()
- maven你这个烂东西
- ncurses笔记(1)——ncurses库的介绍与安装