2

길고 계산 집중적 인 백 테스트를 병렬로 실행해야합니다. 내 백 테스트는 평균 8 시간이 걸리고 30 회 실행해야합니다. 그들은 모두 다른 입력으로 동일한 기능을 호출합니다. 지금까지 찾을 수 있었던 것은 foreach 패키지를 사용하는 코드 조각입니다.R : 병렬 백 테스트 실행

require(foreach) 
require(parallel) 
require(doParallel) 

cores = detectCores() #32 
cl<-makeCluster(cores) #register cores 
registerDoParallel(cl, cores = cores) 

foreach (j=1:2) %dopar% { 

    if(j == 1) 
    { 
     get_backtestRUN(inputA) 
    } 

    if(j == 2) 
    { 
     get_backtestRUN(inputB) 
    } 
} 

첫 번째 질문은 일반적인 질문이며 위의 패키지가 내 문제를 해결하는 가장 좋은 방법인지 궁금합니다.

두 번째 질문은 내 로컬 컴퓨터에서 동시에 8 개의 백 테스트를 실행할 수 있기 때문에 추가적인 컴퓨팅 성능 사용과 관련이 있습니다. 온라인 옵션이 풍부하고 진행하기 가장 쉬운 친숙한 방법에 관한 권장 사항을 갖고 싶습니다. 이 링크는 꽤 명확하게 내 질문에 대한 대답

답변

1

여러분의 도움과 시간에 대한

감사 : 중요한 부분 아래

https://www.r-bloggers.com/how-to-go-parallel-in-r-basics-tips/

:

foreach는 패키지 뒤에 아이디어는 만드는 것입니다 '루프와 루프 (lapply) 기능을위한 표준의 하이브리드'와 그 사용 편의성은 오히려 대중적으로 만들었습니다. 당신이 마지막 두 줄을 변경할 수 있습니다

library(foreach) 
library(doParallel) 

cl<-makeCluster(no_cores) 
registerDoParallel(cl) 

주 : 셋업을 사용하면 다음과 같이 클러스터 "등록"필요, 약간 다른

registerDoParallel(no_cores) 

을하지만 당신은 기억 할 필요가 대신 끝에 stopCluster()의 수행

stopImplicitCluster() 

foreach는 기능에 적합한 견적 결과를 결합 parSapply 수있는보다 제어 된 버전 인 것으로 볼 수있다 티. 마지막으로 그냥 기본이고 어떤 조정이없이 달성 될 수 있다는 것을

foreach(exponent = 2:4, 
     .combine = c) %dopar% 
    base^exponent 

foreach(exponent = 2:4, 
     .combine = rbind) %dopar% 
    base^exponent 

     [,1] 
result.1 4 
result.2 8 
result.3 16 

foreach(exponent = 2:4, 
     .combine = list, 
     .multicombine = TRUE) %dopar% 
    base^exponent 

[[1]] 
[1] 4 

[[2]] 
[1] 8 

[[3]] 
[1] 16 

참고 : .combine 인수를 지정하면 우리는 우리의 결과를 결합하는 방법을 선택할 수 있습니다, 아래 벡터, 행렬 및 목록의 예입니다 foreach (지수 = 2 : 4) % dopar %. 이 예제에서는 중첩 목록을 피하기 위해 필요한 .multicombine 인수를 주목할 필요가 있습니다. 중첩은 순차적 인 .combine 함수 호출 (즉, list (result.1, result.2), result.3)으로 인해 발생합니다.

foreach(exponent = 2:4, 
     .combine = list) %dopar% 
    base^exponent 
[[1]] 
[[1]][[1]] 
[1] 4 

[[1]][[2]] 
[1] 8 


[[2]] 
[1] 16 
+0

잠재적 인 솔루션에 대한 링크는 언제나 환영하지만 [ 링크 주위에 컨텍스트를 추가] (// meta.stackoverflow.com/a/8259) 동료 사용자가 그것이 무엇인지, 그 이유를 알 수 있습니다. 대상 사이트에 도달 할 수 없거나 영구적으로 오프라인 상태가되는 경우 중요한 링크의 가장 중요한 부분을 항상 인용하십시오. 외부 사이트에 대한 링크 이상일 경우 _ 이유는 무엇이며 어떻게 답변이 삭제됩니까?] (// stackoverflow.com/help/deleted-answers)에 대한 이유가 될 수 있습니다. – FrankerZ

+0

내 대답을 완성했습니다. 제 질문에 대답하고 있습니다. – Fredkho