Boost logo

Boost Users :

Subject: Re: [Boost-users] Using Boost.MPI with gather , data becomes overwritten after gather operation
From: emeplease (emeplease_at_[hidden])
Date: 2010-08-31 23:15:00


Hi, I found that if I move

        hostname = boost::asio::ip::host_name();
        rank = 0;

out from the constructor , and adding methods like setHostname(),
setRank(), it will work fine.

In the investigation, I found that the default constructor of the class
is invoked once during the gather operation.

Is it related to my problem? and Is it the result of some operations
from boost.serialization and boost.MPI ?

Thank you :)

On 09/01/2010 12:26 AM, hgc-01134_at_[hidden] wong wrote:
> Hi,
> I am trying to use Boost.MPI to do a very simple program that
> 1. Processes from different ranks do a gather operation
> 2. The gather operation will gather the CoProcessInfo ( which is just
> a data structure of rank# and hostname) into a vector
> 3. After the gather operation, Rank 0 will print the CoProcessInfo
> one by one in the vector.
>
> ------------------------------------------------------------------------------------------------------------------------------------------------------
> My testing environment consists of TWO virtual machine ( each of the
> machine has two cores ):
> Centos 5.5
> mpich2
> Boost.mpich2
> Boost 1.41
> mpiexec
> ------------------------------------------------------------------------------------------------------------------------------------------------------
>
>
> The expected output of the program should be something like ( just an
> example order of ranks ):
>
> Host VM1, Rank 0
> Host VM1, Rank 1
> Host VM2, Rank 2
> Host VM2, Rank 3
>
> ----------------------------------------------------------------------------------------------------------------------------------------------------------
> However, I got something like: ( just an example order of ranks ), the
> hostname is incorrect after gather operation ( three VM2 appears!)
>
> Host VM1, Rank 0
> Host VM2, Rank 1
> Host VM2, Rank 2
> Host VM2, Rank 3
>
>
> I found that each process CAN correctly found out the hostname and
> rank#, however, the data will become a bit like overwritten, after the
> gather operation. Thank you very much.
>
>
> ------------------------------------------- Source Code
> -------------------------------------------------------------------
> #include<boost/asio/ip/host_name.hpp>
> #include<iostream>
> #include<vector>
> #include<string>
> #include<boost/mpi/environment.hpp>
> #include<boost/mpi/communicator.hpp>
> #include<boost/mpi.hpp>
> #include<boost/archive/text_oarchive.hpp>
> #include<boost/archive/text_iarchive.hpp>
> #include<sstream>
> #include<fstream>
>
> using namespace std;
> namespace mpi = boost::mpi;
>
>
> class CoProcessInfo
> {
> private:
>
> string hostname;
> int rank;
>
>
> friend class boost::serialization::access;
> template<class Archive>
> void serialize(Archive& ar, const unsigned int /* version */)
> {
> ar& hostname& rank;
> }
>
> public:
> CoProcessInfo()
> {
> hostname = boost::asio::ip::host_name();
> rank = 0;
> }
>
> void setRank(int _rank)
> {
> rank = _rank;
> }
>
> string getHostname() const
> {
> return hostname;
> }
>
> int getRank() const
> {
> return rank;
> }
> };
>
> int main(int argc, char* argv[])
> {
> int myrank;
>
> mpi::environment env(argc, argv);
> mpi::communicator world;
> myrank = world.rank();
>
> CoProcessInfo localInfo;
> localInfo.setRank( myrank );
>
> std::vector<CoProcessInfo> coProcInfo;
> mpi::gather(world, localInfo, coProcInfo, 0);
>
> if( myrank == 0 ){
> for (std::vector<CoProcessInfo>::const_iterator it = coProcInfo.begin();
> it !=coProcInfo.end(); ++it) {
> cout<< endl<< " Host : "<< it->getHostname()<< " , Rank :"
> << it->getRank()<< endl;
> }
> }
> return 0;
> }
> -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>
> Regards,
> Joseph
>


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net