2017-01-20 11 views
0

글쎄, 아무도 그 질문을 이해하지 못했다고 생각합니다 ...R foreach doParallel with 1 worker/thread

나는 동적 스크립트가 있습니다. 때로는 10 가지 목록을 반복하고 때로는 1 가지만 반복합니다.

반복 할 항목이 1보다 큰 경우 스크립트를 병렬로 실행하려면 foreach을 사용하고 싶습니다. 항목 당 1 개의 코어를 사용하여 반복 처리하기 만하면됩니다. 그래서, 5 가지가 있다면, 나는 5 개의 쓰레드에 걸쳐 병렬 할 것입니다.

제 질문은 반복 할 목록이 1 일 때 어떻게됩니까?

병렬로 실행하지 말고 처리량을 최대화하는 것이 더 좋습니까? 또는 스크립트에 1 명의 작업자를 할당하도록 할 수 있습니까? 병렬로 실행하도록 지시하지 않은 경우처럼 실행됩니다.

답변

1

그래서 당신이 다른 프로세스

동적으로 설정할 수 있습니다 iter "당신이 반복되는 사물의 수는"

스크립팅 iter 1 다음은이

if(length(iter)==1){ 
    Result <- #some function 
} else { 
    cl <- makeCluster(iter) 
    registerDoParallel(cl) 
    Result <- foreach(z=1:iter) %dopar% { 
    # some function 
    } 
    stopCluster(cl) 
} 

과 같이 보일 수있는 병렬화 경우 호출 할 수 있습니다 그렇지 않으면 병렬 번호를 iter의 수에 따라 동적으로 할당합니다. 함수에 이것을 포함하려는 경우 makeClusterregisterDoParallel을 함수 내에서 호출 할 수없는 경우 함수 외부에서 호출해야합니다.

또는 노드가있는만큼 클러스터를 등록하고 foreach을 동적으로 실행하면 사용되지 않는 클러스터가 유휴 상태로 유지됩니다.

EDIT : 반복 작업을 하나만 수행하면 병렬로 실행하지 않는 것이 좋습니다. makeCluster(), registerDoParallel()stopCluster()으로 인한 추가 시간을 피하려면 그러나 한 근로자와 평행을 이루는 것에 비해 그 차이는 작습니다. 위의 수정 된 코드는 단 하나의 작업자의 경우 화면에 조건부를 추가합니다. 도움이 더 필요하면 의견을 보내주십시오.

+0

내가 편집 함 –

+0

이에 따라 답변을 편집했습니다 – JustGettinStarted

+0

답변에 만족 스러우면이 질문이 닫혔 음을 나타내는 체크 표시를 클릭하십시오. – JustGettinStarted