Я не часто использую parfor
, но, похоже, работает следующий подход (адаптированный из здесь ):
parpool('local',4); % create parallel pool of workers
spmd
rng(123); % set the same seed in each worker
end
parfor k = 1:12
r = rand; % generate a random number
w = getCurrentWorker;
fprintf('Worker %i, iteration %i, random number %f\n', w.ProcessId, k, r)
end
Обратите внимание, как каждый работник генерирует одинаковые случайные числав том же порядке.(Итерации случайным образом назначаются работникам и выполняются в случайном порядке; это по проекту ).
Starting parallel pool (parpool) using the 'local' profile ...
connected to 4 workers.
Worker 11688, iteration 1, random number 0.275141
Worker 17188, iteration 2, random number 0.275141
Worker 18408, iteration 4, random number 0.275141
Worker 18408, iteration 3, random number 0.423046
Worker 5812, iteration 6, random number 0.275141
Worker 5812, iteration 5, random number 0.423046
Worker 11688, iteration 8, random number 0.423046
Worker 11688, iteration 7, random number 0.973406
Worker 17188, iteration 9, random number 0.423046
Worker 18408, iteration 10, random number 0.973406
Worker 5812, iteration 11, random number 0.973406
Worker 17188, iteration 12, random number 0.973406