ENH: use bundled MPI_Test when checking processor interface ready()

- fewer calls, potentially more consistent

ENH: update sendRequest state after recvRequest wait

- previously had this type of code:

    // Treat send as finished when recv is done
    UPstream::waitRequest(recvRequest_);
    recvRequest_ = -1;
    sendRequest_ = -1;

  Now refined as follows:

    // Require receive data. Update the send request state.
    UPstream::waitRequest(recvRequest_);
    recvRequest_ = -1;
    if (UPstream::finishedRequest(sendRequest_)) sendRequest_ = -1;

  Can potentially investigate with requiring both,
  but this may be over-contrained.
  Example,

    // Require receive data, but also wait for sends too
    UPstream::waitRequestPair(recvRequest_, sendRequest_);
This commit is contained in:
Mark Olesen
2023-04-11 11:50:17 +02:00
parent 11065bb029
commit 9fbc484cdf
6 changed files with 69 additions and 79 deletions

View File

@ -60,13 +60,7 @@ Foam::lduCalculatedProcessorField<Type>::lduCalculatedProcessorField
template<class Type>
bool Foam::lduCalculatedProcessorField<Type>::ready() const
{
if (!UPstream::finishedRequest(this->sendRequest_)) return false;
this->sendRequest_ = -1;
if (!UPstream::finishedRequest(this->recvRequest_)) return false;
this->recvRequest_ = -1;
return true;
return UPstream::finishedRequestPair(recvRequest_, sendRequest_);
}
@ -173,10 +167,12 @@ void Foam::lduCalculatedProcessorField<Type>::updateInterfaceMatrix
return;
}
// Treat send as finished when recv is done
UPstream::waitRequest(recvRequest_);
recvRequest_ = -1;
sendRequest_ = -1;
// Require receive data. Update the send request state.
// OR: UPstream::waitRequestPair(recvRequest_, sendRequest_);
UPstream::waitRequest(recvRequest_); recvRequest_ = -1;
if (UPstream::finishedRequest(sendRequest_)) sendRequest_ = -1;
// Consume straight from receive buffer. Note use of our own
// helper to avoid using fvPatch addressing

View File

