def _expand_poll(self):
#log_debug(logger, self._log_prefix + "Polling for stack expansion")
expand = False
if self.comm.Iprobe(source=(self.comm.rank-1) % self.comm.size, tag=MPI_TAG_EXPAND):
buf1 = numpy.empty(1, dtype='i')
self.comm.Recv([buf1, MPI.INT], source=(self.comm.rank-1) % self.comm.size, tag=MPI_TAG_EXPAND)
buf2 = numpy.array(1, dtype='i')
self.comm.Send([buf2, MPI.INT], dest=(self.comm.rank+1) % self.comm.size, tag=MPI_TAG_EXPAND)
expand= True
# Sending of expansion signal needed?
elif self._i >= self._stack_length:
buf1 = numpy.array(1, dtype='i')
req_s = self.comm.Isend([buf1, MPI.INT], dest=(self.comm.rank+1) % self.comm.size, tag=MPI_TAG_EXPAND)
buf2 = numpy.empty(1, dtype='i')
req_r = self.comm.Irecv([buf2, MPI.INT], source=(self.comm.rank-1) % self.comm.size, tag=MPI_TAG_EXPAND)
while True:
sent = req_s.Test()
received = req_r.Test()
if sent and received:
break
time.sleep(0.01)
expand = True
if expand:
log_debug(logger, self._log_prefix + "Do stack expansion")
self.comm.Barrier()
self._sync_i_max()
self._expand_stacks_mpi()
else:
pass
#log_debug(logger, self._log_prefix + "No stack expansion")
评论列表
文章目录