gpt4 book ai didi

R 并行包 - 在我的玩具示例中性能非常慢

转载 作者:行者123 更新时间:2023-12-04 15:31:30 24 4
gpt4 key购买 nike

我正在尝试对两个向量进行 1000 次放回采样并计算均值比。重复此过程 10,000 次。

我编写了一个示例并行代码,但它比在一台机器上使用简单的 for 循环花费的时间要长得多。

ratio_sim_par <- function(x1, x2, nrep = 1000) {

# Initiate cluster
cl <- makeCluster(detectCores() - 1) #Leave one core for other operations

clusterExport(cl, varlist=c("x1", "x2", "nrep"), envir=environment())

Tboot <- parLapply(cl, 1:nrep, function(x){

n1 <- length(x1)
n2 <- length(x2)

xx1 <- sample(x1, n1, replace = TRUE) # sample of size n1 with replacement from x1
xx2 <- sample(x2, n2, replace = TRUE) # sample of size n2 with replacement from x2
return(mean(xx1) / mean(xx2))
})

stopCluster(cl)

return(unlist(Tboot))

}

ratio_sim_par(x1, x2, 10000)

系统时间受不了。谁能帮我理解我犯的错误?谢谢

最佳答案

将任务分配到不同的节点需要大量的计算开销,并且可以抵消您从并行化脚本中获得的任何 yield 。在您的情况下,您正在调用 parLapply 10,000 次并且可能花费比实际执行重采样更多的资源来 fork 每个任务。使用非并行版本的 ratio_sim_par 尝试这样的事情:

mclapply(1:10000, ratio_sim_par, x1, x2, nrep = 1000, mc.cores = n_cores)

mclapply 会将作业分成尽可能多的可用内核,并 fork 一次。我正在使用 mclapply 而不是 parLapply 因为我已经习惯了并且不需要那么多设置。

关于R 并行包 - 在我的玩具示例中性能非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61180092/

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