0

我编写了一个 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

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

现在我陷入困境的是如何让我的主体代码在每个 Lab 的框架部分上工作。现在是否有提示或简单的方法来编辑我的主代码,以便它知道基于 labindex 可以处理哪些框架?将 spmd 添加到循环会导致错误,因此是我的问题。

谢谢

4

1 回答 1

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

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

于 2013-05-08T07:26:04.643 回答