1

我在 Linux 上使用 R 2.14.0 64 位。我继续使用此处描述的示例。然后我运行这个例子 -

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

4

2 回答 2

4

首先,您可能想查看htop,它可能适用于您的发行版。您可以清楚地看到每个 CPU 的使用情况。

二、有没有试过直接在机器上设置核数?

打开运行它htop

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时间比经过的时间长得多(并非总是——我知道,但根据经验法则),您可能使用了多个内核。

于 2013-04-03T23:00:07.293 回答
4

您可以尝试使用以下命令执行脚本:

$ taskset 0xffff R --slave -f parglm.R

如果这解决了问题,那么您可能拥有使用 OpenBLAS 或 GotoBlas2 构建的 R 版本,它设置 CPU 亲和性,以便您只能使用一个内核,这是一个已知问题。

如果您想以交互方式运行您的示例,请使用以下命令启动 R:

$ taskset 0xffff R
于 2013-04-06T02:01:05.370 回答