gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 23:33:42 26 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





R package that automatically uses several cores?

(6 个回答)


6年前关闭。




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

P.S.:下面是CPU使用率的截图。
Screenshot of the CPU usage

最佳答案

Base R 是单线程的,因此 25% 的使用率预计在 4 核 CPU 上。在单个 Windows 机器上,可以使用 将处理分布到集群(或内核,如果您愿意)。平行包和 foreach 包裹。

首先parallel包(包含在R 2.8.0+中,无需安装)提供了基于snow包的功能——这些功能是lapply()的扩展.而且 foreach 包提供了 for-loop 结构的扩展——注意它必须与 一起使用。 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

可以在以下帖子中找到这些包的更多详细信息和更多示例。
  • Parallel Processing on Single Machine I
  • Parallel Processing on Single Machine II
  • Parallel Processing on Single Machine III
  • 关于r - 如何让 R 使用更多的 CPU 和内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29998718/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com