The ssend is meant to avoid large messages arriving unexpectedly
overwhelming the root. This was originally an issue on BG/P. Most
modern lower layer, e.g. ucx, will use some sort of rndv or traffic
control for large messages anyway, thus the ssend is unnecessary but
only adds to performance overhead.
Currently, ch4 doesn't implement ssend as an explicit rndv anyway, and
will have the same issue as the direct send.
This commit removes the ssend, just do direct send.
[ ] The ch4:ofi implements ssend merely by sending an ack upon completion. This is allowed by the MPI spec but kind of defeats the purpose of MPI_Ssend as a mean to always use RNDV. Besides, having to issue ack inside event loop causes recursive progress issue. I think we should just always fallback ssend to active message rndv -- if I fix the double copy issue in current ch4-am.
Author Checklist
[x] Provide Description
Particularly focus on why, not what. Reference background, issues, test failures, xfail entries, etc.
[x] Commits Follow Good Practice
Commits are self-contained and do not do two things at once.
Commit message is of the form: module: short description
Commit message explains what's in the commit.
[ ] Passes All Tests
Whitespace checker. Warnings test. Additional tests via comments.
[x] Contribution Agreement
For non-Argonne authors, check contribution agreement.
If necessary, request an explicit comment from your companies PR approval manager.
Pull Request Description
The ssend is meant to avoid large messages arriving unexpectedly overwhelming the root. This was originally an issue on BG/P. Most modern lower layer, e.g. ucx, will use some sort of rndv or traffic control for large messages anyway, thus the ssend is unnecessary but only adds to performance overhead.
Currently, ch4 doesn't implement ssend as an explicit rndv anyway, and will have the same issue as the direct send.
This commit removes the ssend, just do direct send.
Reference discussions in https://github.com/pmodels/mpich/pull/7121
[skip warnings]
TODO
ssend
merely by sending anack
upon completion. This is allowed by the MPI spec but kind of defeats the purpose ofMPI_Ssend
as a mean to always use RNDV. Besides, having to issueack
inside event loop causes recursive progress issue. I think we should just always fallbackssend
to active message rndv -- if I fix the double copy issue in current ch4-am.Author Checklist
module: short description
Commit message explains what's in the commit.