我使用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已经结束了?
发布于 2015-12-18 20:28:26
在所有工作进程都完成之前,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
endhttps://stackoverflow.com/questions/34340137
复制相似问题