R foreach 루프가 doParallel 백엔드와로드 균형 조정을 수행하는 방법을 수정할 수 있습니까? 실행 시간이 매우 다른 작업을 병렬 처리 할 때 모든 노드에서 발생할 수 있지만 하나는 작업을 마친 반면 마지막 노드는 여러 가지 작업을 수행해야합니다. 다음은 장난감 예입니다.foreach 루프에서로드 밸런싱
library(foreach)
library(doParallel)
registerDoParallel(4)
waittime = c(10,1,1,1,10,1,1,1,10,1,1,1,10,1,1,1)
w = iter(waittime)
foreach(i=w) %dopar% {
message(paste("waiting",i, "on",Sys.getpid()))
Sys.sleep(i)
}
기본적으로 코드 레지스터 4 코어입니다. 각 루프 i
에 대해 waittime[i]
초를 기다리는 작업입니다. 그러나 foreach 루프의로드 균형 조정은 기본적으로 총 작업 수를 등록 된 코어 수의 집합으로 분할하기 때문에 위의 예에서 첫 번째 코어는 waittime
으로 모든 작업을 수신합니다 = 10 인 반면 나머지 3 명은 waittime
= 1로 작업을 수신하므로 첫 번째 작업이 완료되기 전에 이러한 3 개의 코어가 모두 완료됩니다.
foreach()
개의 작업을 한 번에 하나씩 배포 할 수있는 방법이 있습니까? 즉 위의 경우 처음 4 개의 작업이 4 개의 코어에 분산되어 있고 다음 작업이 다음 사용 가능한 코어로 분산되어 있어야합니다.
감사합니다.
예. 그게 다야. 고마워. – xraynaud