我编写了一个MATLAB程序,用于对视频进行计算。我认为它是适应多个cpu内核的理想选择,因为有很多平均值已经完成。我只是将第一部分框架发送到每个实验室。说(为简单起见)它是一个200帧的文件。我已经阅读了一些指南并使用SPMD得到了这个。
spmd
limitA = 1;
limitB = 200;
a = floor(((limitB-limitA)/numlabs)*(labindex-1)+limitA);
b = floor((((limitB-limitA)/numlabs)*(labindex-1)+limitA)+(((limitB-limitA)/numlabs)));
fprintf (1,'Lab %d works on [%f,%f].\n',labindex,a,b);
end
它成功地输出每个工作人员将在他们各自的部分工作(例如Lab 1工作在1:50,Lab 2 50:100等)。
现在我陷入困境的是如何让我的主体代码在每个Lab的框架部分上工作。是否有一个提示或一种简单的方法来编辑我的主要代码,以便它知道基于labindex工作的帧?将spmd添加到循环会导致错误,因此我的问题。
由于
答案 0 :(得分:0)
继续你所拥有的,不要只需要这样的东西:
spmd
% each lab has its own different values for 'a' and 'b'
for idx = a:b
frame = readFrame(idx); % or whatever
newFrame = doSomethingWith(frame);
writeFrame(idx, newFrame);
end
end
当然,如果那是你正在做的事情,你可能需要序列化帧写入(即确保一次只有一个进程写入)。