【问题标题】:Why does my R uses all CPU cores when running functions like step()?为什么我的 R 在运行 step() 之类的函数时会使用所有 CPU 内核?
【发布时间】:2017-04-10 23:25:31
【问题描述】:

我的 R 经常在“顶部”显示使用超过 100% 的 CPU,这是否意味着它使用了超过 1 个核心?据我了解,R 默认使用 1 个 CPU 核心,除非使用某些并行计算包。但我只是使用 step() 函数。它是戴尔 T410 + Ubuntu 服务器 14.04 + R 3.3.2。

是 R 3.3.2 还是 Dell Server 或 Ubuntu Server 14.04 有帮助?还是只是“top”的bug?

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   

【问题讨论】:

  • 您是否正在使用 Revolution R/Microsoft R?

标签: r cpu cpu-usage ubuntu-server cpu-cores


【解决方案1】:

即使您的代码在技术上是单线程的,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)

如果您有兴趣详细了解计算机会尝试使用相同逻辑处理器的情况,请查看“处理器关联性”。

【讨论】:

    猜你喜欢
    • 2011-08-07
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    • 2013-07-03
    • 2020-09-29
    相关资源
    最近更新 更多