【发布时间】:2017-09-04 02:18:11
【问题描述】:
考虑使用并行foreach 生成随机值的非常基本(且效率低下)的代码:
cl <- makeCluster(2)
registerDoParallel(cl)
foreach(i = 1:100) %dopar% rnorm(1)
它是正确的还是需要任何额外的步骤才能使随机生成正常工作?我想这已经足够了,快速检查似乎“证明”种子可以正常工作,但我想确保它在其他平台上也是如此,因为我希望代码是可移植的。
【问题讨论】:
-
这合并为两个重要的子任务: A:确保对某些 PRNG 的并行调用正常工作(线程安全、阻塞等),其中更安全的方法是为每个线程/进程使用一个 PRNG (不确定这里进行了哪种并行化)和 B:(在不同 PRNG 的情况下)确保这些种子能够产生良好的随机数。许多 PRNG 在这方面存在很多缺陷(例如,使用种子初始化的 Mersenne-Twister:0、1、2 -> 坏)。进一步搜索的关键字是:分布式播种(有很多方法:跳跃式;PRNG 跳跃,.)。
-
谢谢。但是通用的最新包like
plyr似乎并不关心它。这是否意味着它们不应该用于此类目的?
标签: r parallel-processing parallel-foreach doparallel