안녕하세요. 오늘은 systolic array에 대해 알아보도록 하겠습니다.
Systolic Array는 인공지능 연산의 핵심 연산인 행렬곱을 병렬로 파이프라이닝 하여 처리하며, 데이터 흐름을 최적화하여 계산 효율과 자원 활용도를 극대화합니다. 구글의 TPU를 포함한 여러 AI 하드웨어에서도 이 구조가 채택되며, CNN 연산의 하드웨어 가속화에서 중요한 역할을 하고 있습니다.
이번 포스트에서는 systolic array에서 어떻게 컨볼루션 연산 시 데이터를 처리하는지 간단한 예시와 함께 알아보도록 하겠습니다.
행렬 A와 B, 그리고 이 두 행렬의 곱은 위 수식과 같이 이루어지게 됩니다. 곱하고 더하는 과정이 반복되는 것을 확인할 수 있습니다.
위의 행렬곱과 같은 연산을 수행하는 2x2 시스톨릭 어레이입니다. 각 행렬 요소와 0값이 각 time step마다 하나의 PE에서 곱해지고 누적된 후, 다음 PE로 요소 값을 넘겨줍니다.
이 과정을 time step별로 분류해보면 다음과 같습니다.
2x2 시스톨릭 어레이에서의 행렬곱 연산은 보시는 그림과 같이 이루어 집니다.
현재 입력되는 두개의 요소들을 곱한 후 PE는 이 값을 저장해놓고, 다음으로 입력되는 요소들의 곱과 계속해서 누적을 합니다.
이 과정이 병렬적으로 파이프라이닝화 되어 보다 빠르게 행렬곱 연산을 수행된다는 것을 이해할 수 있으실 겁니다.