如何让R使用更多的CPU和内存?

Sur*_*raj 12 r cpu-usage

无论R计算多么密集,它都不会占用超过25%的CPU.我已经尝试设置rsession.exeto 的优先级,High甚至Realtime但用法保持不变.有没有办法增加R的CPU使用率以充分利用我的系统的潜力,或者我对这个问题的理解是否有任何误解?在此先感谢您的帮助.

PS:下面是CPU使用情况的屏幕截图. CPU使用情况的屏幕截图

Jae*_*Kim 16

Base R是单线程的,因此预计4核CPU的使用率为25%.在单个Windows计算机上,可以使用并行程序包和foreach程序包在集群(或核心,如果您喜欢)之间传播处理.

首先,并行软件包(包含在R 2.8.0+中,无需安装)提供基于snow软件包的功能 - 这些功能是扩展的lapply().而foreach包提供了for循环结构的扩展 - 请注意它必须与doParallel包一起使用.

下面是使用这两个包进行k-means聚类的快速示例.这个想法很简单,它是(1)适合kmeans()每个集群,(2)结合结果和(3)选择最小值tot.withiness.

library(parallel)
library(iterators)
library(foreach)
library(doParallel)

# parallel
split = detectCores()
eachStart = 25

cl = makeCluster(split)
init = clusterEvalQ(cl, { library(MASS); NULL })
results = parLapplyLB(cl
                      ,rep(eachStart, split)
                      ,function(nstart) kmeans(Boston, 4, nstart=nstart))
withinss = sapply(results, function(result) result$tot.withinss)
result = results[[which.min(withinss)]]
stopCluster(cl)

result$tot.withinss
#[1] 1814438

# foreach
split = detectCores()
eachStart = 25
# set up iterators
iters = iter(rep(eachStart, split))
# set up combine function
comb = function(res1, res2) {
  if(res1$tot.withinss < res2$tot.withinss) res1 else res2
}

cl = makeCluster(split)
registerDoParallel(cl)
result = foreach(nstart=iters, .combine="comb", .packages="MASS") %dopar%
  kmeans(Boston, 4, nstart=nstart)
stopCluster(cl)

result$tot.withinss
#[1] 1814438
Run Code Online (Sandbox Code Playgroud)

有关这些软件包的更多详细信息以及更多示例,请参阅以下帖子.


小智 4

在大多数情况下,R 是单线程的。除非您设置正确,否则您将仅使用 1 个核心至 100%。我的猜测是您使用的是四核机器,因此 1 个核心在 100% 时看起来 CPU 使用率为 25%。