如何让R使用更多的CPU使用率?
我注意到R并没有使用我所有的CPU,我想极大地增加它(增加到100%)。我不希望它只是并行几个函数;我希望R使用更多的CPU资源。我正在尝试使用lp()函数运行纯IP集打包程序。目前,我运行windows,我的计算机上有4个内核 我试着用snow、doParallel和foreach做实验(尽管我不知道我到底在用它们做什么) 在我的代码中我有这个如何让R使用更多的CPU使用率?,r,parallel-processing,mathematical-optimization,multicore,integer-programming,R,Parallel Processing,Mathematical Optimization,Multicore,Integer Programming,我注意到R并没有使用我所有的CPU,我想极大地增加它(增加到100%)。我不希望它只是并行几个函数;我希望R使用更多的CPU资源。我正在尝试使用lp()函数运行纯IP集打包程序。目前,我运行windows,我的计算机上有4个内核 我试着用snow、doParallel和foreach做实验(尽管我不知道我到底在用它们做什么) 在我的代码中我有这个 library(foreach) library(doParallel) library(snowfall) cl <- makeCluste
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()
库(foreach)
图书馆(双平行)
图书馆(降雪)
cl如果您试图并行运行4个不同的LPs,下面介绍如何在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
sfInit(parallel=TRUE,cpu=4)
sfSource(code.R)#如果您的函数位于单独的文件中
sfExport(列表=c(“变量1”、“变量2”),
“functionname1”)#将变量和函数导出到集群
结果将此作为答案发布,因为评论中没有足够的空间。
这不是直接针对您的问题的答案,而是针对性能的答案
默认情况下,R使用慢速统计库,默认情况下也只能使用单核。改进的库是OPENBLAS/ATLAS。但是,安装这些设备可能会很麻烦。
就我个人而言,我最终使用了它
我最终使用了+MKL,它改进了BLAS库和多cpu支持。这是一种替代的R分布,其速度应该是常规R的20倍(我不能证实这一点,但它要快得多)
此外,您可以检查,看看是否有任何支持lp功能的改进包
还有一些软件包可以探索多cpu的使用情况。
Gavin的回答以及上面@user3293236的回答显示了允许多CPU使用的软件包的几种可能性。如果您需要并行运行4个整数程序,那么您使用的软件包将非常有用。如果您需要使用所有4个内核运行一个整数程序,那么您需要找到一个为您运行该程序的包(我认为lpSolve
包不提供该选项);您可能会在评论中发现一些建议的软件包很有帮助。是否有允许我使用所有内核运行程序的软件包?它不一定是特定于IP的,但更重要的是,我可以提高我的R的CPU使用率吗?据我所知不是这样的——并行化函数通常需要对它们的工作方式有相当深入的了解。例如,并行化MIPs非常复杂,是运筹学和相关社区的一个活跃研究领域。您可以阅读更多有关并行处理的R包的信息。最简单的解决方案是使用Revolution R的发行版。它使用CPU的SIMD指令在单核上实现4倍的加速。它也比R本身更有效地使用多核。在i7上运行svd
在RRO上的速度是普通R的7倍。在确保R本身以最大速度运行后,应尝试并行化解决方案。