본문 바로가기

카테고리 없음

R에서 병렬처리 mclapply


원래 lapply나 sapply 쓰던 건 


require(parallel) # R 2.15 인가 부터 기본으로 들어있다. 
nthreads <- 6 # 최근 나온 쿼드코어면 4~6 정도 할당하면 된다. 하이퍼 스레딩으로 논리 코어가 여덜 개니까 그 중 6개 정도 사용. 
    system.time(result.list <- sapply(X=input.list, FUN = processingFunction)  # 이런 식의 원래 처리를 
    system.time(result.list.p <- mclapply(X=input.list, FUN=processingFunction, mc.cores= nthreads) # 이렇게 병렬 철;
stopifnot(result.list==result.list.p)  
stopifnot(result.list[[1]]==result.list.p[[1]])  # 결과 동일한지 확인. 리스트 끼리 확인 안돼서, 엘레먼트 와이즈 비교로 수정. 


역시 2~3배 정도 빨라졌다. 이 mclapply 함수의 장점은, 별도로 다른 설정을 앞에서 해 줄 필요 없이, 그냥 쉽게 쓸 수 있다는 것. 현재 사용하는 기계 말고 별도로 클러스터를 만들어 쓸 때는 앞에 좀 복잡하게 뭘 붙이면, 쉽게 역시 클러스터 이용해서 작업할 수 있다. 

병렬화에 재미 들렸다 요 며칠.