0

単一の matlab ワーカーを使用すると、カメラ (matlab imaq ツールボックスを使用) で 1 秒あたりの最大フレーム数 (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 を再度取得できることです。 ..

4

2 に答える 2

2

私の見方では、ここでのワークフローは本質的にシリアルです..

あなたができる最善のことは、画像処理機能をベクトル化/並列化することです(したがって、画像を1つずつ取得しますが、処理を複数のコアに分散します)

于 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 に答える