0

spmd用来将两个不同的任务分配到计算机的两个处理器中。代码类似于:

spmd
    if labindex==1
       TASK_ONE;
    end
    if labindex==2
       TASK_TWO;
    end
end

每个任务打开一个文件并处理它,存储结果。当仍有文件要处理时,循环继续。我的问题是TASK_ONE要处理的文件较少,当它完成时,代码停止(它退出spmd块)。因此,TASK_TWO并未完成对所有文件的处理。有没有办法让它spmd一直运行直到TASK_TWO完成,即使TASK_ONE已经完成?

4

1 回答 1

2

在所有工作人员完成之前,该spmd块无法完成,因此如果您看到并非所有文件都已处理,那么您的代码中肯定有其他错误。从本质上讲,每个spmd块的执行都好像它最后有一个调用一样labBarrier

您可以很容易地看到这种行为,如下所示:

spmd
    if labindex == 1
        for idx = 1:10, disp(idx), pause(1), end
    end
    if labindex == 2
        for idx = 1:3, disp(idx), pause(1), end
    end
end
于 2015-12-18T12:28:25.577 回答