Linux上的多核不使用多个CPU

时间:2013-04-03 21:41:45

标签: r parallel-processing domc

我在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或其他东西,因为我不希望每个进程都有我的数据副本。

2 个答案:

答案 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