如何让R使用更多的CPU使用率?

如何让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

我注意到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()
库(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本身以最大速度运行后,应尝试并行化解决方案。