随机数和多核软件包


15

在R中编程时,我已经使用了多核软件包几次。但是,我从未见过有关如何处理随机数的声明。当我将openMP与C一起使用时,我会谨慎使用适当的并行RNG,但对于R,我假设发生了一些明智的事情。任何人都可以确认发生了明智的事情吗?

根据文档,我们有

x <- foreach(icount(1000), .combine = "+") %do% rnorm(4)

是如何rnorm产生的?

Answers:


8

我不确定如何foreach工作(我想是从doMC软件包中获得的),但是在多核中,如果您做了类似参数默认值的操作,则mclapplymc.set.seed参数TRUE会为每个进程提供不同的种子(例如mclapply(1:1000, rnorm))。我假设您的代码被翻译成类似的东西,即归结为parallel具有相同约定的调用。

但也请参阅Charlie Geyer 幻灯片的第16页,该指南建议了具有理论保证的并行独立流的rcucuyer程序包。盖尔的页面在R中还包含用于不同设置的示例代码。


7

您可能需要查看本文档和本文档的第5页。默认情况下,在R下,每个核心集都是自己的种子(我似乎记得使用高精度时间)。

注意:如果您在Windows下使用Revolution-computing的foreach(),那么我怀疑不会发生明智的事情。Windows不兼容POSIX,当每个内核需要不同的高精度时,这会造成问题。开始设置它的种子的时间(不幸的是,我没有方便的窗户,所以我无法凭经验进行检查)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.