随机数生成

并行化的一个主要问题是使用 RNG 作为种子。数字的随机数通过会话开始或最近的 set.seed() 的操作次数进行迭代。由于并行过程来自同一个函数,它可以使用相同的种子,可能导致相同的结果! 呼叫将在不同核心上串行运行,没有任何优势。

必须生成一组种子并将其发送到每个并行进程。这在一些软件包(parallelsnow 等)中自动完成,但必须在其他软件包中明确解决。

s <- seed
for (i in 1:numofcores) {
    s <- nextRNGStream(s)
    # send s to worker i as .Random.seed
}

种子也可以设置为再现性。

clusterSetRNGStream(cl = parallelcluster, iseed)