NPU

Systolic Array

슈넌 2023. 4. 22. 17:09

NPU에 대해 이해하려면 먼저 Systolic Array에 대한 이해가 필수적이다.

 

Systolic Array는 NxN 개의 PE(Processing Element)로 구성되어 있으며, 각 PE는 MultiplicationAddition을 수행한다.

Gemmini(H. Genc, et al., 2021) PE Image

이를 통해 partial sum을 계산하고 마지막 output으로 matrix multiplication의 결과가 생성된다.

 

이렇게 말을 통해서 말하면 이해가 어렵기 때문에 예시를 통해서 설명하도록 하겠다.

 

오늘은 이해를 돕기 위해서 weight stationary(WS)에 대해서만 예시를 들어 설명해 보겠다.

 

Dataflow에는 Weight Stationary, Output Stationary, Input Stationary, Row Stationary 등이 존재한다.

 

3x3 Matrix Multipication을 위해서는 곱하기와 더하기 연산이 사용된다.

 

아래와 같은 예시를 살펴보자.

W 행렬과 A 행렬을 곱하는 연산이다. 딥러닝을 해본 사람은 W가 Weight Matrix, A가 Input Matrix이고 GEMM 연산을 진행하는 것임을 알 수 있다.

 

3x3 Systolic Array를 통해서 계산을 해보겠다.

먼저 Weight Stationary의 경우 Weight를 Preload 해주어야 한다.

 

각 PE에 해당하는 Weight 값을 넣어주는 것이 Preload이다.

 

이후에 A matrix 값을 차례대로 넣어주게 되면 Output이 생성되게 된다.

이렇게 계산하게 되면 단 8 cycle 만에 3x3 matrix multiplication이 가능하게 된다.

 

이를 통해 Matrix Multiplication 뿐만 아니라 Convolution 연산도 빠르게 할 수 있다.

 

NPU의 기본이 되는 Systolic Array 구조는 필수적으로 알아야 한다. 추후에 Output Stationary와 같은 다른 Dataflow도 다뤄보겠다.