ESI Comms optimisation: send to neighbours in reverse order
This commit is contained in:
parent
e73480637b
commit
358c854945
4 changed files with 60 additions and 24 deletions
|
@ -67,6 +67,26 @@ const Foam::NamedEnum<Foam::Pstream::commsTypes, 3>
|
||||||
|
|
||||||
void Foam::Pstream::setParRun(const label nProcs)
|
void Foam::Pstream::setParRun(const label nProcs)
|
||||||
{
|
{
|
||||||
|
if (nProcs == 0)
|
||||||
|
{
|
||||||
|
parRun_ = false;
|
||||||
|
freeCommunicator(Pstream::worldComm);
|
||||||
|
|
||||||
|
label comm = allocateCommunicator(-1, labelList(1, label(0)), false);
|
||||||
|
|
||||||
|
if (comm != Pstream::worldComm)
|
||||||
|
{
|
||||||
|
FatalErrorIn("Pstream::setParRun(const label)")
|
||||||
|
<< "problem : comm:" << comm
|
||||||
|
<< " Pstream::worldComm:" << Pstream::worldComm
|
||||||
|
<< Foam::exit(FatalError);
|
||||||
|
}
|
||||||
|
|
||||||
|
Pout.prefix() = "";
|
||||||
|
Perr.prefix() = "";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
parRun_ = true;
|
parRun_ = true;
|
||||||
|
|
||||||
// Redo worldComm communicator (created at static initialisation)
|
// Redo worldComm communicator (created at static initialisation)
|
||||||
|
@ -83,6 +103,7 @@ void Foam::Pstream::setParRun(const label nProcs)
|
||||||
|
|
||||||
Pout.prefix() = '[' + name(myProcNo()) + "] ";
|
Pout.prefix() = '[' + name(myProcNo()) + "] ";
|
||||||
Perr.prefix() = '[' + name(myProcNo()) + "] ";
|
Perr.prefix() = '[' + name(myProcNo()) + "] ";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -222,8 +222,11 @@ void Pstream::combineScatter
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send to my downstairs neighbours
|
// Send to my downstairs neighbours. Note reverse order (compared to
|
||||||
forAll (myComm.below(), belowI)
|
// receiving). This is to make sure to send to the critical path
|
||||||
|
// (only when using a tree schedule!) first.
|
||||||
|
// This is ESI Comms optimisation, v16.06. HJ, 19/Sep/2016
|
||||||
|
forAllReverse (myComm.below(), belowI)
|
||||||
{
|
{
|
||||||
label belowID = myComm.below()[belowI];
|
label belowID = myComm.below()[belowI];
|
||||||
|
|
||||||
|
@ -461,8 +464,11 @@ void Pstream::listCombineScatter
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send to my downstairs neighbours
|
// Send to my downstairs neighbours. Note reverse order (compared to
|
||||||
forAll (myComm.below(), belowI)
|
// receiving). This is to make sure to send to the critical path
|
||||||
|
// (only when using a tree schedule!) first.
|
||||||
|
// This is ESI Comms optimisation, v16.06. HJ, 19/Sep/2016
|
||||||
|
forAllReverse (myComm.below(), belowI)
|
||||||
{
|
{
|
||||||
label belowID = myComm.below()[belowI];
|
label belowID = myComm.below()[belowI];
|
||||||
|
|
||||||
|
@ -662,8 +668,11 @@ void Pstream::mapCombineScatter
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send to my downstairs neighbours
|
// Send to my downstairs neighbours. Note reverse order (compared to
|
||||||
forAll (myComm.below(), belowI)
|
// receiving). This is to make sure to send to the critical path
|
||||||
|
// (only when using a tree schedule!) first.
|
||||||
|
// This is ESI Comms optimisation, v16.06. HJ, 19/Sep/2016
|
||||||
|
forAllReverse (myComm.below(), belowI)
|
||||||
{
|
{
|
||||||
label belowID = myComm.below()[belowI];
|
label belowID = myComm.below()[belowI];
|
||||||
|
|
||||||
|
|
|
@ -183,8 +183,11 @@ void Pstream::scatter
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send to my downstairs neighbours
|
// Send to my downstairs neighbours. Note reverse order (compared to
|
||||||
forAll (myComm.below(), belowI)
|
// receiving). This is to make sure to send to the critical path
|
||||||
|
// (only when using a tree schedule!) first.
|
||||||
|
// This is ESI Comms optimisation, v16.06. HJ, 19/Sep/2016
|
||||||
|
forAllReverse (myComm.below(), belowI)
|
||||||
{
|
{
|
||||||
if (contiguous<T>())
|
if (contiguous<T>())
|
||||||
{
|
{
|
||||||
|
|
|
@ -290,8 +290,11 @@ void Pstream::scatterList
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send to my downstairs neighbours
|
// Send to my downstairs neighbours. Note reverse order (compared to
|
||||||
forAll (myComm.below(), belowI)
|
// receiving). This is to make sure to send to the critical path
|
||||||
|
// (only when using a tree schedule!) first.
|
||||||
|
// This is ESI Comms optimisation, v16.06. HJ, 19/Sep/2016
|
||||||
|
forAllReverse (myComm.below(), belowI)
|
||||||
{
|
{
|
||||||
label belowID = myComm.below()[belowI];
|
label belowID = myComm.below()[belowI];
|
||||||
const labelList& notBelowLeaves = comms[belowID].allNotBelow();
|
const labelList& notBelowLeaves = comms[belowID].allNotBelow();
|
||||||
|
|
Reference in a new issue