私の経験では、 のlocal
構成はmatlabpool
、既定では、論理コアの数ではなく、マシンが所有する物理コアの数を使用します。したがって、マシンでmatlabpool
は、2 つのラボにのみ接続します。
ただし、これは単なる設定であり、次のコマンドで上書きできます。
matlabpool poolsize n
ここn
で、Matlab で使用するラボの数を示す 1 ~ 12 の整数です。
ここで、コメントの @RodyOldenhuis からの簡単な教訓のおかげで、私はもう少しうまく答えることができるという興味深い点に到達します。
ハイパースレッディングとは、特定の物理コアで同時に 2 つのスレッドを実行できることを意味します。もちろん、文字通り同時に処理することはできません。アイデアは次のようになります。スレッドの 1 つがタスクをコアに割り当てるのに非効率的である場合、コアはいくらかの「ダウンタイム」を示す可能性があります。2 番目のスレッドは、この「ダウンタイム」を利用して作業を完了できます。
私の経験では、Matlab は多くの場合、コアへのスレッドの割り当てが効率的です。したがって、1 つの Matlab スレッド (つまり、1 つのラボ) が実行されている場合、コアの「ダウンタイム」はほとんどない可能性があり、したがって、コアへの利点はほとんどありません。ハイパースレッディング。私のデスクトップは、4 つの物理コアと 8 つの論理コアを備えた core-i7 です。parfor
ただし、ループを 4 つのラボで実行する場合と 8 つのラボで実行する場合の違いはほとんどありません。実際、8 つのラボでは、追加のラボの初期化に関連する起動コストが原因で遅くなることがよくあります。
もちろん、これはおそらく、Matlab に対して同時に実行している可能性のある他のプログラムなど、他の外部要因によってすべて複雑になります。
要約すると、Matlab に 4 つのラボ (または 12 のラボ) を初期化するように強制できたとしても、2 つのラボを超えるスピードアップは見られないというのが私の疑いです。プロセッサ。