0

使用单个 matlab 工作者,我可以轻松地使用我的相机(使用 matlab imaq 工具箱)实现最大每秒帧数 (fps)。这个简单的代码做到了:

matlabpool(1)
start(vid)
pause(1); % give matlab time to initialize the camera
for j=1:frames
     data = getsnapshot(vid);
end

但是,一旦我尝试即时进行一些图像处理,有效率就会下降 50%。由于我在 matlabpool 中还有 5 个工作人员(还有一个 gpu),我可以优化这一点,以便抓取的每个帧都由不同的工作人员处理吗?例如:

for j=1:frames
data = getsnapshot(vid);
      <do some analysis with worker mod((j),5)+2  i.e. worker 2 to 6 >  
end

问题是“数据”是从相机连续获取的,分析需要大约 2 轮循环,因此如果每次都有不同的工作人员(或核心)处理,则可以再次获得最大 fps。 ..

4

2 回答 2

2

在我看来,这里的工作流程本质上是连续的..

您可以做的最好的事情是矢量化/并行化您的图像处理功能(因此您仍然可以一张一张地抓取图像,但您将处理分布在多个核心上)

于 2012-08-11T10:02:22.140 回答
1

我想我得到了解决方案:

for i=1:frames

     for sf=1:6; % I got 6 cores
         m(:,:,sf) = getsnapshot(vid);
     end

     spmd 
         result=f(m(:,:,labindex));
     end
end

我设法通过 GPU 并行化获得更好的结果......

于 2012-10-06T07:30:14.510 回答