1
0
mirror of https://github.com/paboyle/Grid.git synced 2025-04-25 21:25:56 +01:00

More careful sequencing of comms

This commit is contained in:
Peter Boyle 2016-02-15 16:04:59 -06:00
parent f7be108e35
commit 340a29b735

View File

@ -112,10 +112,10 @@ namespace Grid {
comms_bytes+=2.0*bytes; comms_bytes+=2.0*bytes;
Packets.push_back(p); Packets.push_back(p);
} }
/*
#undef SERIAL_SENDS
#ifdef SERIAL_SENDS
void Communicate(void ) { void Communicate(void ) {
// typedef CartesianCommunicator::CommsRequest_t CommsRequest_t;
// std::vector<CommsRequest_t> reqs(0);
commtime-=usecond(); commtime-=usecond();
for(int i=0;i<Packets.size();i++){ for(int i=0;i<Packets.size();i++){
_grid->SendToRecvFrom( _grid->SendToRecvFrom(
@ -126,28 +126,42 @@ namespace Grid {
Packets[i].bytes); Packets[i].bytes);
Packets[i].done = 1; Packets[i].done = 1;
} }
// _grid->SendToRecvFromComplete(reqs);
commtime+=usecond(); commtime+=usecond();
} }
*/ #else
void Communicate(void ) { void Communicate(void ) {
typedef CartesianCommunicator::CommsRequest_t CommsRequest_t; typedef CartesianCommunicator::CommsRequest_t CommsRequest_t;
std::vector<CommsRequest_t> reqs(0); std::vector<std::vector<CommsRequest_t> > reqs(Packets.size());
commtime-=usecond(); commtime-=usecond();
for(int i=0;i<Packets.size();i++){ const int concurrency=2;
_grid->SendToRecvFromBegin(reqs, for(int i=0;i<Packets.size();i+=concurrency){
Packets[i].send_buf, for(int ii=0;ii<concurrency;ii++){
Packets[i].to_rank, int j = i+ii;
Packets[i].recv_buf, if ( j<Packets.size() ) {
Packets[i].from_rank, _grid->SendToRecvFromBegin(reqs[j],
Packets[i].bytes); Packets[j].send_buf,
Packets[j].to_rank,
Packets[j].recv_buf,
Packets[j].from_rank,
Packets[j].bytes);
}
}
for(int ii=0;ii<concurrency;ii++){
int j = i+ii;
if ( j<Packets.size() ) {
_grid->SendToRecvFromComplete(reqs[i]);
}
}
for(int ii=0;ii<concurrency;ii++){
int j = i+ii;
if ( j<Packets.size() ) {
Packets[j].done = 1;
}
}
} }
_grid->SendToRecvFromComplete(reqs);
commtime+=usecond(); commtime+=usecond();
for(int i=0;i<Packets.size();i++){
Packets[i].done = 1;
}
} }
#endif
/////////////////////////////////////////// ///////////////////////////////////////////
// Simd merge queue for asynch comms // Simd merge queue for asynch comms