Bulk merge of the develop branch.
This include, bug fixes, new features (like scaterv and gatherv), doc
changes etc.. some of which have been around for some time now.
A more "incremental" merge could have been in order, but recent changes
in the serialization library have hurt the homogenenous Boost MPI
very hard (does not build at all anymore) and extreme times calls for
extreme measures (and git beeing what it is, it is not clear a mere
mortal with a day job could handle the process).
This merge had passed all its test in both homogeneous mode (now the
default) and heterogenous and the priority is probably to avoid
shipping the next release with a broken build.
Some implementations have issues with using MPI_BOTTOM in MPI_Bcast.
If that the case we can use an alternate implementation.
There is a macro in config.hpp named BOOST_MPI_BCAST_BOTTOM_WORKS_FINE
that can be used to control that. broadcast_test.cpp print a message
that point to that macro if suspicious behavior is detected.
LAM and Bull X MPI seems to have that problem.
pfto.hpp has been removed from serialization. Although it was not used
anymore, it was still referenced in MPI.
The reason why the problem went unotced for such long time was that
there is a regular distribution of boost on a developper platform.
Shame on him.
Some instruction were not in line with the current build process anymore.
Also, the supported (well, tested) list of MPI implementations was not up tu date.
Add a (possibly redundant) using decl to allow documentation generation.
Possibly not very clean, but boostbook being what it is right now, let give
a break to the nice people who wants to test the doc.
When calling MPI_Topo_test, explicitly deal with MPI_COMM_NULL as it is not a legal value.
Although it is what is return for leftovers process when creating cartesian or graph
communicators.
In wait_any, we need to test for compound recv of serialized object that just got the size but not the body (that is, request[1] == null & handler != null).
Note that in:
if (current->m_requests[0] != MPI_REQUEST_NULL &&
(current->m_requests[1] != MPI_REQUEST_NULL ||
current->m_handler)) {
if (optional<status> result = current->test())
return std::make_pair(*result, current);
}
I suspect the 3 line test should be removed and every thng handled in request::test (which is supposed to tell wheter we have a complete request).
But I have no idea why it was done like that in the first place.
(cherry picked from commit ed4852863a)
A few const were missing in save_override variants. As a result the most generl function was selected instead of the most specific versions.
Only trigger in BOOST_MPI_HOMOGENEOUS mode.
had to be made in the MPI library (extra argument were inserted only
to help overloading resolution and had to be removed). I missed one
in heterogrneous mode. Here it is.
Fix#10444: MPI archive failure
No, I wasn't sure enough of the impact of this change to want it in 1.57. I just merged it now, we'll have 3 months to make sure it doesn't cause any problems. I apologize for the delay.
MPI_COMM_NULL is not a valid argument for MPI_Topo_test.
But it is used to indicated leftover processes when creating graph communicator or cartesians grids (for exampl, when you create a 2X2 grid from a 5 process communicator).
So we need to deal with it as a special case.
Wait_any is missing some compound recv with intel MPI.
In practice, this change should only affect implementations which, when stacking 2 send or 2 recv will only execute the second one when the first one is completed. As a result, when testing a compound recv on compound send, we get a catch22. This merge fixes that problem.