R vectorization을 해야 하는 이유.

어제 The Art of R Programming 책을 보다가 2.13에서 포함된 바이트 컴파일러 패키지 예제를 보고 몇 가지 코드를 올려본다.

크게 3가지 코드가 있는데, 테스트는 10000000의 데이터를 가진 벡터끼리의 곱 연산 속도 비교를 for문 기반, 바이트 컴파일 된 함수 기반,vectorization 기반 이렇게 세가지 방법으로 돌려봤다.

결과는 바이트 컴파일 된 함수가 for으로 돌린 컴파일되지 않은 코드보다 3배 이상 빨랐고, 벡터화 된 코드는 컴파일 된 for문 코드보다  212배 빨랐다.

2.13.2에 새로 포함된 바이트 컴파일러 패키지 사용이 코드 속도 향상에 도움이 되긴 하지만 역시나 vectorization 기반의 코드 작성이 훨씬 많은 성능향상을 가져온다는 것을 알 수 있다.

for문을 쓰지 않고 얻을 수 있는 최적화의 정도가 너무 크니 앞으로 for문 사용을 최대한 자제하는 게 나을 듯 하다.

 

 

library(compiler)
x <- rnorm(10000000)
y <- rnorm(10000000)
z <- vector(mode="numeric",length=10000000)
system.time(z <- x * y)

test1 <- function(){
  for(i in 1:10000000)
    z[i] <<- x[i] * y[i]
}

system.time(test1())
#    user  system elapsed
#  39.551   0.094  39.651

comp_test1 <- cmpfun(test1)
system.time(comp_test1())
#    user  system elapsed
#  11.831   0.066  11.898

system.time(z <- x * y)
#    user  system elapsed
#   0.034   0.022   0.056



0 0 votes
Article Rating
Subscribe
Notify of
guest

4 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Ryan Soar

딴 얘긴데, 혹시 Head First Data Analysis 번역 중신가요? 

Anonymous

현재 아무 번역도 하고 있지 않습니다. 

감사합니다. 

Anonymous

현재 아무 번역도 하고 있지 않습니다. 

감사합니다. 

[…] 같은 팀분이 번역을 해서 증정본을 하나 선물 받았다.  사실 이 책은 출판사에서 번역서를 출간해도 좋을지 원서 리뷰를 해달라고 해서 원서를 미리 봤고 너무 좋은 책이라서 이미 원서의 특정 챕터에 대한 포스팅까지 썼었다.  […]