Phi*_*p F 5 random parallel-processing matlab parfor
我设置了以下最小的例子:
rng(0);
randseedoffset = random('unid', 10^5) + 1;
t = cell(10,1);
for i = 1:10
rng(randseedoffset+i);
t{i} = random('unid', 1000);
end
disp(t);
Run Code Online (Sandbox Code Playgroud)
这将生成10个随机数并存储它们t
.它将始终可靠地生成相同的随机数,因为我rng
在for循环中设置了种子.
如果我现在改for
到parfor
,我得到不同的结果!虽然它们也总是可以重现的.
我想用parfor加速我的代码并仍然获得与...相同的完全相同的随机数
好的,我刚刚找到原因:
MATLAB支持不同的随机数生成算法.虽然在当前版本的通常设置中,这是Mersenne Twister.当你进入parfor循环时,这会改变他们所谓的"组合递归方法".
可以通过'twister'
在循环中明确设置类型来解决此问题:
parfor i = 1:10
rng(randseedoffset+i, 'twister');
t{i} = random('unid', 1000);
end
Run Code Online (Sandbox Code Playgroud)