<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Hi,
<div><br>
</div>
<div>TLDR: Why does iprobe not pick up messages that should be there?</div>
<div><br>
</div>
<div>In this use-case, a manager is calling iprobe  (via mpi4py) to look for messages received from various workers.
<br>
</div>
<div><br>
</div>
<div>In the receive function (1.), there is a loop over workers doing an iprobe for each worker, and only if it loops round them all receiving nothing does it come out. Each worker may have sent several messages.</div>
<div><br>
</div>
<div>loop:</div>
<div>   1. receive_func (loop over all workers doing iprobe - until none have anything)</div>
<div>   2. do some other stuff.</div>
<div><br>
</div>
<div>(actual code: https://github.com/Libensemble/libensemble/blob/main/libensemble/manager.py#L346)</div>
<div><br>
</div>
<div>The workers are sending with isend, and I know they have passed the isend call for all the required messages. Manager side, the iprobe loop does not necessarily pick up all messages in one call to receive_func (but if I replace each iprobe call with its
 own loop of several iprobes it does).</div>
<div><br>
</div>
<div>In my code, the iprobe is part of a loop which may occasionally spend some time in another function (2.), so I want to better understand why it may not pick up all the messages. Even if I put a delay of a few seconds in (2), it still has cycles that do
 not pick up the messages - as though a certain number of iprobes are required.<br>
</div>
<div><br>
</div>
<div>In particular, I want to understand whether the messages are present on the receiving end, maybe in the unexpected message buffer, but may not get picked up by the iprobe?</div>
<div>Or is there some delay on the sending end (I know from timing the code has passed the isend for all messages).</div>
<div><br>
</div>
<div>Also, as adding several iprobes (in their own sub-loop) always finds the messages, if the delay is not receiver side, then it must be doing some handshake?</div>
<div><br>
</div>
<div>I have seen answers online, which suggest that this is expected behavior, but I wonder if there is a fairly simple explanation as to why iprobe does not pick everything up? If its too complicated, then okay.</div>
<div><br>
</div>
<div>I am running on a Ubuntu laptop with $ mpirun --version</div>
<div>HYDRA build details:</div>
<div>    Version:                                 3.2.1</div>
<div><br>
</div>
<div>Thanks,</div>
<div><br>
</div>
Steve<br>
</div>
</body>
</html>