<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Hi all,<div class=""><br class=""></div><div class="">During the HACC WG call today, we discussed whether progress can be isolated by session. We devised this simple pseudo-code example (below) that shows the answer is “no”. With current progress rules in MPI-4.0 (unchanged from previous versions of MPI), the code must not deadlock at the place(s) indicated by the comments, even with one thread of execution, because the MPI_Recv procedure at process 0 must progress the send operation from process 0, which means the MPI_Recv procedure at process 1 is required to complete.</div><div class=""><br class=""></div><div class="">If MPI is permitted to limit the scope of progress during the MPI_Recv procedure to just the operations within a particular session, then it is permitted to refuse to progress the send operation from process 0 and deadlock inevitably ensues, unless the two libraries use different threads or MPI supports strong progress (both of which are optional).</div><div class=""><br class=""></div><div class="">We suggested an INFO assertion that would give the user the opportunity to assert that they would not code the application in a way that resulted in this kind of deadlock. It might be hard for the user to know for sure when it is safe to use such an INFO assertion, especially in the general case and with opaque/closed-source libraries. However, if the INFO assertion was supplied, MPI could be implemented with separated/isolated progress. The scope of progress is global (whole MPI process) at the moment — and that would have to be the default scope/value for the INFO assertion. Smaller scopes could be session, communicator/window/file, and even operation.</div><div class=""><br class=""></div><div class="">Process 0:<br class=""><br class="">library_A.begin_call -> {MPI_Issend(…, comm_A); }<br class=""><br class="">library_B.begin_call -> {MPI_Recv(…, comm_B); } // deadlock ?<br class=""><br class="">library_A.end_call -> {MPI_Wait(…, comm_A); }<br class=""><br class="">library_B.end_call -> { }<br class=""><br class="">Process 1:<br class=""><br class="">library_A.begin_call -> {MPI_Recv(…, comm_A); } // deadlock ?<br class=""><br class="">library_B.begin_call -> {MPI_Issend(…, comm_B); }<br class=""><br class="">library_A.end_call -> { }<br class=""><br class="">library_B.end_call -> {MPI_Wait(…, comm_B); }<br class=""><br class=""><div class="">
<meta charset="UTF-8" class=""><div dir="auto" style="text-align: start; text-indent: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;"><br class="Apple-interchange-newline">Cheers,</div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); letter-spacing: normal; text-transform: none; white-space: normal; word-spacing: 0px; text-decoration: none; -webkit-text-stroke-width: 0px; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; text-align: start; text-indent: 0px;">Dan.</div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); letter-spacing: normal; text-transform: none; white-space: normal; word-spacing: 0px; text-decoration: none; -webkit-text-stroke-width: 0px; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; text-align: start; text-indent: 0px;">—</div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); letter-spacing: normal; text-transform: none; white-space: normal; word-spacing: 0px; text-decoration: none; -webkit-text-stroke-width: 0px; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; text-align: start; text-indent: 0px;">Dr Daniel Holmes PhD</div><font color="#000000" class=""><span style="caret-color: rgb(0, 0, 0);" class="">Executive Director</span></font><br class=""><font color="#000000" class=""><span style="caret-color: rgb(0, 0, 0);" class="">Chief Technology Officer</span></font><br class=""><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); letter-spacing: normal; text-transform: none; white-space: normal; word-spacing: 0px; text-decoration: none; -webkit-text-stroke-width: 0px; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; text-align: start; text-indent: 0px;">CHI Ltd</div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); letter-spacing: normal; text-transform: none; white-space: normal; word-spacing: 0px; text-decoration: none; -webkit-text-stroke-width: 0px; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; text-align: start; text-indent: 0px;"><a href="mailto:danholmes@chi.scot" class="">danholmes@chi.scot</a></div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); letter-spacing: normal; text-transform: none; white-space: normal; word-spacing: 0px; text-decoration: none; -webkit-text-stroke-width: 0px; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; text-align: start; text-indent: 0px;" class=""><br class=""></div></div><br class="Apple-interchange-newline">
</div>

<br class=""></div></body></html>