私は 4 つの物理コアを備えたラップトップと、MatLab 並列計算ツールボックスを持っています。私は2つの独立したタスクを実行する必要があります(非常に高価です。たとえば、密で大規模な行列の最大の固有値を計算するとしましょう)。
したがって、次の方法でタスクをコアに分散したいと考えています。
- 最初のタスクで 2 コア
- 2 番目のタスクで 2 コア
しかし、これをMatLabコードで設定する方法を本当に理解/見つけることができません。
よく検索した結果、 を使用する必要があることがわかりましたが、同じタスクに 2 つのコアspmd
を使用できる適切な例がドキュメントに見つかりません。
MatLab での最小限の作業例は本当にありがたいです!
ダニエルのコメントの後の編集: 4 つのワーカーの並列プールを作成した後、次のことができます。
spmd
if labindex == 1
%first worker, do something
elseif labindex == 2
%second worker, do sometihng
end
end
編集(2)
を設定できるNumThreads=2
ので、各ワーカーは 2 つのタスクを実行します (右?)。問題は、各ワーカーが 2 つのスレッドを実行するように、 4 つのワーカーを持つパープールを作成する必要があるかどうかです。より明示的に:
parpool(4);
%set NumThreads = 2 via Parallel computing toolbox
%define matrix A1, A2 of size 1000x1000
parfor i=1:2
x(i) = max(abs(eigs(A(i))));
end
x(1)
最初の 2 つのコアが で動作し、残りの 2つのコアが で動作するようにしたいと思います。x(2)
最終編集:
コメントに書かれているようにa を使用するparfor
と、次のようになります。
c = parcluster('local');
A = {rand(2000), rand(2000),rand(2000), rand(2000),rand(2000),
rand(2000),rand(2000),rand(2000)};
c.NumThreads = 2;
pool = parpool(c, 2); %2 workers
parfor i=1:8
x(i) = max(abs(eig(A{i})));
end