我在Linux上使用R 2.14.0 64位。我继续使用了here描述的例子。然后我运行示例 -
library(doMC)
registerDoMC()
system.time({
r <- foreach(icount(trials), .combine=cbind) %dopar% {
ind <- sample(100, 100, replace=TRUE)
result1 <- glm(x[ind,2]~x[ind,1], family=binomial(logit))
coefficients(result1)
} })
但是,我在顶部看到它只使用一个CPU核心。为了证明另一种方式,如果我检查一个使用所有核心的进程,我看到 -
ignorant@mybox: ~/R$ ps -p 5369 -L -o pid,tid,psr,pcpu
PID TID PSR %CPU
5369 5369 0 0.1
5369 5371 1 0.0
5369 5372 2 0.0
5369 5373 3 0.0
5369 5374 4 0.0
5369 5375 5 0.0
5369 5376 6 0.0
5369 5377 7 0.0
但在这种情况下,我看到了 -
ignorant@mybox: ~/R$ ps -p 7988 -L -o pid,tid,psr,pcpu
PID TID PSR %CPU
7988 7988 0 19.9
ignorant@mybox: ~/R$ ps -p 7991 -L -o pid,tid,psr,pcpu
PID TID PSR %CPU
7991 7991 0 19.9
如何让它使用多个内核?我使用的是多核而不是doSMP或其他东西,因为我不希望每个进程都有我的数据副本。
答案 0 :(得分:4)
首先,您可能需要查看htop
,这可能适用于您的发布。您可以清楚地看到每个CPU的使用情况。
其次,您是否尝试过直接在机器上设置核心数?
使用htop
open:
library(doMC)
registerDoMC(cores=12) # Try setting this appropriately.
system.time({
r <- foreach(1:1000, .combine=cbind) %dopar% {
mean(rnorm(100000))
} })
# I get:
# user system elapsed
# 12.789 1.136 1.860
如果user
时间比经过的时间长得多(并非总是如此 - 我知道,但经验法则),您可能使用的是多个核心。
答案 1 :(得分:4)
您可以尝试使用以下命令执行脚本:
$ taskset 0xffff R --slave -f parglm.R
如果这样可以解决问题,那么你可能有一个使用OpenBLAS或GotoBlas2构建的R版本,它设置CPU亲和力,这样你就只能使用一个核心,这是一个已知的问题。
如果您想以交互方式运行示例,请使用以下命令启动R:
$ taskset 0xffff R