빅데이타 & 머신러닝/통계학 이론

Vectorization (수열의 행렬화)

Terry Cho 2014. 11. 4. 21:58

행렬 A=[1 2 3 4 5] 가 있고, 행렬 B = [6 7 8 9 10] 이 있을 때

Sum(A(i) * B(i))의 값 1*6+2*7+…. 는 일반적으로

for(i=1;i<=5;i++) sum += A(i)+B(i) 가 된다.

이게 일반적인 프로그래밍 방식으면, 이런 공식을 행렬화하여 계산하는 것을 Vectorization이라고 한다.

Sum(A(i) * B(i)) = A+transpose(B)  로 표현할 수 있다.


이렇게 Vectorization을 하면서 얻을 수 있는 장점은 실제 코딩의 양을 줄일뿐 만아니라, 벡터 계산은 병렬 계산이 가능하기 때문에, Multi core를 잘 활용할 수 있다는 장점도 있으며

CPU 자체가 한클럭에 여러 계산이 가능하다.

일반적으로 64 bit cpu register를 앞의 일반적인 방식으로 계산하면 Register RxA,RxB,RxC에 대해서 RxC = RxC + (RxA:=A(i) ) * (RxB:=B(i)) 를 계산해서 한 클럭에 즉 1*6 공식 하나만 처리가 가능하다

그러나 Vectorization을 하면 64 bit register 16bit 4개의 sub register로 나눠서

RxB = [ 1 2 3 4]

RxB = [6 7 8 9]

로 해서 한클럭에 1*6+2*7+3*8+4*9 4개의 의 연산을 처리할 수 있기 때문에 빠른 속도를 낼 수 있다.

 

Coursera 강의 2주차 Octave강의 中


대부분의 수식 계산은 벡터화를 어떻게 하는가가 관건인듯


관련글

  • http://www.matlabtips.com/the-art-of-vectorizing-part-1/
  • http://www.matlabtips.com/the-art-of-vectorizing-part-2/
  • http://www.matlabtips.com/the-art-of-vectorizing-part-3/