MPI4PY - 为什么我的while循环只退出某些等级?

时间:2016-01-08 05:19:07

标签: python mpi4py

我已经并行化了一些代码来为电影制作帧。除了创建最终帧的那个之外,所有等级都退出while循环,尽管它达到了最终条件。另外我发现只有在while循环后添加CW.Barrier()时才会生成最终帧。如果那不存在,那么它会在倒数第二帧停止。

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

1 个答案:

答案 0 :(得分:0)

Derp,所以我没有在我的问题中提供足够的信息。在

if rank == rit: #Creates frame print 'Created frame', frame_val, 'on rank', rank

实际上看起来更像是:

if rank == rit: CW.Barrier() #Creates frame print 'Created frame', frame_val, 'on rank', rank

因为在某些等级上看起来已经退出,所以并非所有等级都在最后一帧上达到此CW.Barrier()函数。这个障碍在这个地方根本不是必需的,所以它固定了!