Boost logo

Boost Users :

Subject: Re: [Boost-users] boost mpi message truncated error
From: Júlio Hoffimann (julio.hoffimann_at_[hidden])
Date: 2012-12-10 15:36:15


Hi Kyle,

First of all, you have to clean up your code and produce a test case, don't
forget to paste the error message, it's useful.

This is a great start:

//send particlesfor(int i=0;i<world.size();i++) {
  world.isend(i,i,particles_to_be_sent[i]);}
//receive particlesint receive_counter=0;
boost::optional<boost::mpi::status>
msginfo=world.iprobe(mpi::any_source, world.rank());while
(receive_counter<world.size()) {
  if (msginfo) {
    world.recv(msginfo->source(),world.rank(),particles_received);
    // blah blah blah
    receive_counter++;
  }
  msginfo=world.iprobe(mpi::any_source,world.rank());}

Regards,
Júlio.

2012/12/10 Kyle Joseph Berger <Kyle.Berger_at_[hidden]>

> Hello,****
>
> ** **
>
> I am using boost mpi and I am having issues getting the message truncation
> error upon receiving a message. It is not always the same message, but it
> does always happen and I have been unable to figure out why. Here is the
> code of interest:****
>
> ** **
>
> //send particles ****
>
> for(int i=0;i<world.size();i++)****
>
> {****
>
> world.isend(i,i,particles_to_be_sent[i]);****
>
> }****
>
> ** **
>
> //receive particles****
>
> int receive_counter=0;****
>
> boost::optional<boost::mpi::status>
> msginfo=world.iprobe(mpi::any_source, world.rank());****
>
> while (receive_counter<world.size())****
>
> {****
>
> if (msginfo)****
>
> {****
>
>
> world.recv(msginfo->source(),world.rank(),particles_received);****
>
> for (unsigned inti=0;i<particles_received.size();i++)
> ****
>
> {****
>
> //add particle to its associated
> box in the particle grid****
>
>
> particle_grid[particles_received[i].location_number()].insert(pair<int
> ,Particle>(particles_received[i].global_part_num(),particles_received[i]));
> ****
>
> //check to see if the particle
> is contained within the box****
>
> if(particles_received[i].position().y()>grid_locations[particles_received[i].location_number()].bottom()
> ****
>
> &&
> particles_received[i].position().y()<grid_locations[particles_received[i].location_number()].top()
> ****
>
> &&
> particles_received[i].position().x()>grid_locations[particles_received[i].location_number()].west()
> ****
>
> &&
> particles_received[i].position().x()<grid_locations[particles_received[i].location_number()].east()
> ****
>
> &&
> particles_received[i].position().z()>grid_locations[particles_received[i].location_number()].south()
> ****
>
> &&
> particles_received[i].position().z()<grid_locations[particles_received[i].location_number()].north())
> ****
>
> {****
>
> //if particle is in box,
> then denote it as such in the particle properties****
>
>
> particle_properties[particles_received[i].global_part_num()].particle_in_box()[particles_received[i].location_number()]=
> true;****
>
> }****
>
> }****
>
> receive_counter++;****
>
> }****
>
> msginfo=world.iprobe(mpi::any_source, world.rank());*
> ***
>
> }****
>
> ** **
>
> I have left out variable definitions, but everything has the right type
> (including sending and receiving the same type-particles_to_be_sent[i] and
> particles_received are both vector<Particle>, where Particle is a type I’ve
> created).****
>
> ** **
>
> I thought that boost mpi is supposed to take care of making the receive
> buffer the right size on its own, but something isn’t working here. Any
> help would be appreciated.****
>
> ** **
>
> Thanks,****
>
> Kyle****
>
> ** **
>
> ** **
>
> ** **
>
> ** **
>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>



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