Multicore 사용하기 - foreach

여러 방법이 있지만...
doSNOW 패키지를 쓰는 방법을 권장해드립니다.

#라이브러리 불러오기
suppressMessages({
  library(doSNOW)
  library(foreach)
})

#코어 등록하기(3개 기준)
c1=makeSOCKcluster(3)
registerDoSNOW(c1)

# 프로그래스바를 만들고(.options.snow로 가는 것을 잘 보세요)
# .packages로 패키지를 코어로 내리고
# .export로 데이터도 코어로 내립니다.

pb <- txtProgressBar(max=100, style=3)
progress <- function(n) setTxtProgressBar(pb, n)
opts <- list(progress=progress)
r <- foreach(i=1:100,
     .options.snow=opts,
     .packages=c("dplyr","foreach"),
     .export=c("my_function","my_variable")) %dopar% {
  Sys.sleep(1)
  sqrt(i)
}
close(pb)
stopCluster(c1)


자...
사용법은 꽤나 간단하죠?
주의할 점이 있습니다. 각각의 core에 데이터를 내려 줄 때 메모리 걱정을 좀 하셔야 합니다. 간단한 계산을 여러 코어에 나눠 하실 때는 도움이 되지만 너무 많은 코어를 쓰면 메모리가 다 없어질 수도 있습니다. 그리고 등록된 cluster는 반드시 stopCluster()로 해제해 주세요. 잊어버리시면 안됩니다.

댓글

이 블로그의 인기 게시물

Bradley-Terry Model: paired comparison models

xlwings tutorial - 데이터 계산하여 붙여 넣기

R에서 csv 파일 읽는 법