2017-11-26 15 views
0

안녕하세요 저는 병렬 컴퓨팅을 위해 dorng을 연구하고 있습니다. 각 k 시간의 총 실행 시간을보고 데이터 프레임에 저장하려고합니다. 그러나 목록 시간표에 결과가 저장되어있는 것을 확인하면 경과 시간이 나에게 부정적 인 음의 값이됩니다. 내 코드에 어떤 문제가 있습니까?dorng 병렬 계산 및 저장 경과 시간이 음수이면 R

library(doParallel) 
library(doRNG) 
cl <- makeCluster(3); 
registerDoParallel(cl) 

registerDoRNG(seed = 11) 
tstart_par = proc.time() 
time_chain_par = matrix(0, 10, 2) 
timetable <- foreach(k=1:10, .options.RNG=11) %dorng%{ 
    runif(10,0,1) 
    runif(10,0,1) 
    runif(10,0,1) 
    etime_par = proc.time() - tstart_par 
} 



> timetable 
[[1]] 
user system elapsed 
    -42.559 -8.004 -1483.762 

[[2]] 
user system elapsed 
    -43.179 -8.038 -1484.064 

[[3]] 
user system elapsed 
    -42.996 -8.065 -1484.305 

[[4]] 
user system elapsed 
    -42.558 -8.004 -1483.761 

[[5]] 
    user system elapsed 
    -43.178 -8.038 -1484.063 

[[6]] 
user system elapsed 
    -42.558 -8.004 -1483.761 

[[7]] 
    user system elapsed 
    -42.996 -8.064 -1484.304 

[[8]] 
    user system elapsed 
    -43.178 -8.038 -1484.062 

[[9]] 
    user system elapsed 
    -42.558 -8.004 -1483.760 

[[10]] 
    user system elapsed 
    -43.177 -8.038 -1484.061 
+0

'proc.time()'대신에 Sys.time()을 사용하는 것이이 상황에서 더 좋은 옵션입니다. –

답변

1

proc.time() 클러스터 내에서 다시, 그래서 당신의 주요 R 프로세스가 새로 생성 된 클러스터가 실행 된 시간에 실행 된 시간을 당신은 음의 값을 제공 비교된다. 이 상황에서 Sys.time() 함수를 사용하는 것이 더 좋으며, 중앙 시계와 비교해보십시오.

library(doParallel) 
library(doRNG) 
cl <- makeCluster(3); 
registerDoParallel(cl) 

registerDoRNG(seed = 11) 
tstart_par = Sys.time() 

timetable <- foreach(k=1:10, .options.RNG=11) %dorng%{ 
    runif(10,0,1) 
    runif(10,0,1) 
    runif(10,0,1) 
    etime_par = Sys.time() - tstart_par 
} 
stopCluster(cl) 

> timetable 
[[1]] 
Time difference of 2.897783 secs 

[[2]] 
Time difference of 2.897755 secs 

[[3]] 
Time difference of 2.899669 secs 

[[4]] 
Time difference of 2.899365 secs 

[[5]] 
Time difference of 2.899258 secs 

[[6]] 
Time difference of 2.900039 secs 

[[7]] 
Time difference of 2.901185 secs 

[[8]] 
Time difference of 2.901083 secs 

[[9]] 
Time difference of 2.901798 secs 

[[10]] 
Time difference of 2.902622 secs 

또는 (I 증가 어떻게 proc.time()를 사용하지만, 함수 내에서 그것을 넣을 수 있습니다 각 개별 클러스터가 실행 오랫동안 : 각 클러스터는 처리가 완료 될 때까지 그래서, 병렬 프로세스를 시작 시간을 계산하려면

cl <- makeCluster(3); 
registerDoParallel(cl) 

registerDoRNG(seed = 11) 

time_chain_par = matrix(0, 10, 2) 
timetable <- foreach(k=1:10, .options.RNG=11) %dorng%{ 
    tstart_par = proc.time() 
    runif(1000000,0,1) 
    etime_par = proc.time() - tstart_par 
} 
stopCluster(cl) 

timetable 
[[1]] 
    user system elapsed 
    0.148 0.008 0.307 

[[2]] 
    user system elapsed 
    0.145 0.008 0.249 

[[3]] 
    user system elapsed 
    0.145 0.008 0.325 

[[4]] 
    user system elapsed 
    0.062 0.002 0.130 

[[5]] 
    user system elapsed 
    0.062 0.002 0.118 

[[6]] 
    user system elapsed 
    0.061 0.003 0.110 

[[7]] 
    user system elapsed 
    0.062 0.002 0.110 

[[8]] 
    user system elapsed 
    0.061 0.003 0.149 

[[9]] 
    user system elapsed 
    0.062 0.002 0.117 

[[10]] 
    user system elapsed 
    0.097 0.003 0.169