@ -171,10 +171,11 @@ void Foam::processorGAMGInterfaceField::updateInterfaceMatrix
{
// Fast path: consume straight from receive buffer
// Treat send as finished when recv is done
UPstream::waitRequest(recvRequest_);
recvRequest_ = -1;
sendRequest_ = -1;
// Require receive data. Update the send request state.
// OR: UPstream::waitRequestPair(recvRequest_, sendRequest_);
UPstream::waitRequest(recvRequest_); recvRequest_ = -1;
if (UPstream::finishedRequest(sendRequest_)) sendRequest_ = -1;
}
else
{

View File

@ -176,13 +176,7 @@ Foam::processorFaPatchField<Type>::processorFaPatchField
template<class Type>
bool Foam::processorFaPatchField<Type>::ready() const
{
if (!UPstream::finishedRequest(sendRequest_)) return false;
sendRequest_ = -1;
if (!UPstream::finishedRequest(recvRequest_)) return false;
recvRequest_ = -1;
return true;
return UPstream::finishedRequestPair(recvRequest_, sendRequest_);
}
@ -207,7 +201,7 @@ void Foam::processorFaPatchField<Type>::initEvaluate
const Pstream::commsTypes commsType
)
{
if (Pstream::parRun())
if (UPstream::parRun())
{
this->patchInternalField(sendBuf_);
@ -259,16 +253,17 @@ void Foam::processorFaPatchField<Type>::evaluate
const Pstream::commsTypes commsType
)
{
if (Pstream::parRun())
if (UPstream::parRun())
{
if (commsType == UPstream::commsTypes::nonBlocking)
{
// Fast path. Received into *this
// Treat send as finished when recv is done
UPstream::waitRequest(recvRequest_);
recvRequest_ = -1;
sendRequest_ = -1;
// Require receive data. Update the send request state.
// OR: UPstream::waitRequestPair(recvRequest_, sendRequest_);
UPstream::waitRequest(recvRequest_); recvRequest_ = -1;
if (UPstream::finishedRequest(sendRequest_)) sendRequest_ = -1;
}
else
{
@ -373,10 +368,11 @@ void Foam::processorFaPatchField<Type>::updateInterfaceMatrix
{
// Fast path: consume straight from receive buffer
// Treat send as finished when recv is done
UPstream::waitRequest(recvRequest_);
recvRequest_ = -1;
sendRequest_ = -1;
// Require receive data. Update the send request state.
// OR: UPstream::waitRequestPair(recvRequest_, sendRequest_);
UPstream::waitRequest(recvRequest_); recvRequest_ = -1;
if (UPstream::finishedRequest(sendRequest_)) sendRequest_ = -1;
}
else
{
@ -479,10 +475,11 @@ void Foam::processorFaPatchField<Type>::updateInterfaceMatrix
{
// Fast path: consume straight from receive buffer
// Treat send as finished when recv is done
UPstream::waitRequest(recvRequest_);
recvRequest_ = -1;
sendRequest_ = -1;
// Require receive data. Update the send request state.
// OR: UPstream::waitRequestPair(recvRequest_, sendRequest_);
UPstream::waitRequest(recvRequest_); recvRequest_ = -1;
if (UPstream::finishedRequest(sendRequest_)) sendRequest_ = -1;
}
else
{

View File

@ -76,13 +76,7 @@ Foam::calculatedProcessorFvPatchField<Type>::calculatedProcessorFvPatchField
template<class Type>
bool Foam::calculatedProcessorFvPatchField<Type>::ready() const
{
if (!UPstream::finishedRequest(this->sendRequest_)) return false;
this->sendRequest_ = -1;
if (!UPstream::finishedRequest(this->recvRequest_)) return false;
this->recvRequest_ = -1;
return true;
return UPstream::finishedRequestPair(recvRequest_, sendRequest_);
}
@ -109,7 +103,7 @@ void Foam::calculatedProcessorFvPatchField<Type>::initEvaluate
const Pstream::commsTypes commsType
)
{
if (Pstream::parRun())
if (UPstream::parRun())
{
if (!is_contiguous<Type>::value)
{
@ -164,12 +158,13 @@ void Foam::calculatedProcessorFvPatchField<Type>::evaluate
const Pstream::commsTypes commsType
)
{
if (Pstream::parRun())
if (UPstream::parRun())
{
// Treat send as finished when recv is done
UPstream::waitRequest(recvRequest_);
recvRequest_ = -1;
sendRequest_ = -1;
// Require receive data. Update the send request state.
// OR: UPstream::waitRequestPair(recvRequest_, sendRequest_);
UPstream::waitRequest(recvRequest_); recvRequest_ = -1;
if (UPstream::finishedRequest(sendRequest_)) sendRequest_ = -1;
}
}
@ -278,14 +273,16 @@ void Foam::calculatedProcessorFvPatchField<Type>::updateInterfaceMatrix
return;
}
if (Pstream::parRun())
if (UPstream::parRun())
{
// Treat send as finished when recv is done
UPstream::waitRequest(recvRequest_);
recvRequest_ = -1;
sendRequest_ = -1;
// Require receive data. Update the send request state.
// OR: UPstream::waitRequestPair(recvRequest_, sendRequest_);
UPstream::waitRequest(recvRequest_); recvRequest_ = -1;
if (UPstream::finishedRequest(sendRequest_)) sendRequest_ = -1;
}
// Consume straight from receive buffer. Note use of our own
// helper to avoid using fvPatch addressing
addToInternalField(result, !add, coeffs, scalarRecvBuf_);

View File

@ -111,6 +111,7 @@ Foam::processorFvPatchField<Type>::processorFvPatchField
if (!isA<processorFvPatch>(this->patch()))
{
FatalErrorInFunction
<< "\n patch type '" << p.type()
<< "' not constraint type '" << typeName << "'"
<< "\n for patch " << p.name()
<< " of field " << this->internalField().name()
@ -177,13 +178,7 @@ Foam::processorFvPatchField<Type>::processorFvPatchField
template<class Type>
bool Foam::processorFvPatchField<Type>::ready() const
{
if (!UPstream::finishedRequest(sendRequest_)) return false;
sendRequest_ = -1;
if (!UPstream::finishedRequest(recvRequest_)) return false;
recvRequest_ = -1;
return true;
return UPstream::finishedRequestPair(recvRequest_, sendRequest_);
}
@ -208,7 +203,7 @@ void Foam::processorFvPatchField<Type>::initEvaluate
const Pstream::commsTypes commsType
)
{
if (Pstream::parRun())
if (UPstream::parRun())
{
this->patchInternalField(sendBuf_);
@ -264,7 +259,7 @@ void Foam::processorFvPatchField<Type>::evaluate
const Pstream::commsTypes commsType
)
{
if (Pstream::parRun())
if (UPstream::parRun())
{
if
(
@ -274,10 +269,11 @@ void Foam::processorFvPatchField<Type>::evaluate
{
// Fast path: received into *this
// Treat send as finished when recv is done
UPstream::waitRequest(recvRequest_);
recvRequest_ = -1;
sendRequest_ = -1;
// Require receive data. Update the send request state.
// OR: UPstream::waitRequestPair(recvRequest_, sendRequest_);
UPstream::waitRequest(recvRequest_); recvRequest_ = -1;
if (UPstream::finishedRequest(sendRequest_)) sendRequest_ = -1;
}
else
{
@ -402,10 +398,11 @@ void Foam::processorFvPatchField<Type>::updateInterfaceMatrix
{
// Fast path: consume straight from receive buffer
// Treat send as finished when recv is done
UPstream::waitRequest(recvRequest_);
recvRequest_ = -1;
sendRequest_ = -1;
// Require receive data. Update the send request state.
// OR: UPstream::waitRequestPair(recvRequest_, sendRequest_);
UPstream::waitRequest(recvRequest_); recvRequest_ = -1;
if (UPstream::finishedRequest(sendRequest_)) sendRequest_ = -1;
}
else
{
@ -523,10 +520,11 @@ void Foam::processorFvPatchField<Type>::updateInterfaceMatrix
{
// Fast path: consume straight from receive buffer
// Treat send as finished when recv is done
UPstream::waitRequest(recvRequest_);
recvRequest_ = -1;
sendRequest_ = -1;
// Require receive data. Update the send request state.
// OR: UPstream::waitRequestPair(recvRequest_, sendRequest_);
UPstream::waitRequest(recvRequest_); recvRequest_ = -1;
if (UPstream::finishedRequest(sendRequest_)) sendRequest_ = -1;
}
else
{

View File

@ -172,10 +172,11 @@ void Foam::calculatedProcessorGAMGInterfaceField::updateInterfaceMatrix
{
// Fast path: consume straight from receive buffer
// Treat send as finished when recv is done
UPstream::waitRequest(recvRequest_);
recvRequest_ = -1;
sendRequest_ = -1;
// Require receive data. Update the send request state.
// OR: UPstream::waitRequestPair(recvRequest_, sendRequest_);
UPstream::waitRequest(recvRequest_); recvRequest_ = -1;
if (UPstream::finishedRequest(sendRequest_)) sendRequest_ = -1;
}
else
{