- Today
- Total
내 머릿속 데이터베이스
Vectorization (수열의 행렬화) 본문
출처 : 조대협의 블로그(http://bcho.tistory.com/969)
행렬 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/