2

私は、Matlab での並列計算にはまだ少し慣れていません。C で OpenMP を使用して成功しましたが、Matlab ではパフォーマンスが向上しませんでした。

まず、私は初めての大学のマシンなのでver、コマンド プロンプトに次のように入力して、使用しているマシンに Parallel Computing Toolbox があることを確認したところ、次のように表示され Parallel Computing Toolbox Version 5.2 (R2011b)ました。マシンには4つのコアがあることに注意してください

parforvs.を使用した簡単な例を試してみましたが、オーバーヘッド コストが原因かもしれませんforが、for常に成功しました。ここの例のような単純なことをしていました: MATLAB parfor は for よりも遅いです -- 何が問題なのですか?

より大きく複雑なプログラムに parfor を適用しようとする前に (関数の 500 回の評価を計算する必要があり、各評価に約 1 分かかるため、ここでは並列化が役立ちます)、 Beats の具体的な例を見てみたいと思いparforますfor。. OpenMP の例は豊富にありますが、コピーして貼り付けることができる簡単な例は見つかりませんでしたparforfor

4

3 に答える 3

7

を使用するために、次のコードを (Matlab セッションごとに 1 回) 使用しますparfor

pools = matlabpool('size');
cpus = feature('numCores');
if pools ~= (cpus - 1)
    if pools > 0
        matlabpool('close');
    end
    matlabpool('open', cpus - 1);
end

これにより、他のプロセス用に 1 つのコアが残ります。feature()コマンドは文書化されていないことに注意してください。

于 2012-08-13T17:25:28.653 に答える
4

Loren ShureのMATLABブログに、parforによるパフォーマンスの向上の例があります。

彼女の例は、魔方陣行列のランクを単純に計算することです。

function ranks = parMagic(n)

ranks = zeros(1,n);
parfor (ind = 1:n)
    ranks(ind) = rank(magic(ind));  % last index could be ind,not n-ind+1
end
于 2012-08-13T14:24:55.693 に答える
0

Serg は、並列機能を「有効にする」方法を説明しています。以下は、要求に応じてテストするための非常に単純なカット アンド ペーストの例です。以下をコピーしてmfileに貼り付けて実行するだけです。

function parfortest()
enable_parallel;
pause on
tic;
N=500;
for i=1:N
    sequential_answer=slow_fun(i);
end
sequential_time=toc
tic;
parfor i=1:N
   sequential_answer=slow_fun(i);
end
parallel_time=toc
end
function result=slow_fun(x)
    pause(0.001);
    result=x;
end

Serg の回答に示されているように、コードを実行して並列を有効にすると、パフォーマンスが明らかに向上するはずです。

于 2014-10-22T01:46:45.200 に答える