2017-03-22 9 views
0

R에서 system.time을 사용하여 멀티 코어 기능의 총 CPU 시간을 얻고 싶습니다. 문제는 system.time이 병렬 패키지에 의해 생성 된 자식 프로세스가 소비하는 CPU 시간을 분명히 포착하지 않는다는 것입니다.R sys.child의 system.time 및 parallel 패키지는 0입니다.

library(doParallel) cl <- makeCluster(2) registerDoParalllel(2) timings <- system.time(foreach(i = 1:2) %do% rnorm(1e8))

타이밍은 타이밍가 추가이

> timings 
    user system elapsed 
16.883 5.731 22.899 

것 같습니다.

timings <- system.time(foreach(i = 1:2) %dopar% rnorm(1e8))

> timings 
    user system elapsed 
    2.445 3.410 20.347 

사용자와 시스템 시간 만 마스터 프로세스 포착되어 지금은 병렬 처리를 사용하는 경우. 특히 타이밍 [4]와 [5]를 보면 user.child와 sys.child 시간이 0임을 알 수 있습니다.

R의 병렬 처리에서 총 CPU 시간을 측정하려면 어떻게해야합니까?

참고 : 클러스터 시작 코드를 system.time 호출로 이동해도 차이가 없습니다.

> sessionInfo() 
R version 3.3.2 (2016-10-31) 
Platform: x86_64-pc-linux-gnu (64-bit) 
Running under: Debian GNU/Linux 8 (jessie) 

other attached packages: 
[1] doParallel_1.0.10 iterators_1.0.8 foreach_1.4.3  
+1

'https : // www.r-bloggers.com/the-wonders-of-foreach /'를 확인하십시오. 'user.child' 컬럼은 당신이 찾고있는 것일 수도 있습니다 – chinsoon12

+0

맞습니다, user.child 컬럼이 흥미 롭습니다. 하지만이 경우 0입니다. 공유 한 링크에서 배웠던 것은 (감사합니다!) 직접 테스트 한 결과 doMC를 사용할 때 user.child와 sys.child가 채워지지만 doParallel (PSOCK이나 FORK 모드에서는 사용되지 않음)을 사용할 때가 아닙니다. 병렬 패키지에서는 이것이 불가능합니까? – mlist

답변

0

@ chinsoon12는 올바른 방향으로 나를 가리켰다. user.child 및 sys.child는 cluster가 registerDoParallel에 의해 생성 될 때 채워집니다.

registerDoParalllel(cores = 2) 
timings <- system.time(foreach(i = 1:2) %dopar% rnorm(1e8)) 

     user.self sys.self elapsed user.child sys.child 
timings  0.429 1.978 19.378  9.818  1.386 

이 이유 때문에 doMC를 사용하여 수동으로 시작하지 않고 cl 변수를 통해 클러스터를 중지하지 않았습니다.