2
function test_parfor
N = 1e8;
sum_all = 0; % sum all numbers
sum_odd = 0; % sum odd numbers
sum_even = 0; % sum even numbers
tic;
parfor i = 1 : N
  sum_all = sum_all + i; % sum all numbers
  if mod(i,2)
      sum_odd = sum_odd + i; % sum odd numbers
  else
      sum_even = sum_even + i; % sum even numbers
  end %endif
end %endfor
toc;
fprintf('sum_all=%d,\nsum_odd=%d,\nsum_even=%d.\n', ...
    sum_all, sum_odd, sum_even);

parpool 環境を初期化し、上記のコードを実行しました。ただし、parfor ループは、単一の for ループよりもはるかに時間がかかりました。さらに、私の PC の numCores は 12 で、関数コードを実行する前に 12 のワーカーを初期化しました。なんで?コードの何が問題になっていますか?

どうもありがとうございました!:-)

また、並列計算環境の初期化コードは以下の通りです。

function initpar(CoreNum)
%Initialize Matlab Parallel Computing Enviornment

if nargin==0
    CoreNum=feature('numCores');
end
if  isempty(gcp('nocreate'))
    clear ALL;
    parpool('local',CoreNum); % matlabpool in R2013
else
    disp('Parallel Computing Enviornment already initialized');
end
4

1 に答える 1