행렬 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/
'빅데이타 & 머신러닝 > 통계학 이론' 카테고리의 다른 글
수리 통계 관련 서적 (0) | 2015.02.11 |
---|---|
확률분포에서 T분포의 사용 예제 (1) | 2014.12.01 |
표준편차 (standard deviation)에서 편차의 절대값을 사용하지 않고, 편차의 제곱을 사용하는 이유 (5) | 2014.11.13 |
근대 통계학의 개념과 유례 (0) | 2014.11.12 |
평균,표준편차,분산의 개념 (4) | 2014.11.12 |