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:
parent
f7be108e35
commit
340a29b735
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user