기초부터 쌓아 올리는 칩 설계 – Reiner Pope

요약

  1. 논리 게이트에서 곱셈-누산기, mux, 시스톨릭 배열까지 올라가며 AI 칩의 계산과 데이터 이동 비용이 어떻게 생기는지 설명한다.
  2. GPU, TPU, FPGA, ASIC, CPU는 모두 계산과 통신, 유연성과 효율, 클록 속도와 면적 사이의 서로 다른 트레이드오프를 선택한 결과로 비교된다.
  3. 후반부에서는 캐시와 스크래치패드, CPU와 GPU 코어의 차이, 뇌와 칩의 차이, GPU와 TPU의 상위 구조 차이를 다룬다.

Chapter 1: 논리 게이트로 곱셈-누산기 만들기 (00:00-16:20)

  • [00:07] 이번 대화의 목표는 AI 칩 내부에서 실제로 어떤 일이 일어나는지, 즉 칩이 어떻게 작동하는지 이해하는 것
  • [00:42] AI 칩이 계산하려는 핵심 기능은 행렬 곱셈이며, 그 기본 원시 연산은 숫자 쌍의 곱셈-누산이다
  • [02:40] 곱셈 단계보다 누산 단계에서 거의 항상 더 높은 정밀도가 필요하다 — j 차원을 따라 반복되며 반올림 오류가 누적되기 때문
  • [05:45] 4비트 × 4비트 곱셈에는 AND 게이트 16개가 필요하고, 일반적으로 p × q개가 든다
  • [07:06] 전가산기는 세 입력 비트를 두 출력 비트로 압축하므로 3→2 컴프레서라고도 불린다
  • [10:16] 전가산기를 반복 적용해 면적 효율적인 승산기를 만드는 표준 방식을 다다(Dadda) 승산기라고 부른다
  • [12:00] 곱셈-누산을 선택하는 또 다른 이유는 회로 크기가 p × q라는 깔끔한 대수로 표현되기 때문
  • [15:00] 비트 폭에 대한 제곱 스케일링이 핵심 — Nvidia도 B300 이후 FP4를 FP8보다 3배 빠르다고 제시한다(이론적으로는 4배)
  • [16:00] 저정밀도 산술이 신경망에서 잘 작동하는 큰 이유는 비트 폭 감소가 회로 면적과 성능에 매우 강하게 영향을 주기 때문

“[00:19] 칩 설계의 가장 작은 기본 단위부터 시작해서, 실제 양산 칩이 무엇이고 그 구성 요소가 무엇인지까지 쌓아 올라가 보겠습니다.” — Reiner Pope

Chapter 2: Mux와 데이터 이동 비용 (16:20-25:59)

  • [16:28] Tensor Core 이전 GPU는 CPU와 비슷하게 작동했고, 핵심 질문은 곱셈-누산 유닛을 회로 어디에 배치하느냐였다
  • [17:39] 대부분의 프로세서는 레지스터 집합과 ALU 집합으로 구성되며, 분석 대상은 둘 사이의 데이터 이동 비용이다
  • [18:04] 여러 레지스터 중 원하는 것을 선택하는 회로가 바로 mux(멀티플렉서)이며, AND로 마스킹 후 OR로 합쳐 구현한다
  • [20:30] 곱셈-누산의 세 입력 각각에 mux가 필요해 데이터 이동에는 3 × n × p개의 AND 게이트가 든다
  • [21:18] 레지스터 파일에서 로직 유닛으로 데이터를 옮기는 작업이 로직 유닛 자체보다 훨씬 더 비싸다
  • [25:11] 비용의 약 8분의 7이 데이터 이동과 레지스터 파일 접근에 쓰이고, 아주 작은 부분만 논리 유닛에 들어간다
  • [25:37] 이 문제의식이 Tensor Core 도입으로 이어졌으며, 더 일반적인 개념을 시스톨릭 배열이라 부른다

“[20:11] 그 자체로 꽤 복잡한 회로입니다. 이것이 드러나기 시작하는 모든 숨겨진 데이터 이동 비용의 첫 단계입니다.” — Reiner Pope

