无论R计算多么密集,它都不会占用超过25%的CPU.我已经尝试设置rsession.exeto 的优先级,High甚至Realtime但用法保持不变.有没有办法增加R的CPU使用率以充分利用我的系统的潜力,或者我对这个问题的理解是否有任何误解?在此先感谢您的帮助.
PS:下面是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)
有关这些软件包的更多详细信息以及更多示例,请参阅以下帖子.
| 归档时间: |
|
| 查看次数: |
27245 次 |
| 最近记录: |