私は2つの物理CPUコアを持つマシンで作業しています。 Arii_Modified
機能は私によって書かれています。パラレルプールを使用せずに、次のように私は、コードを実行すると、所要時間は425.456
秒これはMATLABで並列プールを使用する本当の方法ですか?
profile on
[Ps,Pd,Pv,ThetaMean,Variance,frobonius] = Arii2011_Modified(C11,C12_imag,C12_real,C13_imag,C13_real,C22,C23_imag,C23_real,C33);
profile off
profsave
span = C11+C22+C33;
total=Pd+Ps+Pv+frobonius;
save('results.mat');
である。しかし、次のように私は2人の労働者と並行プールを起動するとき:
parpool('local',2)
profile on
[Ps,Pd,Pv,ThetaMean,Variance,frobonius] = Arii2011_Modified(C11,C12_imag,C12_real,C13_imag,C13_real,C22,C23_imag,C23_real,C33);
profile off
profsave
span = C11+C22+C33;
total=Pd+Ps+Pv+frobonius;
save('results.mat');
p = gcp;
delete(p)
かかる時間が687.687であります秒。
私は真の方法で並列プールを使用していますか?
機能Arii2011_modified
内のコードは完全にシーケンシャルです。
私はそれを加速するためにMEXのソリューションを使用しましたが、何の並列プログラミングコードはArii2011_Modified.m
コードでも、その中のMEX関数のC++ソースでもない使用されていませんか?
感謝。私のコードは、 'forfor'などを使用する状態ではありません。なぜなら私はC++内の' forループ 'をすべて実装していて、それらはプリコンパイルされているからです。しかし、もう一つの選択肢は、分散配列を使用して、配列全体の一部を各ワーカーに与えて、関数を実行することです。手動でではなく、プログラムでそれをどうすればできますか?出来ますか? – sepideh
@sepidehこれを行うための最善の方法はありません。あなたはそれを自分で実装する必要があります。私が言ったように、MATLABのコードの一部をベクトル化(forループを削除)し、実行時間を比較することを検討する価値があります。 – Suever
これでコードを表示します。もはやmatlab内のコードをベクトル化する方法はありません。本当にこの質問の範囲を超えだと、おそらくこの質問はおよそ特に 'parpool'は、実行時間を減少させなかった理由でしたcodereview.stackexchange.comに適してい – sepideh