Chapter 3: 시스톨릭 배열의 작동 원리 (25:59-39:00)

  • [26:11] 시스톨릭 배열의 아이디어는 행렬 곱셈 루프에서 두 단계 위로 올라가 더 바깥쪽 루프 전체를 하드웨어에 구워 넣는 것
  • [28:23] 목표는 계산량이 제곱적으로(x × y) 많아지는 동안 통신량은 x배 정도에 그치게 하는 것
  • [29:18] 핵심은 AI 맥락에서 가중치 행렬이 오랜 시간 고정되어 있어 시스톨릭 배열 가까이에 로컬로 저장할 수 있다는 점
  • [31:55] 행렬에서 열을 따라 내적이 수행되는 방식이 시스톨릭 배열에서 공간적으로 이루어지는 계산과 정확히 대응된다
  • [32:56] 가중치 행렬은 데이지 체인으로 아주 천천히 흘려 넣어, 경계를 가로지르는 배선을 xy가 아니라 x로 제한한다
  • [36:12] 시스톨릭 배열은 결국 행렬 곱셈을 구현하는 데 알려진 가장 효율적인 회로가 된다
  • [36:41] 칩 설계 결정의 대부분은 “시스톨릭 배열을 얼마나 크게, 레지스터 파일을 얼마나 크게”라는 크기 결정이다
  • [37:42] 더 큰 레지스터 파일은 더 유연하지만 시스톨릭 배열에 쓰일 면적을 빼앗는다

“[36:12] 이것은 결국 행렬 곱셈을 구현하는 데 알려진 가장 효율적인 회로가 됩니다.” — Reiner Pope

Chapter 4: 클록 사이클과 파이프라인 레지스터 (39:00-51:40)

  • [39:12] 칩 하나에는 약 1,000억 개의 트랜지스터가 있어 대규모 병렬성이 있고, 핵심 작업은 이들을 동기화하는 것
  • [39:39] 칩에서는 약 1나노초마다 모든 회로가 잠시 멈추고 동기화하는데, 이것이 클록 사이클이다
  • [41:24] 클록을 빠르게 돌릴수록 논리 구름을 통과하는 지연에 민감해지므로, 지연을 최대한 짧게 만드는 것이 주요 최적화
  • [44:13] 큰 논리 구름을 가운데에서 둘로 나누고 레지스터를 끼우면 클록 주파수를 두 배로 맞출 수 있다(면적 비용 발생)
  • [45:24] 같은 3나노미터 공정의 두 칩도 제조 편차 때문에 서로 다른 클록 사이클을 가질 수 있다
  • [46:08] 더 어려운 경우는 계산이 자기 자신으로 피드백되는 루프 — 클록 사이클을 결정하는 가장 풀기 어려운 제약
  • [50:05] 칩의 처리량은 면적 효율에 초당 클록 수를 곱한 값이며, 클록을 너무 높이면 병렬성을 덜 얻는다

“[50:34] 클록 속도를 아주 높이면 병렬성을 덜 얻습니다.” — Reiner Pope

Chapter 5: FPGA vs ASIC (51:40-01:03:14)

  • [51:55] 고빈도 트레이딩에서는 처리량보다 지연 시간이 더 중요해, 결정론적으로 클록 사이클을 제어하는 것이 가장 중요하다
  • [52:53] ASIC은 FPGA보다 대략 한 자릿수 더 저렴하고 에너지 효율도 좋지만, 표현할 수 있는 것은 서로 같다
  • [53:01] 첫 FPGA는 1만 달러지만 첫 ASIC은 전체 테이프아웃이 필요해 3천만 달러가 들 수 있다 — 워크로드가 자주 바뀌면 FPGA가 유리
  • [53:54] FPGA의 핵심 구성 요소는 레지스터, 모든 게이트를 제공하는 룩업 테이블(LUT), 그리고 이들을 연결하는 큰 mux 집합
  • [57:10] 전통적 FPGA에서 LUT는 4비트 입력·1비트 출력으로, 16개 구성 비트에 진리표를 저장하는 프로그래밍 가능한 게이트
  • [01:02:41] ASIC에서 AND 세 개로 구현할 회로를 LUT로는 약 32개의 게이트가 필요 — 가능한 모든 입력 조합을 진리표로 나열하는 오버헤드 때문

“[56:43] 그것을 프로그래밍한다는 것은 이 mux들 각각을 구성하는 것으로 이루어집니다.” — Reiner Pope

Chapter 6: 캐시 vs 스크래치패드 (01:03:14-01:07:16)

  • [01:03:46] 어려운 점은 결정적 지연 시간과 높은 속도를 동시에 얻는 것 — Groq나 TPU는 결정적 지연 시간을 장점으로 내세운다
  • [01:04:33] CPU 비결정성의 가장 중요한 원천 중 하나는 CPU 캐시 자체다
  • [01:05:27] 캐시는 DDR보다 두 자릿수 배 빨라, 캐시가 없으면 거의 모든 프로그램이 약 100배 느려진다
  • [01:05:45] 캐시 히트 여부가 다른 실행 중인 프로그램과 캐시 내부 난수 생성기 등 주변 환경에 의존해 비결정성을 만든다
  • [01:06:28] TPU는 캐시 대신 “스크래치패드”를 두어, 스크래치패드와 HBM에 대한 명령어를 완전히 분리한다 — 메모리 접근 결정을 소프트웨어에 맡기는 철학

