使用单个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(还有一个gpu)中有5个以上的工作者,我可以对其进行优化,以便抓取的每个帧都将由不同的工作人员处理吗?例如:
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可以是再次获得...
答案 0 :(得分:2)
我看到它的方式,这里的工作流程本质上是串行的..
您可以做的最好是对图像处理功能进行矢量化/并行化(因此您仍然可以逐个抓取图像,但是您可以在多个核心上分配处理)
答案 1 :(得分: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并行化获得更好的结果......