스킬캠퍼스

오늘 끝나면

행렬 연산 가속기

  • 행렬 연산 가속기의 핵심 문제를 한 문장으로 설명한다
  • 오른쪽 실습에서 행렬이 어떻게 움직이는지 관찰한다
  • 다음 강의와 이어지는 한계를 말할 수 있다

실습 미션

MAC array·tile·데이터 재사용 — systolic 흐름 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.

성공 조건

  • 실습의 기본값을 먼저 관찰
  • 입력값이나 모드를 한 번 이상 바꿔 결과 비교
  • 왜 결과가 바뀌었는지 한 문장으로 설명

반도체 설계 · 31

행렬 연산
가속기

AI 연산은 결국 거대한 행렬 곱의 연속이다.
곱하고 더하기(MAC)를 격자로 깔아 동시에 굴린다.
tile로 쪼개 데이터를 재사용하는 것이 가속기의 심장이다.

P.01반도체 설계 · 31

내적 = 곱하고 더하기(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을 얼마나 빨리, 많이 돌리느냐가 전부다.

a·b를 곱해 누적기에 더한다
내적, 곱하고 다 더하기
k0123
A[i]3142
B[j]2513
a·b6546
acc6111521
매 박자: acc ← acc + a·b= 21
P.02반도체 설계 · 31

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이 줄어든다.

데이터가 격자를 흐르며 재사용된다
systolic array, 데이터가 격자를 흐른다
B0B1B2A0A1A2MACMACMACMACMACMACMACMACMAC
A는 왼쪽에서 오른쪽, B는 위에서 아래로 흐른다 · 한 줄이 여러 MAC을 지나며 재사용된다
P.03반도체 설계 · 31

tile, 작게 쪼개 scratchpad에 올린다

행렬이 크면 통째로 격자에 못 들어간다. 그래서 출력을 작은 블록으로 쪼갠다. 이 블록이 tile이다.

tile 한 블록을 도는 동안엔 A의 그 몇 행, B의 그 몇 열만 필요하다.
그만큼을 DRAM에서 한 번 읽어 칩 안의 작은 메모리 scratchpad에 올려둔다.
그 블록의 모든 출력 칸이 올려둔 데이터를 돌려 쓰니, DRAM을 다시 가지 않는다.

그래서 tile이 클수록 한 번 올린 데이터를 더 많은 칸이 재사용하고, 그만큼 DRAM traffic이 줄어든다.
단, scratchpad 용량은 한계가 있어 tile을 무한정 키울 순 없다. 거기서 균형을 잡는다.

큰 행렬을 블록으로 · 블록만 올려 재사용
tile, 출력을 블록으로 · 블록만 올려 재사용
출력 C (6×6), 2×2 tile로 분할
이 블록을 위해 scratchpad에 올리는 데이터
A · 2행+B · 2열4칸이 돌려 쓴다
한 번 올린 A행과 B열을 블록 안 모든 칸이 재사용한다 · tile 클수록 DRAM 덜 읽는다
P.04반도체 설계 · 31

직접 돌린다, 행렬 가속기

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 용량이 한계라 균형이 필요하다.
MAC array·tile·scratchpad가 cycle·traffic을 가른다
행렬 가속기 · C = A×B (8×8), MAC array·tile
MAC array 한 변 P, 한 cycle에 P×P개 곱·누적4×4 = 16 MAC
1248

P↑ = 한 cycle에 더 많은 MAC 동시 → cycle 줄어든다

tile 한 변 T, 출력을 T×T 블록으로 쪼갠다4×4 · 4블록
1248

블록 하나를 도는 동안 A의 T행·B의 T열만 scratchpad에 올려 재사용

예측 먼저, tile을 키우면 DRAM traffic은?
MAC 한 칸, a·b를 곱해 누적기에 더함
ab×+accacc ← acc + a·b

출력 한 칸 C[i][j] = Σ A[i][k]·B[k][j], MAC을 K(8)번 누적

출력 C (8×8), tile 블록 단위로 채움블록 0 / 4
scratchpad, 이 블록이 올린 A행·B열 (재사용 대상)
A · T행32w
B · T열32w

올린 word 64개, 이걸로 16칸 × 8번 = 128 MAC을 먹임 (DRAM 재방문 0)

DRAM traffic, 재사용 없음 vs tile (word)
재사용 없음1024 word
100%
칸마다 A행·B열 매번 읽음
tile 4×4256 word
25%
블록당 한 번 올려 재사용

재사용 ×4, tile이 클수록 DRAM을 덜 읽는다. 단, scratchpad 용량이 한계.

근거 패널, MAC · cycle · traffic · 재사용
총 MAC
512
8×8×8
cycle
32
array 4×4
DRAM traffic
256
naive 1024
재사용
×4
tile 4

지금까지 cycle 0 · DRAM 0 word 사용. cycle은 array(P)가, traffic은 tile(T)가 좌우한다. 두 손잡이가 따로 돈다.

AI 연산은 거대한 행렬 곱의 연속이다. MAC을 격자로 깔아 동시에 굴리고, tile로 쪼개 scratchpad에서 데이터를 재사용하는 것이 가속기의 심장이다. 이 구성(MAC array P · tile T · scratchpad)이 최종 MyChip의 행렬 가속기로 들어간다.

3줄 요약

  1. 1MAC array·tile·데이터 재사용 — systolic 흐름
  2. 2행렬 연산 가속기은 비트·게이트 → ALU → 시간·메모리 → 나만의 CPU → 메모리·GPU·SoC 흐름 안의 한 칸이다.
  3. 3개념을 외우는 것보다 입력을 바꾸면 무엇이 달라지는지 보는 것이 우선이다.

완료 전 점검

복습 카드

행렬

MAC array·tile·데이터 재사용 — systolic 흐름

ALU

산술·논리 연산을 하는 회로

ISA

CPU가 이해하는 명령어 집합과 인코딩