Application of Boost MPI

Boost MPI provides a convenient wrapper to send/receive c++ objects.

#include "stdafx.h"
#include <boost/mpi.hpp>
#include <iostream>
#include <vector>
#include <string>
namespace mpi = boost::mpi;

using namespace std;

class cPerson{
public:
    friend class boost::serialization::access;

    template<class Archive>
     void serialize(Archive &ar, const unsigned int version)
     {
       ar & name;
       ar & address;
       ar & age;
       ar & height;
       ar & weight;
       ar & gender;
     }
     cPerson(){;};
    cPerson(string &namet,string &addresst,int aget,double heightt,double weightt,char gendert) : name(namet),address(addresst),age(aget),height(heightt),weight(weightt),gender(gendert){};
    string get_name()const {return name;}
    string get_address()const {return address;}
    int    get_age() const {return age;}
private:
    string name,address;
    int age;
    double height,weight;
    char gender;
};


int main(int argc, char *argv[])   {
  mpi::environment env(argc, argv);
  mpi::communicator world;

  if(world.rank() == 0) {
    std::vector<cPerson> person;
    string name1="Xiao Ming";
    string add1="Beijing china";
    char gen1 = 'M';
    person.push_back(cPerson(name1,add1,20,1.90,180,gen1));

    string name2="Xiao Qiang";
    string add2="Shanghai china";
    char gen2 = 'M';
    person.push_back(cPerson(name2,add2,20,1.90,180,gen2));
    for(int i=1;i<world.size();i++){world.send(i, 100, person);};
  }
  else {
    std::vector<cPerson> person;
    world.recv(0, 100, person);
    std::cout << "Rank= "<<world.rank()<<" Received information:" << std::endl;
    for(int i=0;i<person.size(); i++) {
     std::cout<<"Name: "<<person[i].get_name()<<std::endl;
     std::cout<<"Addr: "<<person[i].get_address()<<std::endl;
     std::cout<<"Name: "<<person[i].get_age()<<std::endl;
     std::cout<<" "<<std::endl;
    }
  }
  return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值