gpt4 book ai didi

r - 无论线程和操作系统的数量如何,如何以可重现的方式使用 mclapply 运行排列?

转载 作者:行者123 更新时间:2023-12-01 05:04:08 24 4
gpt4 key购买 nike

无论线程和操作系统的数量如何,是否可以以可重现的方式使用 mclapply 运行一些基于排列的函数?
下面是一个玩具示例。对结果排列的向量列表进行散列只是为了方便比较结果。我尝试了不同的 RNGkind (“L'Ecuyer-CMRG”),mc.preschedule 的不同设置和 mc.set.seed .到目前为止,没有运气使它们完全相同。

library("parallel")
library("digest")

set.seed(1)
m <- mclapply(1:10, function(x) sample(1:10),
mc.cores=2, mc.set.seed = F)
digest(m, 'crc32')

set.seed(1)
m <- mclapply(1:10, function(x) sample(1:10),
mc.cores=4, mc.set.seed = F)
digest(m, 'crc32')

set.seed(1)
m <- mclapply(1:10, function(x) sample(1:10),
mc.cores=2, mc.set.seed = F)
digest(m, 'crc32')

set.seed(1)
m <- mclapply(1:10, function(x) sample(1:10),
mc.cores=1, mc.set.seed = F)
digest(m, 'crc32')

set.seed(1)
m <- lapply(1:10, function(x) sample(1:10))
digest(m, 'crc32') # this is equivalent to what I get on Windows.
sessionInfo()以防万一:
> sessionInfo()
R version 3.2.0 (2015-04-16)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X 10.9.5 (Mavericks)

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] parallel stats graphics grDevices utils datasets methods base

other attached packages:
[1] digest_0.6.8

loaded via a namespace (and not attached):
[1] tools_3.2.0

最佳答案

另一种方法是首先生成您想要使用的样本并在样本上调用 mclapply:

    library("parallel")
library("digest")

input<-1:10
set.seed(1)
nsamp<-20
## Generate and store all the random samples
samples<-lapply(1:nsamp, function(x){ sample(input) })

## apply the algorithm "diff" on every sample
ncore0<- lapply(samples, diff)
ncore1<-mclapply(samples, diff, mc.cores=1)
ncore2<-mclapply(samples, diff, mc.cores=2)
ncore3<-mclapply(samples, diff, mc.cores=3)
ncore4<-mclapply(samples, diff, mc.cores=4)

## all equal
all.equal(ncore0,ncore1)
all.equal(ncore0,ncore2)
all.equal(ncore0,ncore3)
all.equal(ncore0,ncore4)

这以使用更多内存和稍长运行时间为代价确保了可重复性,因为对每个样本进行的计算通常是最耗时的操作。

注:使用 mc.set.seed = F在您的问题中将为每个核心生成相同的样本,这可能不是您想要的。

关于r - 无论线程和操作系统的数量如何,如何以可重现的方式使用 mclapply 运行排列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30610375/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com