0

私はいくつかの計算を試みていますが、現在の実装は遅すぎるため、parforを使用するか、matlabpoolを開くことによって並行して実行したいと思います。

result=zeros(25,16000);
for i = 1:length(vector1) % length is 25

     for j = 1:length(vector2) % length is 16000 

              temp1 = vector1(i); 
              temp2 = vector2(j);
              t1 = load(matfiles1(temp1).name) %load image1 from matfile1
              t2 = load(matfiles2(temp2).name) % load image2 from matfile2
              result(i,j)=t1.*t2
    end
end

それはうまく機能しますが、私は物事をスピードアップする方法があるかどうか本当に知りたいです...事前にどうもありがとう!

4

1 に答える 1

1

parforループを使ってmatlabpool一緒に行く。を開くと、ループmatlabpoolの本体を実行できる専用のワーカーが MATLAB セッションに提供されます。parforしたがって、コードを次のように変更できます。

matlabpool open local 4 % or however many cores you have
parfor i = ...
   ...
end

コードを並列実行する前に、MATLAB プロファイラーを使用して、コードの実行に時間が費やされている場所を確実に把握することをお勧めします。load(外側のループにを巻き上げても効果がないことに少し驚いていt1ます。したがって、プロファイラーはおそらくload、アルゴリズムの残りの部分と比較して、呼び出しにかかる時間が非常に短いことを示すはずです)。

于 2012-07-10T06:19:49.473 に答える