3

複数のコアを使用した並列計算に matlab2011 を使用しています。これは、私のコードではブロック SPMD END で単純に実装されています。ただし、入力パラメーターに基づいて、プログラムで spmd をオフにしたい場合があります。次のコードを試してみましたが、うまくいきません

if (switchSpmdOn)
  spmd
end
% here I put my code for calculation in parallel or series
if (switchSpmdOn)
  end % this end is used to close the spmd block
end

コードでspmdをオフにするマルコのようなものがあるかどうか疑問に思っています。

4

1 に答える 1

3

ワーカーの数をパラメーターとして に渡すことができますspmd。指定されたワーカー数が0つまりの場合、

spmd(0)
   statement; %# block body
end

次に、MATLAB はブロック本体をローカルで実行し、利用可能なプールがない場合と同じように Composite オブジェクトを作成します。

switchSpmdOn = true;

%# set the number of workers
if (switchSpmdOn)
    workers = 3; 
    matlabpool(workers);
else
    workers = 0;
end

%# application. if 'workers' is 0, MATLAB will execute this code locally
spmd (workers)
    %# build magic squares in parallel
    q = magic(labindex + 2);
end

for ii=1:length(q)
  % plot each magic square
  figure, imagesc(q{ii});
end

if (switchSpmdOn)
    matlabpool close
end
于 2012-07-19T23:05:34.833 に答える