2013-05-07 43 views
0

我写了一个MATLAB程序,它可以对视频进行计算。我认为这是一个适合多个CPU核心的完美人选,因为有很多平均完成。我只是把第一部分的每一帧发送给每个实验室而苦苦挣扎。说(为了简单起见),它是一个200帧的文件。我读过一些指南,并使用SPMD得到了这个。使用MATLAB进行并行图像处理

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 

它成功地输出每个工人将在它们各自的工作部分(如实验1适用于1:50,实验2 50:100等)。

现在我陷入困境的是如何让我的主体代码在每个实验室的框架部分上工作。现在有编辑我的主代码的提示或简单的方法,以便知道基于Labindex的工作框架吗?添加spmd到循环会导致错误,因此我的问题。

感谢

回答

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 

当然,如果是那种你正在做的事情,你可能需要序列化帧写入(即确保一次只写入一个进程)。

+0

嘿,这有助于很多。我无法控制每个实验室在其框架部分工作。但是现在我看到,如你所说,每个实验室都会看到自己的“a和b”。应该能够从这里得到一些东西。谢谢。 – 2013-05-08 07:41:05