boost mpi message truncated error
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
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@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 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@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
participants (2)
-
Júlio Hoffimann
-
Kyle Joseph Berger