Я распараллеливал некоторые коды для создания кадров для фильма. Все ряды выходят из цикла while, за исключением тех, которые создают окончательный кадр, несмотря на то, что он достигает конечного состояния. Также я обнаружил, что это делает только окончательный кадр, если я добавлю CW.Barrier() после цикла while. Если этого нет, то он останавливается на втором последнем кадре.MPI4PY - Почему мой цикл while выходит только в некоторых рядах?
rank = CW.Get_rank()
size = CW.Get_size()
rit = 0 #rank iterator. Its used to assign frames to make
while len(frames) > 0:
if rank == rit:
frame_val = frames.pop() #gets frame
orit = 0
while orit < size:
if orit != rit:
CW.send(frames, dest=orit, tag=1) #and then sends undated frame list to other ranks
orit = orit + 1
#other ranks recieve new list of frames.
if rank != rit:
frames = CW.recv(source=rit, tag=1)
if rank == rit:
#Creates frame
print 'Created frame', frame_val, 'on rank', rank
#iterates through ranks to distribute frames.
rit = rit +1
if rit == size:
rit = 0
CW.Barrier()
print "completed making movie frames on rank", rank