【问题标题】:How can I get R to use more CPU usage?如何让 R 使用更多的 CPU 使用率?
【发布时间】:2015-08-09 03:49:51
【问题描述】:

我注意到 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 个整数程序,那么您使用的软件包将很有用。如果您需要使用所有 4 个内核运行单个整数程序,则需要找到一个可以为您执行此操作的包(我认为 lpSolve 包不提供该选项)。
  • fwiw,这听起来和this recent question 很相似;您可能会发现 cmets 中的一些建议包很有帮助。
  • 是否有允许我使用所有内核运行程序的软件包?它不一定必须特定于 IP,但我可以增加 R 的 CPU 使用率吗?
  • 据我所知,并行化函数通常需要非常深入地了解它们的工作原理。例如,并行化 MIP 非常复杂,并且是运筹学和相关社区中一个积极研究的领域。您可以阅读更多关于并行处理的许多 R 包here
  • 最简单的解决方案是使用 Revolution R 的发行版。它使用 CPU 的 SIMD 指令在单核上实现 4 倍加速。它还比 R 本身更有效地使用多个内核。在 i7 上运行 svd 在 RRO 上比普通 R 快 7 倍。并行化解决方案应该在确保 R 本身以最大速度运行之后尝试。

标签: r parallel-processing mathematical-optimization multicore integer-programming


【解决方案1】:

如果您尝试并行运行 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。

否则,请参阅 cmets 关于您的问题

【讨论】:

    【解决方案2】:

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


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

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

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

    还有用于探索多 CPU 使用的包。
    Gavin 的This 回答以及上面@user3293236 的回答显示了允许多 CPU 使用的包的几种可能性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-17
      • 1970-01-01
      • 1970-01-01
      • 2015-11-06
      • 1970-01-01
      • 2020-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多