HP-MPI User's Guide (11th Edition)
Frequently asked questions
Performance problems
Appendix D302
Performance problems
QUESTION: How does HP-MPI clean up when something goes wrong?
ANSWER: HP-MPI uses several mechanisms to clean up job files. Note
that all processes in your application must call MPI_Finalize.
• When a correct HP-MPI program (that is, one that calls
MPI_Finalize) exits successfully, the root host deletes the job file.
• If you use mpirun, it deletes the job file when the application
terminates, whether successfully or not.
• When an application calls MPI_Abort, MPI_Abort deletes the job file.
• If you use mpijob -j to get more information on a job, and the
processes of that job have all exited, mpijob issues a warning that
the job has completed, and deletes the job file.
QUESTION: My MPI application hangs at MPI_Send. Why?
ANSWER: Deadlock situations can occur when your code uses standard
send operations and assumes buffering behavior for standard
communication mode. You should not assume message buffering between
processes because the MPI standard does not mandate a buffering
strategy. HP-MPI does sometimes use buffering for MPI_Send and
MPI_Rsend, but it is dependent on message size and at the discretion of
the implementation.
QUESTION: How can I tell if the deadlock is because my code depends on
buffering?
ANSWER: To quickly determine whether the problem is due to your code
being dependent on buffering, set the z option for MPI_FLAGS. MPI_FLAGS
modifies the general behavior of HP-MPI, and in this case converts
MPI_Send and MPI_Rsend calls in your code to MPI_Ssend, without you
having to rewrite your code. MPI_Ssend guarantees synchronous send
semantics, that is, a send can be started whether or not a matching
receive is posted. However, the send completes successfully only if a
matching receive is posted and the receive operation has started to
receive the message sent by the synchronous send.