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.
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.
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.