为什么我的R在运行诸如step()之类的功能时会使用所有CPU内核?

Mai*_*ian 5 cpu r cpu-usage cpu-cores ubuntu-server

我的R通常显示在“顶部”使用了100%以上的CPU,这是否意味着它使用了1个以上的内核?据我了解,除非使用某些并行计算程序包,否则R默认情况下使用1个CPU内核。但是我只是使用step()函数。它是Dell T410 + Ubuntu Server 14.04 + R 3.3.2。

是R 3.3.2还是Dell Server或Ubuntu Server 14.04有所帮助?还是仅仅是“顶部”的错误?

top - 17:42:39 up 11:09,  2 users,  load average: 16.00, 16.01, 15.98
Tasks: 282 total,   3 running, 279 sleeping,   0 stopped,   0 zombie
%Cpu(s): 14.9 us, 85.1 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:  24668964 total, 23472468 used,  1196496 free,   229884 buffers
KiB Swap: 25145340 total,       60 used, 25145280 free.  1117020 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                             
17704 can       20   0 21.495g 0.020t  13016 R  **1540** 87.1   4458:52 rsession                            
17748 can       20   0   26632   1780   1172 S   0.7  0.0   0:50.62 top                                 
 2528 can       20   0  105660   2276   1260 S   0.3  0.0   0:00.01 sshd   
Run Code Online (Sandbox Code Playgroud)

And*_*ēza 6

即使您的代码在技术上是单线程的,R似乎经常使用多个内核。这经常发生是因为R在不同处理器之间切换太快而无法注意到。我以下面的代码为例。在Windows 10机器上运行它时,我看到两个处理器在努力工作。

library(microbenchmark)

pb <- txtProgressBar(min = 0, max = 100, style = 3)

for(i in 1:100) {
  microbenchmark(rnorm(10000), runif(10000), rpois(10000, 1))
  setTxtProgressBar(pb, i)
}
close(pb)
Run Code Online (Sandbox Code Playgroud)

如果您想了解更多有关计算机尝试使用相同逻辑处理器的情况的信息,请查找“处理器亲和力”。