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)5155491.39