04. CPU, GPU, NPU
이 장의 핵심 연결: 02·03장의 숫자(비트·정밀도)가 실제로 흐르고 계산되는 가속기를 엽니다. 01장 data path의 "가속기에서 연산" 상자를 확대하는 셈입니다.
다음 질문: CPU·GPU·NPU를 "무엇이 더 우월한가"로 줄 세우는 것이 왜 잘못인가? 대신 무엇을 물어야 하는가?
목표:
- 세 가속기를 실행 모델·메모리·소프트웨어 지원·워크로드 적합성이라는 조건으로 비교한다.
- "이름의 우열"이라는 이 안내서의 대표적 경계 오류를 직접 짚는다.
- 05장(병목)으로 넘어갈 다리 — "무엇이 성능을 정하는가"의 질문을 준비한다.
먼저: 왜 "우열"로 줄 세우면 안 되나요?
"GPU가 CPU보다 빠르다", "NPU가 가장 효율적이다" 같은 문장을 흔히 봅니다. 이 안내서는 이런 문장을 경계해야 할 대표적 오류로 봅니다. 이유는 단순합니다. 속도·효율은 워크로드·정밀도·소프트웨어 지원이라는 조건에 따라 뒤바뀌기 때문입니다.
그래서 이 장은 "누가 이기나"를 묻지 않습니다. 대신 이렇게 묻습니다: "이 작업은 어떤 실행 조건을 요구하고, 각 가속기의 실행 모델·메모리·소프트웨어는 그 조건에 얼마나 맞는가?"
약어 풀이
- CPU(Central Processing Unit, 중앙처리장치): 범용 프로세서. 적은 수의 강력한 코어로 다양한 순차·분기 작업을 잘합니다.
- GPU(Graphics Processing Unit, 그래픽처리장치): 원래 그래픽용이었으나, 수많은 코어로 같은 연산을 대량 병렬로 하는 데 강합니다. 대규모 행렬 연산에 널리 씁니다.
- NPU(Neural Processing Unit, 신경망처리장치): 신경망 연산(특히 행렬·텐서 연산)에 특화하도록 설계된 가속기의 통칭. 설계·범위는 제품마다 크게 다릅니다.
- 가속기(accelerator): 특정 종류의 연산을 빠르게 하도록 만든 하드웨어의 통칭. 여기선 GPU·NPU를 묶어 부릅니다.
일상 비유: 만능 요리사 vs 대량 조리 라인 vs 전용 기계
- CPU = 만능 요리사 몇 명: 무슨 요리든, 복잡한 순서·판단이 필요한 일이든 잘합니다. 다만 사람 수가 적어 "똑같은 일을 1만 번" 같은 대량 반복엔 느립니다.
- GPU = 대량 조리 라인: 수백~수천의 손이 같은 동작을 동시에 합니다. "감자 1만 개 똑같이 썰기"는 압도적으로 빠릅니다. 대신 저마다 다른 복잡한 판단을 시키기엔 안 맞습니다.
- NPU = 특정 요리 전용 기계: 정해진 종류의 연산(예: 특정 행렬 연산 패턴)에 맞춰 설계되어, 그 범위 안에선 효율적일 수 있습니다. 다만 "그 범위 밖"과 "소프트웨어 지원"이 관건입니다.
이 비유의 교훈: 작업의 성격이 정해지지 않으면 누가 빠른지 말할 수 없습니다. "감자 썰기"면 조리 라인이, "그날그날 다른 코스 요리"면 만능 요리사가 낫습니다.
정확한 정의: 세 가지를 가르는 축
가속기를 비교할 때 이름 대신 아래 네 축을 봅니다.
- 실행 모델(execution model): 코어가 적고 강한가(순차·분기에 강함), 많고 단순한가(대량 병렬에 강함). 병렬성을 어떻게 조직하는가.
- 메모리: 얼마나 큰 메모리를, 얼마나 넓은 대역폭으로 붙였는가(06장). 데이터를 코어에 얼마나 빨리 공급하는가.
- 소프트웨어 지원: 원하는 연산·dtype(03장)을 도는 커널·라이브러리·컴파일러가 있는가. 이게 없으면 하드웨어 성능은 그림의 떡입니다.
- 워크로드 적합성: 실제 하려는 작업(대량 병렬 행렬 연산인가, 분기 많은 순차 로직인가)이 위 셋과 맞는가.
📌 핵심: 이 네 축 중 소프트웨어 지원이 자주 잊힙니다. "이론상 빠른" 하드웨어도 그 연산·dtype을 도는 커널이 없으면 실제로 느립니다. 하드웨어 스펙만 보고 우열을 말할 수 없는 핵심 이유입니다.
시각적 직관: 실행 모델의 차이
flowchart TB
subgraph CPU_M["CPU · 적고 강한 코어"]
direction LR
C1[강한 코어]:::hw
C2[강한 코어]:::hw
C3[강한 코어]:::hw
end
subgraph GPU_M["GPU · 많고 단순한 코어"]
direction LR
G1[코어]:::hw --- G2[코어]:::hw --- G3[코어]:::hw --- G4[코어]:::hw
G5[코어]:::hw --- G6[코어]:::hw --- G7[코어]:::hw --- G8[코어]:::hw
end
subgraph NPU_M["NPU · 특정 연산에 맞춘 구조"]
direction LR
N1[전용 연산 유닛]:::hw --- N2[전용 연산 유닛]:::hw
end
T1[순차·분기 많은 작업]:::req -.잘 맞음.-> CPU_M
T2[대량 병렬 행렬 연산]:::req -.잘 맞음.-> GPU_M
T3[특정 텐서 연산 패턴]:::req -.맞으면 효율적,<br/>소프트웨어 지원이 관건.-> NPU_M
classDef hw fill:#cffafe,stroke:#0891b2,color:#164e63
classDef req fill:#fef9c3,stroke:#ca8a04,color:#713f12
비교표: 우열표가 아닌 조건표
아래는 어느 것이 이기는 표가 아니라, 각 축에서 대체로 어떤 성향을 갖는지를 정리한 것입니다. 실제 제품은 이 성향을 벗어날 수 있습니다.
| 축 | CPU 성향 | GPU 성향 | NPU 성향 |
|---|---|---|---|
| 실행 모델 | 적고 강한 코어, 순차·분기에 강함 | 많고 단순한 코어, 대량 병렬에 강함 | 특정 연산 패턴에 맞춘 구조 |
| 메모리(전형) | 대용량 시스템 메모리와 밀접 | 전용 고대역폭 메모리를 붙이는 경우 많음(06장) | 제품마다 크게 다름 |
| 소프트웨어 지원 | 성숙·범용 | 딥러닝 생태계 넓게 지원되는 경우 많음 | 성숙도가 제품·프레임워크마다 편차 큼 |
| 잘 맞는 작업 | 분기·제어 많은 범용 작업 | 대규모 행렬·텐서 병렬 연산 | 설계가 겨냥한 특정 연산 |
이 표의 값은 일반적 성향(inferred)이며, 특정 제품의 사양(vendor-reported)이 아닙니다. 실제 비교는 대상 제품의 사양을 확인일과 함께 확인해야 합니다.
⚖️ 절충(tradeoff): "더 특화" vs "더 범용"
CODE
더 특화된 가속기(NPU 방향)로 갈 때:
얻을 수 있는 것: 겨냥한 연산에서의 효율(면적·전력 대비 성능 등)
잃을 수 있는 것: 범용성, 그리고 무엇보다 "소프트웨어 지원"의 확실성
— 지원이 없으면 이론적 이점이 실현되지 않음
더 범용적인 가속기(CPU 방향)로 갈 때:
얻을 수 있는 것: 유연성, 성숙한 소프트웨어
잃을 수 있는 것: 대량 병렬 연산에서의 처리량
숨은 전제:
어느 방향이 유리한지는 "워크로드가 무엇인가"가 정해져야 답할 수 있음.
워크로드 없이는 절충의 방향조차 정할 수 없음.
⚠️ 흔한 오해 (이름 우열 함정 — 이 장의 핵심)
- "GPU가 CPU보다 빠르다." — 작업에 따라 다릅니다. 대량 병렬 행렬 연산이면 GPU가 유리한 경우가 많지만, 분기·제어가 많은 순차 작업은 CPU가 나을 수 있습니다. 작업을 빼고 비교하면 무의미합니다.
- "NPU가 가장 효율적이다." — 겨냥한 연산 범위 안에서, 그리고 소프트웨어 지원이 갖춰졌을 때만 성립할 수 있는 조건부 주장입니다. 범위 밖·지원 없음이면 성립하지 않습니다.
- "스펙(FLOPS 등)이 높은 쪽이 실제로 빠르다." — 이론적 peak 스펙과 실제 성능은 다릅니다(05·09장). 메모리 대역폭·소프트웨어·워크로드가 실제를 결정합니다.
- "하드웨어만 좋으면 된다." — 소프트웨어 지원 없이는 하드웨어 성능이 실현되지 않습니다.
조건 명시
| 내용 | |
|---|---|
| 성립하는 조건 | "실행 모델·메모리·소프트웨어·워크로드 적합성으로 비교한다"는 관점은 세 가속기 모두에 일반적으로 적용됩니다. |
| 성립하지 않는 결론 | 이 장으로 "X가 Y보다 빠르다/효율적이다"를 일반적으로 말할 수 없습니다. 그건 워크로드·정밀도·소프트웨어 지원이 정해진 뒤에야, 그것도 measured로 답할 문제입니다. 표의 "성향"을 특정 제품의 확정 사양으로 읽어서도 안 됩니다. |
🔬 증거 읽기: 가속기 비교 주장의 유형
- "이 가속기는 코어가 N개다 / 메모리 대역폭이 X GB/s다" → vendor-reported (제품 사양 PRIMARY일 수 있음). 단 이건 peak/이론 스펙일 때가 많아, 실제 성능과 구분해야 함(09장).
- "이 작업에서 A가 B보다 빠르다" → measured 여야 하고, 작업·정밀도·소프트웨어 버전·조건을 반드시 밝혀야 함.
- "그러므로 A가 더 우월한 가속기다" → 대개 inferred이며, 조건을 지운 일반화라면 지지되지 않는 결론임.
이 장에서 배운 것
- 가속기는 이름의 우열이 아니라 실행 모델·메모리·소프트웨어 지원·워크로드 적합성으로 비교한다.
- CPU는 적고 강한 코어(순차·분기), GPU는 많고 단순한 코어(대량 병렬), NPU는 특정 연산 특화 — 모두 성향이지 순위가 아니다.
- 소프트웨어 지원이 빠지면 하드웨어 성능은 실현되지 않는다. 자주 잊히는 축이다.
- "누가 빠른가"는 워크로드가 정해진 뒤 measured로 답할 문제다.
🔎 이 장의 '지지하지 않는 결론'
- 이 장으로 "GPU/NPU/CPU 중 무엇이 우월하다"를 말할 수 없다. 조건(워크로드·정밀도·소프트웨어) 없이는 비교 자체가 성립하지 않는다.
- 하드웨어 스펙 수치만으로 실제 성능을 단정할 수 없다. 이론 peak과 실측은 다르다(05·09장).
✍️ 확인 문제
- "GPU가 CPU보다 빠르다"를 성립 가능한 조건부 문장으로 다시 쓰세요. 어떤 워크로드·조건을 명시해야 하나요?
- 하드웨어 사양이 동일하게 뛰어난 두 가속기가 있어도 실제 성능이 크게 다를 수 있는 이유(이 장에서 강조한 축)를 하나 드세요.
- [조건 묻기 / 주장 유형] "NPU가 가장 효율적이다"라는 주장을 신뢰하려면 어떤 조건들이 함께 명시되어야 하나요? 이 주장은 어떤 주장 유형이어야 검증 가능한가요?
다음 장: 05 · compute-bound, memory-bound, 데이터 이동 — "가속기가 어디서 막히는가"를 엽니다. 연산 강도(operational intensity)로 무엇이 성능 상한을 정하는지 읽습니다.