次の短いスクリプトでは、単一のCPU計算と計算時間に関する並列化を比較する必要があります。完全な画像へMATLABでの並列化の問題
リンク:LINK
コードである:
n = 700;
ranksSingle = zeros(1,n);
tic
for ind = 1:n
ranksSingle(ind) = rank(magic(ind));
end
toc
matlabpool local 4
tic
ranks = zeros(1,n);
parfor (ind = 1:n)
ranks(ind) = rank(magic(ind));
end
toc
isequal(ranksSingle, ranks)
matlabpool close
Iもmatlabpool 2
でそれを試してみました。プロセスウィンドウからはっきりと分かるように、並列計算(赤色で表示)を実行すると、すべてのコアが100%ビジー状態になります。
シングルCPU演算(青色で表示)を実行すると、妙に4つのコアも前よりもビジーです。私はコアが1つしか上がらないと思っていただろう。おそらくmagic()
またはrank
機能が組み込み並列化されているが、ここから読むことができる場合は、http://www.walkingrandomly.com/?p=1894のようにインターネットを検索した。だから、これらの4つのコアは完全に忙しいわけではありませんが、まだ私はすべてのコアが上がっているのだろうと思っています。
第2に、並列化されたバージョンの計算時間が本当に不思議です。単一のコアにジョブを配布することによって何らかのオーバーヘッドがあることはわかっていますが、これはあまり高くても結局は役に立たないはずです。(
誰かが私にそれについて何か教えてくれるかもしれません私は自分のfor-loopsをスピードアップしたいので、これは本当に立ち往生しています.2番目の質問は、コンピュータにある物理的なコアの数に常にワーカーのサイズを設定するコマンドがあれば、それは追加の利点かどうスレッディング?)
感謝をたくさん!
修正。例えば、 'rank'は' svd'を使います。これはマルチスレッド化されています。 –
ありがとう、私は明日より高価な操作でそれを試してみるでしょう:) – tim
@Jonas: 'matlabpool open'は私に" Matlabpoolを 'ローカル'設定... 2ラボに接続して起動します。上記の私のスクリーンショットからはっきりと分かるように、私は4つのコアを持っているので、それはapperently期待された結果ではありません!編集:どうか私は 'matlabpool(4)'を開始できません:私は得ています:あなたは最低4人の労働者を要求しましたが、スケジューラーのClusterSizeプロパティは現在、最大2人の労働者を許可するように設定されています。これ以上の作業者で並列ジョブを実行するには、Configurations Manager [...]を使用して 'local'構成のClusterSizeプロパティ設定を増やします。 – tim