6

我注意到 R 并没有使用我所有的 CPU,我想极大地增加它(高达 100%)。我不希望它只是并行化几个函数;我希望 R 使用更多的 CPU 资源。我正在尝试使用 lp() 函数运行纯 IP 集打包程序。目前,我运行 Windows,我的计算机上有 4 个内核。

我尝试过使用 snow、doParallel 和 foreach(虽然我不知道我真的在用它们做什么)。

在我的代码中,我有这个......

library(foreach)
library(doParallel)
library(snowfall)

cl <- makeCluster(4)
registerDoParallel(cl)

sfInit(parallel = TRUE, cpus = 4)


#code that is taking a while to run but does not involve simulations/iterations

lp (......, all.int = TRUE)

sfStop()

R 卡住并运行 lp() 很长时间。我的 CPU 大约是 25%,但我该如何提高呢?

4

2 回答 2

0

将此作为答案发布,因为评论中没有足够的空间。
这不是直接针对您的问题的答案,而是针对性能的答案。


R 默认使用慢速统计库,默认情况下也只能使用单核。改进的库是 OPENBLAS/ATLAS。然而,这些安装起来可能很痛苦。
就个人而言,我最终使用本指南让它工作。

我最终使用了革命 R open(RRO) + MKL,它具有改进的 BLAS 库和多 CPU 支持。这是另一种 R 发行版,它的速度应该是常规 R 的 20 倍(我无法证实这一点,但它要快得多)。

此外,您可以检查CRAN HPC 包,看看是否有任何支持 lp 功能的改进包。

还有一些包可以探索多 CPU 的使用。
Gavin 的这个答案以及上面@user3293236 的答案显示了允许多 CPU 使用的包的几种可能性。

于 2015-11-30T10:36:49.703 回答
0

如果您尝试并行运行 4 个不同的 LP,以下是如何在 snowfall.

sfInit(parallel=TRUE, cpus=4)
sfSource(code.R) #if you have your function in a separate file
sfExport(list=c("variable1","variable2",
            "functionname1")) #export your variables and function to cluster
results<-sfClusterApplyLB(parameters, functionname) #this starts the function on the clusters

例如,sfClusterApply 中的函数可能包含您的 LP。

否则请参阅有关您的问题的评论

于 2015-11-30T10:17:34.790 回答