随机数生成
并行化的一个主要问题是使用 RNG 作为种子。数字的随机数通过会话开始或最近的 set.seed()
的操作次数进行迭代。由于并行过程来自同一个函数,它可以使用相同的种子,可能导致相同的结果! 呼叫将在不同核心上串行运行,没有任何优势。
必须生成一组种子并将其发送到每个并行进程。这在一些软件包(parallel
,snow
等)中自动完成,但必须在其他软件包中明确解决。
s <- seed
for (i in 1:numofcores) {
s <- nextRNGStream(s)
# send s to worker i as .Random.seed
}
种子也可以设置为再现性。
clusterSetRNGStream(cl = parallelcluster, iseed)