오늘 끝나면
행렬 연산 가속기
- ✓행렬 연산 가속기의 핵심 문제를 한 문장으로 설명한다
- ✓오른쪽 실습에서 행렬이 어떻게 움직이는지 관찰한다
- ✓다음 강의와 이어지는 한계를 말할 수 있다
실습 미션
MAC array·tile·데이터 재사용 — systolic 흐름 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.
성공 조건
- □실습의 기본값을 먼저 관찰
- □입력값이나 모드를 한 번 이상 바꿔 결과 비교
- □왜 결과가 바뀌었는지 한 문장으로 설명
반도체 설계 · 31
행렬 연산
가속기
AI 연산은 결국 거대한 행렬 곱의 연속이다.
곱하고 더하기(MAC)를 격자로 깔아 동시에 굴린다.
tile로 쪼개 데이터를 재사용하는 것이 가속기의 심장이다.
내적 = 곱하고 더하기(MAC)
행렬 곱의 출력 한 칸은 결국 내적이다. 두 줄을 짝지어 곱하고 다 더한 값이다. 그 한 박자가 MAC이다.
MAC은 Multiply-Accumulate, 곱하고 누적한다는 뜻이다.
곱셈기 하나와 덧셈기 하나, 그리고 결과를 모아두는 누적 레지스터(acc) 하나로 이뤄진다.
한 박자에 acc ← acc + a·b 한 줄을 처리한다.
출력 한 칸 C[i][j]은 A의 i행과 B의 j열을 짝지어 K번 MAC을 누적한 값이다.
8×8 행렬 곱이면 출력 64칸에 각 K번씩, 수백 번의 MAC이 된다.
AI 모델은 이 행렬 곱을 매 층마다 수십억 번 한다. 그래서 MAC을 얼마나 빨리, 많이 돌리느냐가 전부다.
| k | 0 | 1 | 2 | 3 |
|---|---|---|---|---|
| A[i] | 3 | 1 | 4 | 2 |
| B[j] | 2 | 5 | 1 | 3 |
| a·b | 6 | 5 | 4 | 6 |
| acc | 6 | 11 | 15 | 21 |
MAC을 격자로, systolic array
MAC 하나로는 한 박자에 한 번뿐이다. 그래서 MAC을 격자로 빽빽이 깔아 한 cycle에 동시에 굴린다. 이 격자가 systolic array다.
systolic은 ‘심장이 박동하듯’이란 뜻이다. 데이터가 격자를 한 칸씩 흘러 들어가며 펌프질하듯 퍼진다.
A 값은 왼쪽에서 오른쪽으로, B 값은 위에서 아래로 흐른다.
각 MAC 칸은 흘러온 a·b를 곱해 자기 acc에 누적하고, 같은 값을 옆과 아래 칸으로 넘겨준다.
핵심은 재사용이다. 한 번 격자에 들여보낸 A의 한 줄이 그 행의 모든 MAC을 지나며 여러 번 쓰인다.
데이터를 메모리에서 한 번만 읽어 격자 안에서 돌려 쓰니, 같은 값을 다시 읽지 않는다.
P×P 격자면 한 cycle에 P×P개 MAC이 동시에 돈다. array를 키우면 cycle이 줄어든다.
tile, 작게 쪼개 scratchpad에 올린다
행렬이 크면 통째로 격자에 못 들어간다. 그래서 출력을 작은 블록으로 쪼갠다. 이 블록이 tile이다.
tile 한 블록을 도는 동안엔 A의 그 몇 행, B의 그 몇 열만 필요하다.
그만큼을 DRAM에서 한 번 읽어 칩 안의 작은 메모리 scratchpad에 올려둔다.
그 블록의 모든 출력 칸이 올려둔 데이터를 돌려 쓰니, DRAM을 다시 가지 않는다.
그래서 tile이 클수록 한 번 올린 데이터를 더 많은 칸이 재사용하고, 그만큼 DRAM traffic이 줄어든다.
단, scratchpad 용량은 한계가 있어 tile을 무한정 키울 순 없다. 거기서 균형을 잡는다.
직접 돌린다, 행렬 가속기
MAC array 크기와 tile 크기를 바꾸면 cycle, traffic, 재사용이 갈린다.
cycle은 array(P)가, traffic은 tile(T)가 좌우한다. 두 손잡이가 따로 돈다.
여기서 고른 구성(MAC array, tile, scratchpad)이 최종 MyChip의 행렬 가속기로 들어간다.
Q. MAC array가 데이터를 재사용하는 단위는?
정답은 tile이다. 출력을 작게 쪼갠 블록이다.tile 한 블록을 도는 동안 A의 몇 행, B의 몇 열만 scratchpad에 한 번 올려두고, 그 블록의 모든 출력 칸이 같은 데이터를 돌려 쓴다.
tile이 클수록 한 번 올린 데이터를 더 많은 칸이 재사용해 DRAM을 덜 읽는다. 다만 scratchpad 용량이 한계라 균형이 필요하다.
P↑ = 한 cycle에 더 많은 MAC 동시 → cycle 줄어든다
블록 하나를 도는 동안 A의 T행·B의 T열만 scratchpad에 올려 재사용
출력 한 칸 C[i][j] = Σ A[i][k]·B[k][j], MAC을 K(8)번 누적
올린 word 64개, 이걸로 16칸 × 8번 = 128 MAC을 먹임 (DRAM 재방문 0)
재사용 ×4, tile이 클수록 DRAM을 덜 읽는다. 단, scratchpad 용량이 한계.
지금까지 cycle 0 · DRAM 0 word 사용. cycle은 array(P)가, traffic은 tile(T)가 좌우한다. 두 손잡이가 따로 돈다.
AI 연산은 거대한 행렬 곱의 연속이다. MAC을 격자로 깔아 동시에 굴리고, tile로 쪼개 scratchpad에서 데이터를 재사용하는 것이 가속기의 심장이다. 이 구성(MAC array P · tile T · scratchpad)이 최종 MyChip의 행렬 가속기로 들어간다.