MPI.jl
MPI.jl copied to clipboard
Support for non-blocking collective communication
Are there plans to support non-blocking collectives in MPI.jl anytime soon. If not, is it due to a lack of (human) resources or are there technical issues that have prevented this in the past?
There are no technical obstacles as far as I'm aware, I think it is more that no one has made a request for them. Are there any in particular you need? Alternatively if you would like to wrap them yourself, please feel free to open a PR.
I was looking at MPI_Ireduce
to improve the performance for calculating the maximum delta t for global time stepping, and I saw that no non-blocking collective operations are supported in MPI.jl. Therefore I was wondering if there is a hard reason why this cannot be supported (although I couldn't think of one).
When I get around to it, I'll certainly be happy to open a PR; until then I'll just leave this open in case others are wondering the same (but feel free to close).
I've now simplified the collective buffer code. Hopefully this should make it easier to implement non-blocking versions.
If one wants to implement this, the non-blocking collectives should be listed here: https://www.mpi-forum.org/docs/mpi-3.1/mpi31-report/node95.htm#Node95. API-level wrappers seem to already be available, e.g. https://github.com/JuliaParallel/MPI.jl/blob/1b9ce103b65090cc1c9a5a213262424f65dca003/src/api/generated_api.jl#L593-L595 Hence, it seems one would only need to add more "high-level" wrapper functions, similar to, e.g., https://github.com/JuliaParallel/MPI.jl/blob/1b9ce103b65090cc1c9a5a213262424f65dca003/src/pointtopoint.jl#L62-L70
(For context, here is a relevant video-tutorial on the topic by Torsten Hoeflers: https://www.youtube.com/watch?v=HPstYOJi5Pw)