并行随机数生成器

这系列的第二部分是关于MATLAB随机数生成器。如果你要求帮助提高,你会得到大量的信息,其中包括有三个现代发电机的事实。

“龙卷风”梅森素数的旋风的combRecursive结合多个递归multFibonacci乘法滞后斐波那契

我的以前的文章是关于捻线机。今天的文章是关于另外两个,“combRecursive”“multFibonacci”,为并行计算而设计的。

内容

并行计算演示

我经常用纸牌游戏21点展示并行计算。同时我可以演示随机数生成器。我认为21点的金融工具,就像一个上市公司的股票。模拟一个投资的大小作为时间的函数是一个典型的应用蒙特卡罗技术。

首先打开一个池的工人。

parpool;
开始平行池(parpool)使用“本地”概要文件…连接到两个工人。

四个玩家玩二十一点二万手。

p = 4;n = 20000;

收集这个数组中的结果。

B = 0(氮、磷);

一个平行的循环执行一个21点程序并行计算一无所知。

parfork = 1: p B (:, k) = cumsum (blackjacksim (n));结束

策划的结果。

情节(B)标题([“21点,美元”int2str (sum (B(最终,:)))))包含(“手数”)ylabel (的股份,($)轴([0 n -2500 2500])

平行流

信用卡处理调用随机数字生成器。至关重要的是,不同的平行的工人有不同的,独立的随机数流。默认的MATLAB发电机捻线机不提供这个特性。简单的开始捻线机与不同的种子在不同的工人不提供统计独立的溪流。所以我们向其他发电机。这里使用的是哪一种,运行一个小的spmd“单个项目,多个数据块。

spmdr = rng s = r。国家的形式x =兰特(7)结束
实验1:r =类型:“combRecursive”种子:0状态:x1 uint32 [12] s =列1到6 1720035765 2052922678 1720035765 3048064580 1173461082 2391850890列7到12 2391850890 1173461082 3048064580 1660833332 146924518 1660833332 x = 0.8789 0.6969 0.0409 0.4609 0.7528 0.2871 0.5241实验室2:r =类型:“combRecursive”种子:0状态:x1 uint32 [12] s =列1到6 323405913 3817048408 323405913 1070773748 1552739185 3267875480列7到12 3267875480 1552739185 1070773748 3413340742 2651847732 3413340742 x = 0.1072 0.3194 0.1048 0.6623 0.0878 0.3692 - 0.8035

我们看到,我们有两个工人,他们都是使用combRecursive发电机,它们有相同的种子,但是不同的,所以他们产生不同的随机数。

combRecursive

也被称为mrg32k3a。32位组合多个递归发生器(CMRG),由于皮埃尔L 'Ecuyer,蒙特利尔大学的,和他的同事们,下面引用的论文中描述。这个发电机类似于CMRG RngStreams包中实现。它有一段2美元^{127}$,并支持美元2 ^{63}$并行流,通过金宝app序列分割,和$ 2 ^ {51}substreams每个长度2美元^ {76}$。这里是一个链接到C源代码。combmrg2.c

骨干发生器的状态是一系列2×3 S,每一步的发展根据MATLAB的简洁表达的线性递归

m1 = 2 ^ 32 - 209;m2 = 2 ^ 32 - 22853;x1 =国防部(1403580 * -810728 *(1、2)年代(1,3),m1);x2 =国防部(527612 * -1370589年代(2,1)* (2、3),m2);S = (x1(1, 1)年代(1、2)x2(2,1)(2,2));

一个随机实际精度u然后由

z =国防部(x1, x2), m1);如果z > 0, u = z / (1 + 1);其他的u = 1 / (1 + 1);结束

这个发电机的重要特征就是它可以创建不同的初始状态为每个工人在一个平行的池,这样产生的随机数流是统计独立的。

multFibonacci

也被称为mlfg6331_64。一个64位的乘法滞后斐波那契发生器(MLFG),由迈克尔·Mascagni和Ashok Srinivasan佛罗里达州立大学。这个发电机,滞后l = 63美元和k = 31美元,类似于MLFG在受惊包中实现。它有一段大约2美元^ {124}$。它支持金宝app美元2 ^{61}$并行流,通过参数化和$ 2 ^ {51}substreams每个长度2美元^ {72}$。

这个发电机的状态向量长度为63的64位整数递归关系的美国

$ $ x_n =间{n - k} \ *间{n-l} (mod 2 ^ {64}) $ $

每个随机双精度值创建使用一个64位整数的发电机;可能的值都是$ 2的倍数^{-53}$严格时间间隔内(0,1)。

同样,这种发电机的重要特征是可以创建不同的初始状态为每个工人在一个平行的池,这样产生的随机数流是统计独立的。

哪一个?

你应该使用哪一个呢?大多数时候,坚持默认,你会没事的。你会得到“旋风”在串行计算和“combRecursive”工人们在一个平行的池。您可以使用

rng(“洗牌”)

在会议的开始如果你想要不同的随机数序列在不同会话。否则,不要担心设置发电机或种子。

如果你想实验中,您可以使用rng尝试不同的发电机和不同的种子在你开始计算。如果你发现一个问题,一个重要的区别,请让我们知道。

谢谢

再次感谢彼得·珀金斯。

引用

皮埃尔•L 'Ecuyer r . Simard和w·d·e·j . Chen Kelton。“面向对象型随机数与许多长流和Substreams包。”Operations Research, 50(6):1073-1075. 2002.< http://www.iro.umontreal.ca/ ~ lecuyer / myftp /论文/ streams00.pdf>

皮埃尔L 'Ecuyer。“好参数,实现组合多个递归随机数生成器。”Operations Research 47(1):159-164. 1999.< http://dx.doi.org/10.1287/opre.47.1.159>

迈克尔•Mascagni和Ashok Srinivasan。“参数化并行乘法Lagged-Fibonacci发电机”。Parallel Computing, 30: 899-916. 2004.< http://www.cs.fsu.edu/ asriniva /论文/ mlfg.ps>

迈克尔•Mascagni和Ashok Srinivasan。“在受惊:伪随机数生成一个可伸缩的图书馆。”ACM Transactions on Mathematical Software, Vol 26 436-461. 2000.< http://www.cs.fsu.edu/ asriniva /论文/ sprngacm.ps>




发表与MATLAB®R2014b

|

评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。