Supalov, Alexander wrote:
<snip> Another possible complication: let's swap the Send and Recv, and make Send synchronous (or rendezvous):
Irecv(1,req_r) Irecv(0,req_r) Issend(1,req_s) Issend(0,req_s) Waitall(req_s, req_r) Ssend(0) Recv(1) Waitall(req_s,req_r)
Here I have rather strong doubts that this will work. Do you? Why do you think that it won't work? It should work!
The Waitall at the left side progresses both {Irecv and Issend}. The Ssend at the right side progresses {Irecv, Issend and SSend}. Therefore the first two operations on both sides can be matched, processed and completed within the third function. The rest (i.e. recv left & ssend; waitall right) is easy: the recv matches the ssend and the right waitall will just return the status of both (already completed) nonblocking operations. Christian -- Christian Siebert, Dipl.-Inf. Research Associate NEC Laboratories Europe, NEC Europe Ltd. Rathausallee 10, D-53757 Sankt Augustin, Germany Phone: +49 (0) 2241 - 92 52 44 Fax: +49 (0) 2241 - 92 52 99 (Registered Office: 1 Victoria Road, London W3 6BL, 2832014)