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()로 해제해 주세요. 잊어버리시면 안됩니다.
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()로 해제해 주세요. 잊어버리시면 안됩니다.
댓글
댓글 쓰기