본문 바로가기

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 = 특정 요리 전용 기계: 정해진 종류의 연산(예: 특정 행렬 연산 패턴)에 맞춰 설계되어, 그 범위 안에선 효율적일 수 있습니다. 다만 "그 범위 밖"과 "소프트웨어 지원"이 관건입니다.

이 비유의 교훈: 작업의 성격이 정해지지 않으면 누가 빠른지 말할 수 없습니다. "감자 썰기"면 조리 라인이, "그날그날 다른 코스 요리"면 만능 요리사가 낫습니다.

정확한 정의: 세 가지를 가르는 축

가속기를 비교할 때 이름 대신 아래 네 축을 봅니다.

  1. 실행 모델(execution model): 코어가 적고 강한가(순차·분기에 강함), 많고 단순한가(대량 병렬에 강함). 병렬성을 어떻게 조직하는가.
  2. 메모리: 얼마나 큰 메모리를, 얼마나 넓은 대역폭으로 붙였는가(06장). 데이터를 코어에 얼마나 빨리 공급하는가.
  3. 소프트웨어 지원: 원하는 연산·dtype(03장)을 도는 커널·라이브러리·컴파일러가 있는가. 이게 없으면 하드웨어 성능은 그림의 떡입니다.
  4. 워크로드 적합성: 실제 하려는 작업(대량 병렬 행렬 연산인가, 분기 많은 순차 로직인가)이 위 셋과 맞는가.
📌 핵심: 이 네 축 중 소프트웨어 지원이 자주 잊힙니다. "이론상 빠른" 하드웨어도 그 연산·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장).

✍️ 확인 문제

  1. "GPU가 CPU보다 빠르다"를 성립 가능한 조건부 문장으로 다시 쓰세요. 어떤 워크로드·조건을 명시해야 하나요?
  2. 하드웨어 사양이 동일하게 뛰어난 두 가속기가 있어도 실제 성능이 크게 다를 수 있는 이유(이 장에서 강조한 축)를 하나 드세요.
  3. [조건 묻기 / 주장 유형] "NPU가 가장 효율적이다"라는 주장을 신뢰하려면 어떤 조건들이 함께 명시되어야 하나요? 이 주장은 어떤 주장 유형이어야 검증 가능한가요?
다음 장: 05 · compute-bound, memory-bound, 데이터 이동 — "가속기가 어디서 막히는가"를 엽니다. 연산 강도(operational intensity)로 무엇이 성능 상한을 정하는지 읽습니다.