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 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);
    // blah blah blah
    receive_counter++;
  }
  msginfo=world.iprobe(mpi::any_source,world.rank());
}

Regards,
Júlio.



2012/12/10 Kyle Joseph Berger <Kyle.Berger@colorado.edu>

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 int i=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@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users