再现并行统计计算

再现并行计算问题和注意事项

一个重复性计算是一个给出相同的结果每次运行时。可重复性是很重要的:

  • 调试 - 要纠正异常的结果,你需要复制的结果。

  • 信心 - 当你可以重现的结果,您可以调查和了解他们。

  • 修改现有代码 - 当您更改现有的代码,你要确保你不要破坏任何东西。

一般情况下,你不需要以确保可重复性为您计算。通常情况下,当你想重现,最简单的方法是在串行而不是并行运行。在串行计算,你可以简单地调用RNG功能如下:

S = RNG%获得的随机流%运行统计功能RNG(S)%重置该流再次运行统计功能之前的状态%的当前状态,得到相同的结果

这部分地址的情况下,当你的函数使用随机数,并要在平行重复的结果。当你想在平行相同的结果串行本节还讨论情况。

运行重现并行计算

要运行统计和机器学习工具箱™功能可重复:

  1. 设置UseSubstreams选项真正

  2. 设置选择一个类型,支持子:万博1manbetx'mlfg6331_64'要么'mrg32k3a'。有关这些流的信息,请参阅选择一个随机数发生器(MATLAB)。

  3. 为了计算在平行,设置UseParallel选项真正

  4. 调用带有选项结构的功能。

  5. 要重现计算,重置流,然后再调用该函数。

要理解为什么这种技术提供了可重复性,见子如何启用重现并行计算

例如,使用'mlfg6331_64'流可重复计算:

  1. 创建一个合适的结构选择:

    S = RandStream( 'mlfg6331_64');选项= statset( 'UseParallel',真,... '流',S 'UseSubstreams',TRUE);
  2. 运行并行计算。有关说明,请参阅快速启动并行计算统计和机器学习工具箱

  3. 重置随机流:

    复位(S);
  4. 重新运行您的并行计算。你得到相同的结果。

对于运行此重现的方式并行计算的一个例子,见可重复的并行自举

并行统计计算使用随机数

什么是子?

一个是随机流,其一部分RandStream可以快速访问。有一个数字中号这样,对于任何正整数ķRandStream可以去千米流中的第伪随机数。从这一点来说,RandStream可以生成流中的后续的条目。目前,RandStream中号= 272,约5e21,或更多。

在不同的子项具有良好的统计特性,在一个单一的数据流类似的条目的属性:独立,缺乏ķ在不同的滞后三通相关性。该子是这么长时间,您可以查看子作为独立的数据流,如下面的图片。

RandStream流类型支持子:万博1manbetx'mlfg6331_64''mrg32k3a'

子如何启用重现并行计算

当MATLAB®在具有平行执行计算PARFOR,每个工人接收一个不可预知的顺序循环迭代。因此,你无法预知哪一个工作得到其迭代,所以不能确定与每次迭代相关的随机数。

子允许MATLAB每次迭代绑随机数的特定序列。PARFOR给出每次迭代的索引。迭代使用索引的子数。由于随机数与迭代相关,而不是与工人,整个计算是重复的。

为了获得可重复的结果,简单地重置流,并再次调用时所有子产生相同随机数。这种方法成功时,所有的工人使用相同的数据流,以及流是否支持子。万博1manbetx这个结论是怎么过程的讨论运行重现并行计算获得可再现的平行的结果。

在客户端或工人的随机数

一些职能分配它们平行工人之前生成的客户端随机数。工人没有使用随机数,所以纯粹的确定性操作。对于这些功能,则可以重复地使用任何随机流式运行并行计算。

是这样操作的功能包括:

为了获得相同的结果,重置客户端传递到客户端的随机流,或随机流。例如:

S = RNG%获得的随机流%运行统计功能RNG(S)%重置该流再次运行统计功能之前的状态%的当前状态,得到相同的结果

虽然这种方法使您能够并行运行的重复性,其结果可以从串行计算不同。究其原因,不同的是PARFOR循环从相反的顺序运行对于循环。因此,串行计算可以以不同的顺序比并行计算产生随机数。对于明确的重现性,使用该技术运行重现并行计算

分发流明确

为了测试或比较使用特定的随机数的算法,则必须将随机数生成器。如何在一个特定的方式设置并联这些发电机,或在每个工人初始化流?或者你可能想运行使用比任何其他已经运行的随机数序列不同的计算。你怎么能保证你的序列是统计独立?

并行统计和机器学习工具箱功能,让你在明确每个工人设置随机流。有关信息创建多个流,进入帮助RandStream /创建在命令行。创建使用四个独立的流'mrg32k3a'发电机:

S = RandStream.create( 'mrg32k3a', 'NumStreams',4,... 'CellOutput',TRUE);

通过这些数据流使用的统计功能选项。例如:

parpool(4)%,如果你有至少4芯S = RandStream.create( 'mrg32k3a', 'NumStreams',4,...... 'CellOutput',真);%创建4个独立的数据流paroptions = statset( 'UseParallel',真,... '流',S);%设置的4个不同的数据流X = [randn(700,1);4 + 2 * randn(300,1)];LATT = -4:0.01:12;myfun = @(X)ksdensity(X,LATT);pdfestimate = myfun(X);B = bootstrp(200,myfun,X, '选项',paroptions);

分配流的此方法使每个工人的计算的不同的流。但是,它不允许可重复计算,因为工人在一个不可预知的顺序执行200个白手起家。如果你想执行重复性计算,使用子如描述运行重现并行计算

如果设置了UseSubstreams选项真正,然后设置选项,以支持子流的类型的单个随机流(万博1manbetx'mlfg6331_64'要么'mrg32k3a')。此设置得到可重复计算。