control random number generator in async programming
3 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
My problem is very simple. I am using asynchronous programing to generate random number dependent data.
I would like to have reproducible results, but I can't.
For example:
rng(1);
fA = parfeval(backgroundPool,@rand,1,10000);
B = rand(10000);
wait(fA)
C = max(fetchOutputs(fA),B);
B(1:5)
C(1:5)
If I repeat this code multiple times, only array B is reproducible. I want array C to be reproducible as well. Seems a different random number generator is used there. How can I control that generator?
0 Kommentare
Antworten (1)
Walter Roberson
am 29 Nov. 2024
parpool are defined to seed random number generators differently. See https://www.mathworks.com/help/parallel-computing/control-random-number-streams-on-workers.html
5 Kommentare
Walter Roberson
am 4 Dez. 2024
NumWorkers = backgroundPool.NumWorkers;
random_seeds = [appropriate list];
F = parfevalOnAll(backgroundPool, @() getCurrentTask().ID, 1);
IDs = fetchOutputs(F);
D = dictonary(IDs, random_seeds);
F = parfevalOnAll(backgroundPool, @() rng(D(getCurrentTask.ID), 'twister'), 0);
fetchOutputs(F);
Now you can
fA = parfevalOnAll(backgroundPool,@rand,1,1,10000);
A = cell(NumWorkers,1);
for idx = 1 : NumWorkers
[~, A{idx}] = fetchNext(fA);
end
Siehe auch
Kategorien
Mehr zu Background Processing finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!