1

私はMatlab R2011aを使用していますbsxfun.R2009a以降のドキュメントによると、関数はマルチスレッドです(http://www.mathworks.com/help/techdoc/rn/br5k34y-1.html)。ただし、bsxfun を使用して、次のように行列を上限と下限と比較すると:

szS=10000;
szT=50000;
matT=rand(szT,3);
matS=rand(szS,3);
matSub=rand(szS,3);
matSlb=rand(szS,3);
for k=1:szS
   matchID = all([bsxfun(@lt,matT,matSub(k,:)) bsxfun(@gt,matT,matSlb(k,:))],2);
end

タスク マネージャーでは、1 つのコアのみが使用されていることがわかります。私は何かを見逃していますか、それともこれは正常ですか?

4

1 に答える 1

2

bsxfun同じ MATLAB プロセス内でスレッドを起動することにより、渡された関数を並列で実行します。Windows の「タスク マネージャー」のみを使用すると、実行中のスレッドは表示されず、実行中のプロセスのみが表示されます。

サポートされているマルチスレッド関数の場合、データが十分に大きい場合にのみ高速化が適用されることに注意してください(ただし、例では確かにそのしきい値を超えています)。

もう 1 つのオプションは、Parallel Computing Toolboxを使用することです。このmatlabpool関数を使用すると、バックで MATLAB の新しいセッションをそれぞれ別のプロセスで開くことができます。呼び出すparforと、すべてのワーカーに負荷が分散されます。このアプローチは、特にコンピューターのクラスターで実行する場合に非常によく拡張されます。

同じコードで両方を使用できるはずだと思います..

于 2012-06-06T14:18:30.067 に答える