为什么我的R在运行step()之类的函数时使用所有的CPU核心?
问题描述:
我的R通常显示在“顶部”使用超过100%的CPU,这是否意味着它使用了超过1个内核?据我所知,默认情况下,R使用1个CPU核心,除非使用某些并行计算软件包。但我只是使用step()函数。它是戴尔T410 + Ubuntu服务器14.04 + R 3.3.2。为什么我的R在运行step()之类的函数时使用所有的CPU核心?
它是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
答
即使您的代码在技术上是单线程的,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)
如果您想了解更多关于在其中一台计算机将试图坚持使用同样的逻辑处理器,抬头看情况“处理器关联。”
你是否在使用Revolution R/Microsoft R? –