您的位置:首页 > 其它

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;}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: