ENH: earlier exit from interface polling in updateMatrixInterfaces

- exit the wait-some polling loop when no interfaces are left
  to be updated
This commit is contained in:
Mark Olesen
2023-05-08 17:41:47 +02:00
parent 98c42479f6
commit bddda09a08
2 changed files with 64 additions and 29 deletions

View File

@ -128,17 +128,26 @@ void Foam::LduMatrix<Type, DType, LUType>::updateMatrixInterfaces
// without waiting for all requests.
DynamicList<int> indices; // (work array)
while
for
(
UPstream::nPollProcInterfaces < 0
bool pollingActive = (UPstream::nPollProcInterfaces < 0);
(
pollingActive
&& UPstream::waitSomeRequests(startRequest, &indices)
);
/*nil*/
)
{
pollingActive = false;
forAll(interfaces_, interfacei)
{
auto* intf = interfaces_.get(interfacei);
if (intf && !intf->updatedMatrix() && intf->ready())
if (intf && !intf->updatedMatrix())
{
if (intf->ready())
{
intf->updateInterfaceMatrix
(
@ -151,6 +160,11 @@ void Foam::LduMatrix<Type, DType, LUType>::updateMatrixInterfaces
commsType
);
}
else
{
pollingActive = true;
}
}
}
}
}

View File

@ -131,17 +131,33 @@ void Foam::lduMatrix::updateMatrixInterfaces
// without waiting for all requests.
DynamicList<int> indices; // (work array)
while
// const label maxPolling =
// (
// (UPstream::nPollProcInterfaces < 0)
// ? (UPstream::nRequests() - startRequest)
// : UPstream::nPollProcInterfaces
// );
for
(
UPstream::nPollProcInterfaces < 0
bool pollingActive = (UPstream::nPollProcInterfaces < 0);
(
pollingActive
&& UPstream::waitSomeRequests(startRequest, &indices)
);
/*nil*/
)
{
pollingActive = false;
forAll(interfaces, interfacei)
{
auto* intf = interfaces.get(interfacei);
if (intf && !intf->updatedMatrix() && intf->ready())
if (intf && !intf->updatedMatrix())
{
if (intf->ready())
{
intf->updateInterfaceMatrix
(
@ -155,6 +171,11 @@ void Foam::lduMatrix::updateMatrixInterfaces
commsType
);
}
else
{
pollingActive = true;
}
}
}
}