ルートコンプがそれ自体を含む3つのコンプにデータを送信し、このコンプから計算されたデータを受信した後、マスター/スレーブプログラムを作成しようとしています。データは送信できますが、受信できません。
if rank==0:
for i in range(minf.astype(int), ped.max_frame.astype(int), step):
# remove code which is not significant
while True:
# remove code which is not significant
pop = pool
# remove code which is not significant
logger.info('broadcasting gen%s:' % current_gen)
n_to_send = len(pop)//3
req = comm.irecv(source=0)
for i in range(2):
out = []
j =0
while j < n_to_send and pop:
out.append(pop.pop(0))
j+=1
logger.info('out%s: %s' % (i, len(out)))
comm.send(out, dest=i)
logger.info('out%s: %s' % (2, len(pop)))
comm.send(pop, dest=2)
part = req.wait()
obj(part)
logger.info("len part1: ", len(part))
# comm.Barrier()
#req1 = comm.irecv(source=MPI.ANY_SOURCE, tag=MPI.ANY_TAG)
#part1 = req1.wait()
part1 = comm.recv(source=MPI.ANY_SOURCE, tag=MPI.ANY_TAG)
logger.info("len part2: ", len(part1))
# req2 = comm.irecv(source=MPI.ANY_SOURCE, tag=MPI.ANY_TAG)
# part2 = req2.wait()
part2 = comm.recv(source=MPI.ANY_SOURCE, tag=MPI.ANY_TAG)
logger.info("len part3: ", len(part2))
# MPI.Request.Waitall([req1, req2])
pop = part + part1 + part2
# logger.info('population len%s: %s' % (len(pop), '\n'.join(pop)))
logger.info('population len %s: ' % len(pop))
message = '{0}'.format([ind.objectives for ind in pop])
logger.info(message)
else:
part = comm.recv(source=0)
obj(part)
comm.send(part, dest=0, tag=rank+1)
# req = comm.isend(part, dest=0, tag=666)
# req.wait()
非ルートコンプでisendを試します。root がメッセージを受信しない理由がわかりません。