ENH: add request-driven polling/consumption of processor interfaces
- with (nPollProcInterfaces < 0) it does the following: - loop, waiting for some requests to finish - for each out-of-date interface, check if its associated requests have now finished (ie, the ready() check). - if ready() -> call updateInterfaceMatrix() In contrast to (nPollProcInterfaces > 0) which loops a specified number of times with several calls to MPI_Test each time, the (nPollProcInterfaces < 0) variant relies on internal MPI looping within MPI_Waitsome to progress communication. The actual dispatch still remains non-deterministic (ie, waiting for some requests to finish does not mean that any particular interface is eligible for update, or in any particular order). However, using Waitsome places the tight looping into the MPI layer, which results in few calls and eliminates behaviour dependent on the value of nPollProcInterfaces. TUT: add polling to windAroundBuildings case (for testing purposes)
Showing
- src/OpenFOAM/matrices/LduMatrix/LduMatrix/LduMatrixUpdateMatrixInterfaces.C 52 additions, 5 deletions...ces/LduMatrix/LduMatrix/LduMatrixUpdateMatrixInterfaces.C
- src/OpenFOAM/matrices/lduMatrix/lduMatrix/lduMatrixUpdateMatrixInterfaces.C 72 additions, 49 deletions...ces/lduMatrix/lduMatrix/lduMatrixUpdateMatrixInterfaces.C
- tutorials/incompressible/simpleFoam/windAroundBuildings/Allrun-parallel 2 additions, 1 deletion...mpressible/simpleFoam/windAroundBuildings/Allrun-parallel