Vectorization
학습(Learning)을 진행하면, 데이터가 여러 개인데, 이를 처리할 때, 벡터로 묶어서 처리하는 방법. 속도가 빠르다.

SISDVS SIMD 연산
SIMD: 하나의 명령어로 여러 개의 데이터를 한 번에 처리하는 병렬 방식의 기법의 의미.
- Single Instruction Single Data
SISD: 하나의 명령어로 여러 데이터 동시 처리.
- Single Instruction Multi Data
- 때문에 vector, matrix 연산에 적합.
- 대표적으로 DirectX, OpenGL이 지원.
이를 아래와 같이 코드로 구현해서 비교해보자,
1000000개의 float 정보를 가진 array에 대해 inner product를 진행해보면,
Data Preparation
list_size = 1000000 a = np.random.rand(list_size) b = np.random.rand(list_size)
loop
def loop() -> float: c = 0 for a_i, b_i in zip(a, b): c += a_i * b_i_ return c
list-comprehension
def listcomp() -> float: return sum(a_i + b_i for a_i, b_i in zip(a, b))
vectorized
def vectorized() -> float: return np.dot(a, b)
Results
magic command를 사용해서 비교해본 시행 시간은 다음과 같다.
%time func_name()
loop() listcomp() vectorized() time(ms) 515 549 1.39