【发布时间】: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