Systolic Array
systolic array, 시스톨릭 어레이, MXU, Matrix Multiply Unit
정의
Systolic Array 는 격자 형태로 배치된 다수의 Processing Element (PE) 가, 입력 데이터가 박동(systolic)처럼 격자를 가로질러 흐르는 동안 각 PE 가 곱셈+누적(MAC) 을 수행하는 하드웨어 구조다.
H.T. Kung 이 1978년 제안한 개념이며, TPU 의 핵심 컴퓨팅 단위로 부활했다. TPU 에서는 MXU (Matrix Multiply Unit) 으로 불린다.
핵심 아이디어
행렬 곱셈 C = A × B 를 수행할 때:
- 가중치 정주(Weight Stationary): 가중치는 각 PE 에 미리 적재되어 움직이지 않음
- 활성화 흐름(Activation Flow): 입력 활성화는 격자를 가로질러 흐름 (좌→우)
- 부분합 누적: 각 PE 가 받은 입력 × 가중치 결과를 다음 PE 로 전달, 마지막 PE 가 누적합 출력
이 구조의 우아함:
- 메모리 접근 최소화: 각 가중치는 PE 에 1번 적재 → 수많은 곱셈에 재사용
- 완벽한 데이터 재사용: 한 활성화 값이 여러 PE 를 지나며 여러 곱셈에 참여
- 간단한 제어: 모든 PE 가 같은 동작 (clock 동기) → 제어 회로 거의 없음
CPU/GPU 와의 차이
| CPU | GPU | Systolic Array (TPU) | |
|---|---|---|---|
| 제어 회로 비중 | 매우 높음 | 중간 | 매우 낮음 |
| 메모리 접근 | 빈번 (캐시 의존) | 빈번 (HBM) | 최소 (정주) |
| 행렬 곱 효율 | 낮음 | 높음 | 최고 |
| 다양한 워크로드 | 모두 | 대부분 | 행렬 위주만 |
한계
- 유연성 부족: 행렬 곱셈에 최적화. element-wise 연산, 비선형 함수 등은 별도 vector unit 으로 처리
- fixed shape: MXU 크기 (예: 256x256) 보다 작은 행렬을 곱하면 활용률이 낮아짐. 모델을 큰 행렬로 합치는 패딩/타일링 필요
- 희소(sparse) 비효율: 대부분의 element 가 0인 sparse matrix 에서는 비효율. TPU v4+ 에서 SparseCore 별도 추가
💬 댓글