“[01:05:48] 이것이 CPU 실행 시간에서 비결정성의 큰 원천입니다.” — Reiner Pope

Chapter 7: CPU 코어가 GPU 코어보다 훨씬 큰 이유 (01:07:16-01:11:49)

  • [01:07:52] CPU의 병렬성은 약 100코어 × 16방향 벡터 유닛 ≈ 1,000방향 수준이며, 폰 노이만 아키텍처로 설명해도 공정하다
  • [01:08:37] 코어가 적은데도 CPU 다이가 큰 이유는 단순하다 — CPU 코어들이 훨씬 더 크고 복잡하기 때문
  • [01:09:13] CPU 면적을 크게 차지하는 것은 캐시이고, 실제 ALU가 차지하는 면적은 아주 작다
  • [01:09:36] GPU에 대응물이 없는 CPU의 큰 구성 요소가 바로 분기 예측기다
  • [01:10:06] CPU 대비 GPU의 면적 효율 이점 상당 부분은 분기 예측기 제거와 더 조밀한 레지스터 파일 구성에서 나온다
  • [01:11:34] 분기 예측기의 목적은 명령어에 도달하기 전, 약 다섯 사이클 앞서 분기 여부를 예측하는 것

“[01:10:06] 그 많은 부분을 제거하고, 이 레지스터 파일들을 더 조밀하게 만드는 것이 CPU 대비 GPU의 이점 상당 부분을 만들어 냅니다.” — Reiner Pope

Chapter 8: 뇌 vs 칩 (01:11:49-01:15:22)

  • [01:11:52] 큰 차이 하나는 가속기가 구조적 희소성을 활용하는 반면, 뇌는 어떤 뉴런이든 다른 뉴런과 연결되는 비정형 희소성을 가진다는 점
  • [01:12:30] 또 다른 큰 차이는 뇌의 클록 사이클이 컴퓨터보다 훨씬 느리며, 이는 에너지 보존과 관련된다
  • [01:13:26] GPU는 배치 크기 1,000으로 실행되지만 뇌는 단일 인스턴스에 해당한다 — GPU를 메가헤르츠로 낮추면 뇌와 더 비슷해진다
  • [01:14:12] 대부분의 에너지는 비트를 0↔1로 토글할 때 소비되며, 이를 동적 전력(스위칭 전력)이라 부른다
  • [01:15:08] 칩을 천 클록 사이클마다 한 번만 동작시키면 에너지 소비가 약 1,000배 줄지만, 이는 본질적인 효율 이점은 아니다

“[01:14:12] 대부분의 에너지는 비트를 0에서 1로, 다시 되돌리는 토글 과정에서 소비되기 때문입니다.” — Reiner Pope

Chapter 9: GPU는 작은 TPU들의 집합이다 (01:15:22-01:20:19)

  • [01:15:55] GPU 조직은 거의 동일한 유닛(SM)들의 반복으로, 가운데 L2 메모리를 두고 규칙적인 코어 격자를 이룬다
  • [01:16:34] TPU는 훨씬 거친 입도로, 큰 시스톨릭 배열로 이루어진 행렬 유닛 몇 개와 가운데 벡터 유닛으로 구성된다
  • [01:17:24] GPU의 텐서 코어는 TPU의 MXU와 매우 유사하다
  • [01:18:04] 더 큰 시스톨릭 배열은 레지스터 파일 비용을 더 잘 분산하지만, GPU식 설계는 모든 것을 작은 유닛으로 나누는 제약을 가진다
  • [01:19:00] TPU는 모든 데이터를 단 두 줄로 옮겨야 하는 반면 GPU는 16줄의 배선으로 옮기는 식으로 데이터 이동 대역폭이 더 크다
  • [01:20:05] MatX는 작은 시스톨릭 배열로도 동작할 수 있는 큰 시스톨릭 배열, 즉 “분할 가능한 시스톨릭 배열”을 공개적으로 논의해 왔다

“[01:17:16] 아주 상위 수준의 관점에서 보면, GPU는 칩 전체에 타일처럼 깔린 수많은 작은 TPU를 가지고 있습니다.” — Reiner Pope