Skip to content
Published on

반도체 심화 — CPU, GPU, RAM, ASIC, CUDA 구조 완전 가이드

Authors

들어가며

우리가 매일 사용하는 스마트폰, 노트북, 클라우드 서버 안에는 수십억 개의 트랜지스터가 쉴 새 없이 0과 1을 처리하고 있습니다. 그런데 CPU, GPU, RAM이 정확히 어떻게 동작하는지 설명할 수 있나요? AI 시대에 왜 GPU가 필수가 되었고, ASIC이나 TPU 같은 전용 칩이 등장하는 걸까요?

이 글에서는 반도체의 물리적 원리부터 시작해서 CPU 파이프라인, RAM 셀 구조, GPU 병렬처리, CUDA 프로그래밍, 그리고 최신 AI 반도체 트렌드까지 한 번에 깊이 있게 다룹니다.


1. 반도체란 무엇인가

도체, 부도체, 반도체

물질의 전기 전도성에 따라 세 가지로 분류할 수 있습니다.

분류전기 전도성대표 물질저항률 범위
도체매우 높음구리, 금, 알루미늄10^-8 이하
반도체조절 가능실리콘, 게르마늄10^-5 ~ 10^6
부도체매우 낮음유리, 고무, 세라믹10^10 이상

반도체의 핵심은 전도성을 조절할 수 있다는 점입니다. 순수한 실리콘에 불순물을 주입(도핑)하면 전자가 많은 N형 또는 정공이 많은 P형 반도체가 만들어집니다.

트랜지스터의 원리

트랜지스터는 전자 스위치입니다. 게이트에 전압을 가하면 소스에서 드레인으로 전류가 흐르고, 전압이 없으면 전류가 차단됩니다.

  MOSFET 트랜지스터 구조

       Gate (게이트)
         |
    +---------+
    |  산화막   |
    |  (SiO2)  |
  --+---------+--
  |    P-type     |
  | S           D |   S = Source(소스)
  | o           o |   D = Drain(드레인)
  | u           r |   G = Gate(게이트)
  | r           a |
  | c           i |
  | e           n |
  +---------------+
     N-substrate

이 단순한 ON/OFF 스위치가 수십억 개 모이면 복잡한 논리 연산이 가능해집니다.

  • NOT 게이트: 트랜지스터 1개 -- 입력 반전
  • NAND 게이트: 트랜지스터 2개 -- 모든 논리 게이트의 기본 빌딩 블록
  • 가산기(Adder): 여러 게이트 조합 -- 덧셈 수행
  • ALU: 가산기와 논리 게이트 조합 -- CPU의 핵심 연산 장치

무어의 법칙

고든 무어가 1965년 예측한 법칙으로, 칩 안의 트랜지스터 수가 약 2년마다 2배로 증가한다는 관찰입니다.

무어의 법칙 트랜지스터 수 변화

연도     | 트랜지스터 수    | 대표 프로세서
---------|----------------|------------------
1971     | 2,300          | Intel 4004
1985     | 275,000        | Intel 386
1999     | 9,500,000      | Pentium III
2006     | 291,000,000    | Core 2 Duo
2015     | 1,750,000,000  | Skylake
2022     | 57,000,000,000 | Apple M2 Ultra
2024     | 114,000,000,000| NVIDIA B200

2020년대에 들어서 물리적 한계에 가까워지면서 단순 미세화보다는 3D 적층, 칩렛(Chiplet) 기술, 새로운 물질(GAA 구조) 등 다양한 방법으로 성능 향상을 추구하고 있습니다.


2. CPU 구조 심화

CPU(Central Processing Unit)는 컴퓨터의 두뇌입니다. 하나의 명령어를 빠르게 처리하는 데 최적화되어 있습니다.

CPU의 핵심 구성 요소

+-------------------------------------------------------+
|                        CPU                             |
|  +----------+  +-----------+  +--------------------+   |
|  | Control  |  |    ALU    |  |    Registers       |   |
|  |  Unit    |  | (산술논리 |  | +----+ +----+      |   |
|  | (제어    |  |  장치)    |  | | R0 | | R1 |      |   |
|  |  장치)   |  |           |  | +----+ +----+      |   |
|  |          |  | +-------+ |  | +----+ +----+      |   |
|  | 명령어   |  | | Adder | |  | | R2 | | R3 |      |   |
|  | 해석 /   |  | +-------+ |  | +----+ +----+      |   |
|  | 실행흐름 |  | | Logic | |  | +----+ +----------+|   |
|  | 제어     |  | +-------+ |  | | PC | | SP       ||   |
|  +----------+  +-----------+  | +----+ +----------+|   |
|                               +--------------------+   |
|  +---------------------------------------------------+ |
|  |              Cache (캐시 메모리)                    | |
|  |   L1: 64KB   |   L2: 512KB   |   L3: 32MB        | |
|  +---------------------------------------------------+ |
+-------------------------------------------------------+

ALU (Arithmetic Logic Unit): 덧셈, 뺄셈, AND, OR, XOR 등 실제 연산을 수행합니다.

제어 장치 (Control Unit): 명령어를 해석하고 각 구성 요소에 제어 신호를 보냅니다.

레지스터 (Registers): CPU 내부의 가장 빠른 저장소입니다. 범용 레지스터, 프로그램 카운터(PC), 스택 포인터(SP) 등이 있습니다.

캐시 메모리: CPU와 메인 메모리 사이의 속도 격차를 해소합니다. L1이 가장 빠르고 작으며, L3가 가장 크고 상대적으로 느립니다.

파이프라인 (Pipeline)

CPU 명령어 실행을 여러 단계로 나누어 동시에 처리하는 기법입니다. 마치 공장의 조립 라인처럼 동작합니다.

5단계 파이프라인 (Classic RISC Pipeline)

시간 -->   1    2    3    4    5    6    7    8    9
         +----+----+----+----+----+
명령어1: | IF | ID | EX | MEM| WB |
         +----+----+----+----+----+
              +----+----+----+----+----+
명령어2:      | IF | ID | EX | MEM| WB |
              +----+----+----+----+----+
                   +----+----+----+----+----+
명령어3:           | IF | ID | EX | MEM| WB |
                   +----+----+----+----+----+
                        +----+----+----+----+----+
명령어4:                | IF | ID | EX | MEM| WB |
                        +----+----+----+----+----+
                             +----+----+----+----+----+
명령어5:                     | IF | ID | EX | MEM| WB |
                             +----+----+----+----+----+

IF  = Instruction Fetch  (명령어 인출)
ID  = Instruction Decode (명령어 해석)
EX  = Execute            (실행)
MEM = Memory Access      (메모리 접근)
WB  = Write Back         (결과 기록)

파이프라인 없이는 한 명령어가 완전히 끝나야 다음 명령어를 시작할 수 있습니다. 5단계 파이프라인을 적용하면 이론적으로 처리량이 5배 향상됩니다.

파이프라인 해저드 (Hazard)

파이프라인이 멈추는(stall) 상황들이 있습니다.

데이터 해저드: 이전 명령어 결과가 필요한데 아직 준비되지 않은 경우

ADD R1, R2, R3    -- R1 = R2 + R3  (결과가 WB에서 기록됨)
SUB R4, R1, R5    -- R4 = R1 - R5  (R1이 필요하지만 아직 없음!)

해결: 포워딩(Forwarding) -- EX 단계 결과를 바로 다음 명령어에 전달

제어 해저드: 분기(branch) 명령어 때문에 다음 실행 위치를 모르는 경우

이를 해결하기 위해 **분기 예측(Branch Prediction)**이 사용됩니다.

분기 예측 (Branch Prediction)

분기 예측 흐름

         +------------------+
         |  분기 명령어 발견  |
         +--------+---------+
                  |
         +--------v---------+
         |  분기 이력 테이블  |
         |  (BHT) 조회       |
         +--------+---------+
                  |
          +-------+-------+
          |               |
    +-----v-----+   +----v------+
    | 분기 안함   |   | 분기 발생  |
    | 예측       |   | 예측       |
    +-----+-----+   +----+------+
          |               |
    +-----v-----+   +----v------+
    | 다음 명령어 |   | 분기 대상  |
    | 실행       |   | 실행       |
    +-----+-----+   +----+------+
          |               |
          +-------+-------+
                  |
         +--------v---------+
         |  실제 결과 확인    |
         +--------+---------+
                  |
          +-------+-------+
          |               |
    +-----v-----+   +----v------+
    | 예측 적중   |   | 예측 실패  |
    | (계속)     |   | (파이프라인 |
    |            |   |  플러시)    |
    +------------+   +-----------+

현대 CPU는 90% 이상의 분기 예측 정확도를 달성합니다. Intel, AMD의 최신 프로세서는 TAGE(Tagged Geometric History Length) 같은 고도화된 분기 예측기를 사용합니다.

비순차 실행 (Out-of-Order Execution)

명령어 순서에 관계없이 준비된 명령어부터 먼저 실행하는 기법입니다.

원래 순서:           비순차 실행:
1. LOAD R1, [addr]   1. LOAD R1, [addr]    -- 캐시 미스! 대기
2. ADD R2, R1, 5     3. MUL R4, R5, R6     -- R1 불필요, 먼저 실행
3. MUL R4, R5, R6    4. ADD R7, R8, R9     -- R1 불필요, 먼저 실행
4. ADD R7, R8, R9    2. ADD R2, R1, 5      -- R1 로드 완료 후 실행

**재정렬 버퍼(ROB, Reorder Buffer)**가 실행 결과를 원래 순서대로 커밋하여 프로그램 정확성을 보장합니다.


3. 명령어 셋 (ISA)

ISA(Instruction Set Architecture)는 하드웨어와 소프트웨어 사이의 계약입니다. CPU가 이해할 수 있는 명령어의 규격을 정의합니다.

CISC vs RISC

CISC (Complex Instruction Set Computer)     RISC (Reduced Instruction Set Computer)
+-----------------------------------+       +-----------------------------------+
| - 복잡하고 다양한 명령어           |       | - 간단하고 고정 길이 명령어       |
| - 하나의 명령어가 많은 일을 처리    |       | - 하나의 명령어가 하나의 일을 처리 |
| - 가변 길이 명령어                 |       | - 고정 길이 명령어 (보통 32비트)   |
| - 메모리 직접 연산 가능             |       | - Load/Store 아키텍처             |
| - 디코딩이 복잡                    |       | - 디코딩이 단순                   |
| - 대표: x86, x86-64              |       | - 대표: ARM, RISC-V, MIPS        |
+-----------------------------------+       +-----------------------------------+

x86 vs ARM vs RISC-V 비교

항목x86-64ARM (AArch64)RISC-V
설계 철학CISCRISCRISC
명령어 길이가변 (1~15바이트)고정 (4바이트)가변 (2/4바이트)
범용 레지스터16개31개32개
라이선스Intel/AMD 독점ARM 라이선스 필요오픈소스(무료)
전력 효율보통높음높음
주요 사용처데스크톱, 서버모바일, Apple SiliconIoT, 학술, 신생 칩
대표 제품Ryzen, XeonApple M4, SnapdragonSiFive, XUANTIE

현대 x86 프로세서의 비밀: 외부적으로는 CISC(x86) 명령어를 받지만, 내부적으로는 이를 micro-op(마이크로 연산)이라는 RISC 형태로 분해하여 실행합니다. 사실상 내부는 RISC 엔진입니다.

RISC-V의 부상

RISC-V는 UC Berkeley에서 시작된 오픈소스 ISA입니다. 누구나 무료로 자유롭게 RISC-V 기반 칩을 설계할 수 있습니다.

모듈식 설계가 특징으로, 기본 정수 명령어셋(I) 위에 필요한 확장을 선택적으로 추가합니다.

RISC-V 확장 체계

기본: RV32I / RV64I (정수 명령어)

확장:
  M -- 곱셈/나눗셈
  A -- 원자적 연산
  F -- 단정밀도 부동소수점
  D -- 배정밀도 부동소수점
  C -- 압축 명령어 (16비트)
  V -- 벡터 연산

일반적인 조합: RV64IMAFDC (= RV64GC)

4. RAM 동작 원리

RAM(Random Access Memory)은 CPU가 작업 중인 데이터를 임시로 저장하는 메모리입니다. 전원이 꺼지면 데이터가 사라지는 휘발성 메모리입니다.

SRAM vs DRAM

SRAM 셀 구조 (6-Transistor)

          VDD
           |
     +-----+-----+
     |            |
   +-+-+        +-+-+
   |   |        |   |
   | P |        | P |
   |   |        |   |
   +-+-+        +-+-+
     |            |
     +-----+-----+------ Q (저장된 값)
     |     |      |
   +-+-+ +-+-+  +-+-+
   |   | |   |  |   |
   | N | | N |  | N |
   |   | |   |  |   |
   +-+-+ +-+-+  +-+-+
     |     |      |
    GND   BL     BL_bar

6개의 트랜지스터로 1비트 저장
리프레시 불필요, 매우 빠름
크기가 크고 비쌈 -- 캐시 메모리에 사용
DRAM 셀 구조 (1-Transistor, 1-Capacitor)

    Word Line (행 선택)
        |
      +-+-+
      |   |
      | T |----+---- Bit Line (데이터 입출력)
      |   |    |
      +-+-+    |
               |
            +--+--+
            |     |
            | Cap |  커패시터 = 1비트 저장
            |     |  충전 = 1, 방전 = 0
            +--+--+
               |
              GND

1개 트랜지스터 + 1개 커패시터로 1비트 저장
구조가 간단해 고집적 가능
커패시터 전하가 누설되므로 주기적 리프레시 필요
항목SRAMDRAM
셀 구조6 트랜지스터1 트랜지스터 + 1 커패시터
속도매우 빠름 (1-2ns)상대적으로 느림 (10ns)
리프레시불필요64ms 주기로 필요
집적도낮음높음
비용비쌈저렴
용도CPU 캐시 (L1/L2/L3)메인 메모리 (DDR)

DRAM 리프레시 (Refresh)

DRAM의 커패시터는 시간이 지나면 전하가 자연적으로 누설됩니다. 데이터가 사라지지 않도록 주기적으로 읽고 다시 써야 합니다. 이를 리프레시라고 합니다.

DRAM 리프레시 과정

시간 -->
충전 상태:  ██████████████▓▓▓▓▓░░░░░░░  <-- 전하 누설
                                    |
                              리프레시 수행
                                    |
충전 상태:  ██████████████████████████  <-- 전하 복원

64ms 안에 모든 행(Row)을 한 번씩 리프레시해야 함
8Gb DRAM의 경우 약 131,072개 행 --> 행당 약 488ns

리프레시 중에는 해당 행에 접근할 수 없어 성능이 약간 저하됩니다. 이를 최소화하기 위해 다양한 리프레시 스케줄링 기법이 사용됩니다.

DDR5 메모리

DDR(Double Data Rate)은 클럭의 상승과 하강 양쪽 에지에서 데이터를 전송하는 기술입니다.

DDR 세대별 비교

세대    | 데이터 전송률   | 전압  | 프리페치 | 채널 구조
--------|----------------|-------|---------|------------
DDR4    | 3200 MT/s      | 1.2V  | 8n      | 1채널/DIMM
DDR5    | 4800~8800 MT/s | 1.1V  | 16n     | 2채널/DIMM
LPDDR5X | ~8533 MT/s     | 1.05V | 16n     | 모바일 최적화

DDR5의 주요 개선점은 다음과 같습니다.

  • 듀얼 채널: DIMM 하나가 독립적인 두 개의 32비트 채널을 가짐
  • 온다이 ECC: 메모리 칩 내부에서 에러를 자동으로 수정
  • 더 높은 뱅크 수: 16~32개 뱅크로 동시 접근 향상
  • 전력 관리: PMIC(Power Management IC)가 DIMM에 탑재되어 전압 공급 안정화

5. GPU 구조

GPU(Graphics Processing Unit)는 원래 그래픽 렌더링을 위해 설계되었지만, 대규모 병렬 처리 능력 덕분에 AI 연산의 핵심 하드웨어가 되었습니다.

CPU vs GPU 설계 철학

CPU 구조 (직렬 처리 최적화)
+--------------------------------------------------------+
|  +===========+  +===========+  +===========+           |
|  |  Core 0   |  |  Core 1   |  |  Core 2   |  ...      |
|  | (복잡한   |  | (복잡한   |  | (복잡한   |           |
|  |  제어로직, |  |  제어로직, |  |  제어로직, |           |
|  |  큰 캐시,  |  |  큰 캐시,  |  |  큰 캐시,  |           |
|  |  분기예측) |  |  분기예측) |  |  분기예측) |           |
|  +===========+  +===========+  +===========+           |
|  코어 수: 8~64개 / 각 코어가 강력                       |
+--------------------------------------------------------+

GPU 구조 (병렬 처리 최적화)
+--------------------------------------------------------+
| +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+     |
| |SM| |SM| |SM| |SM| |SM| |SM| |SM| |SM| |SM| |SM| ... |
| +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+     |
| (SM = Streaming Multiprocessor)                         |
| 각 SM 안에 수백 개의 작고 단순한 코어                    |
| 총 코어 수: 수천~만 개 이상 / 각 코어는 단순             |
+--------------------------------------------------------+

CPU는 소수의 강력한 코어로 복잡한 작업 하나를 빠르게 처리합니다. GPU는 수천 개의 작은 코어로 단순한 작업 수천 개를 동시에 처리합니다.

Streaming Multiprocessor (SM) 구조

NVIDIA GPU의 기본 실행 단위인 SM의 내부 구조입니다.

SM (Streaming Multiprocessor) -- NVIDIA Ada Lovelace 기준

+---------------------------------------------------+
|                      SM                            |
|  +---------------------------------------------+  |
|  |           Warp Scheduler x 4                 |  |
|  |  (32개 스레드 단위로 명령어 발급)              |  |
|  +---------------------------------------------+  |
|                                                    |
|  +----------+  +----------+  +----------+          |
|  | FP32     |  | FP32     |  | INT32    |          |
|  | CUDA     |  | CUDA     |  | 정수     |          |
|  | Cores    |  | Cores    |  | Cores    |          |
|  | x 64     |  | x 64     |  | x 64     |          |
|  +----------+  +----------+  +----------+          |
|                                                    |
|  +----------+  +----------+                        |
|  | Tensor   |  | RT       |                        |
|  | Cores    |  | Cores    |                        |
|  | x 4      |  | (레이트  |                        |
|  | (행렬연산)|  |  레이싱) |                        |
|  +----------+  +----------+                        |
|                                                    |
|  +---------------------------------------------+  |
|  |        Shared Memory / L1 Cache (128KB)      |  |
|  +---------------------------------------------+  |
|  +---------------------------------------------+  |
|  |        Register File (65536 x 32bit)         |  |
|  +---------------------------------------------+  |
+---------------------------------------------------+

SIMD와 SIMT

GPU는 SIMT(Single Instruction, Multiple Threads) 모델로 동작합니다. 하나의 명령어가 32개 스레드(Warp)에 동시에 적용됩니다.

SIMD / SIMT 비교

SISD (일반 CPU):
  명령어:  ADD
  데이터:  A[0] + B[0] = C[0]
  --> 한 번에 하나

SIMD (벡터 연산):
  명령어:  VADD
  데이터:  A[0..3] + B[0..3] = C[0..3]
  --> 한 번에 4개 (고정)

SIMT (GPU):
  명령어:  ADD (모든 스레드에 동시 적용)
  데이터:  A[0..31] + B[0..31] = C[0..31]
  --> 한 번에 32개 (Warp 단위)
  --> 각 스레드가 독립적인 프로그램 카운터 보유

왜 GPU가 AI에 적합한가

AI 학습의 핵심 연산은 행렬 곱셈입니다. 예를 들어 신경망의 한 계층은 다음 연산을 수행합니다.

Y = W * X + B

W: 가중치 행렬 (4096 x 4096)
X: 입력 벡터 (4096 x 1)
B: 바이어스 벡터 (4096 x 1)

이 연산에 필요한 곱셈: 4096 x 4096 = 16,777,216회
이것이 수백 개 계층에서 반복 --> 수십억 회 연산

CPU: 코어 8개로 순차 처리 --> 느림
GPU: CUDA 코어 16,384개로 병렬 처리 --> 빠름
Tensor Core: 행렬 연산 전용 하드웨어 --> 더 빠름

6. CUDA 프로그래밍 기초

CUDA(Compute Unified Device Architecture)는 NVIDIA가 만든 GPU 프로그래밍 플랫폼입니다. C/C++ 코드에서 GPU의 병렬 처리 능력을 직접 활용할 수 있습니다.

Grid, Block, Thread 계층 구조

CUDA 스레드 계층

+--------------------------------------------------+
|                    Grid                           |
|  +------------+  +------------+  +------------+  |
|  | Block(0,0) |  | Block(1,0) |  | Block(2,0) |  |
|  |  +--+--+   |  |  +--+--+   |  |  +--+--+   |  |
|  |  |T0|T1|   |  |  |T0|T1|   |  |  |T0|T1|   |  |
|  |  +--+--+   |  |  +--+--+   |  |  +--+--+   |  |
|  |  |T2|T3|   |  |  |T2|T3|   |  |  |T2|T3|   |  |
|  |  +--+--+   |  |  +--+--+   |  |  +--+--+   |  |
|  +------------+  +------------+  +------------+  |
|  +------------+  +------------+  +------------+  |
|  | Block(0,1) |  | Block(1,1) |  | Block(2,1) |  |
|  |  +--+--+   |  |  +--+--+   |  |  +--+--+   |  |
|  |  |T0|T1|   |  |  |T0|T1|   |  |  |T0|T1|   |  |
|  |  +--+--+   |  |  +--+--+   |  |  +--+--+   |  |
|  |  |T2|T3|   |  |  |T2|T3|   |  |  |T2|T3|   |  |
|  |  +--+--+   |  |  +--+--+   |  |  +--+--+   |  |
|  +------------+  +------------+  +------------+  |
+--------------------------------------------------+

Grid  = Block들의 집합 (1D, 2D, 3D)
Block = Thread들의 집합 (최대 1024개 스레드)
Thread = 실행의 최소 단위
Warp  = 32개 Thread 묶음 (GPU 스케줄링의 실제 단위)

CUDA 메모리 모델

CUDA 메모리 계층

+--------------------------------------------------+
|  Host (CPU)     Device (GPU)                      |
|  +--------+     +----------------------------+    |
|  | System |     | Global Memory (VRAM)       |    |
|  | Memory |<--->| (크고 느림, 모든 스레드 접근)|    |
|  | (RAM)  |PCIe | 16GB~80GB                   |    |
|  +--------+     +----------------------------+    |
|                  +----------------------------+    |
|                  | Shared Memory (SM당)       |    |
|                  | (작고 빠름, Block 내 공유)  |    |
|                  | 64~228KB                   |    |
|                  +----------------------------+    |
|                  +----------------------------+    |
|                  | Registers (스레드 전용)     |    |
|                  | (가장 빠름, 스레드당 255개) |    |
|                  +----------------------------+    |
|                  +----------------------------+    |
|                  | Constant / Texture Memory  |    |
|                  | (읽기 전용, 캐시됨)         |    |
|                  +----------------------------+    |
+--------------------------------------------------+

간단한 CUDA 예제 - 벡터 덧셈

#include <stdio.h>

// GPU에서 실행되는 커널 함수
__global__ void vectorAdd(float *A, float *B, float *C, int N) {
    // 전역 스레드 인덱스 계산
    int idx = blockIdx.x * blockDim.x + threadIdx.x;

    // 배열 범위 내에서만 연산
    if (idx < N) {
        C[idx] = A[idx] + B[idx];
    }
}

int main() {
    int N = 1000000;
    size_t size = N * sizeof(float);

    // 호스트(CPU) 메모리 할당
    float *h_A = (float *)malloc(size);
    float *h_B = (float *)malloc(size);
    float *h_C = (float *)malloc(size);

    // 데이터 초기화
    for (int i = 0; i < N; i++) {
        h_A[i] = 1.0f;
        h_B[i] = 2.0f;
    }

    // 디바이스(GPU) 메모리 할당
    float *d_A, *d_B, *d_C;
    cudaMalloc(&d_A, size);
    cudaMalloc(&d_B, size);
    cudaMalloc(&d_C, size);

    // 호스트 --> 디바이스 데이터 복사
    cudaMemcpy(d_A, h_A, size, cudaMemcpyHostToDevice);
    cudaMemcpy(d_B, h_B, size, cudaMemcpyHostToDevice);

    // 커널 실행 설정
    int threadsPerBlock = 256;
    int blocksPerGrid = (N + threadsPerBlock - 1) / threadsPerBlock;

    // 커널 실행
    vectorAdd<<<blocksPerGrid, threadsPerBlock>>>(d_A, d_B, d_C, N);

    // 디바이스 --> 호스트 결과 복사
    cudaMemcpy(h_C, d_C, size, cudaMemcpyDeviceToHost);

    // 결과 검증
    printf("C[0] = %f (expected 3.0)\n", h_C[0]);

    // 메모리 해제
    cudaFree(d_A); cudaFree(d_B); cudaFree(d_C);
    free(h_A); free(h_B); free(h_C);

    return 0;
}

CUDA 성능 최적화 핵심 포인트

1. 메모리 코얼레싱(Coalescing): 인접한 스레드가 인접한 메모리 주소에 접근하도록 설계합니다.

// 좋은 패턴: 코얼레싱된 접근
// 스레드 0이 data[0], 스레드 1이 data[1], ...
float val = data[threadIdx.x];

// 나쁜 패턴: 비코얼레싱 접근
// 스레드 0이 data[0], 스레드 1이 data[128], ...
float val = data[threadIdx.x * 128];

2. Shared Memory 활용: 자주 접근하는 데이터를 Global Memory에서 Shared Memory로 가져와 재사용합니다.

__shared__ float tile[256];

// Global Memory에서 한 번 읽어오기
tile[threadIdx.x] = globalData[idx];
__syncthreads();

// Shared Memory에서 여러 번 빠르게 접근
float result = tile[threadIdx.x] + tile[threadIdx.x + 1];

3. 워프 다이버전스(Warp Divergence) 최소화: 같은 Warp 내 스레드들이 서로 다른 분기를 타면 직렬 실행이 됩니다.

// 나쁜 패턴: Warp 내에서 절반은 if, 절반은 else
if (threadIdx.x % 2 == 0) {
    doSomething();
} else {
    doSomethingElse();
}

// 좋은 패턴: Warp 단위로 분기
if (threadIdx.x / 32 == 0) {
    doSomething();      // Warp 0 전체가 같은 경로
} else {
    doSomethingElse();  // Warp 1 전체가 같은 경로
}

7. ASIC vs FPGA

범용 칩(CPU/GPU)이 아닌, 특정 용도에 최적화된 하드웨어도 있습니다.

ASIC (Application-Specific Integrated Circuit)

ASIC은 주문형 반도체입니다. 특정 기능만 수행하도록 설계되어, 해당 작업에서는 CPU나 GPU보다 훨씬 빠르고 전력 효율이 높습니다. 하지만 한 번 만들면 용도를 바꿀 수 없습니다.

FPGA (Field-Programmable Gate Array)

FPGA는 현장 프로그래머블 게이트 어레이입니다. 출하 후에도 내부 회로를 재구성할 수 있습니다. ASIC의 성능과 범용 프로세서의 유연성 중간에 위치합니다.

범용성 vs 성능/효율 스펙트럼

  범용성 높음                              성능/효율 높음
  <--------------------------------------------->
  CPU      GPU      FPGA      ASIC
  |        |        |         |
  모든     병렬     재구성    특정 기능
  작업     처리     가능      전용
  가능     특화     로직      (변경 불가)

  개발비용: 낮음 <---------------------------> 높음
  유닛비용: 높음 <---------------------------> 낮음 (대량생산시)
  전력효율: 낮음 <---------------------------> 높음

Google TPU

Google의 TPU(Tensor Processing Unit)는 AI 연산 전용 ASIC입니다. 행렬 곱셈과 텐서 연산에 최적화된 Systolic Array 구조를 사용합니다.

Systolic Array (시스톨릭 어레이) 구조

입력 A (행) -->

     +----+  +----+  +----+  +----+
     | PE |->| PE |->| PE |->| PE |
     +--+-+  +--+-+  +--+-+  +--+-+
        |       |       |       |     입력 B (열)
     +--v-+  +--v-+  +--v-+  +--v-+     |
     | PE |->| PE |->| PE |->| PE |     v
     +--+-+  +--+-+  +--+-+  +--+-+
        |       |       |       |
     +--v-+  +--v-+  +--v-+  +--v-+
     | PE |->| PE |->| PE |->| PE |
     +--+-+  +--+-+  +--+-+  +--+-+
        |       |       |       |
     +--v-+  +--v-+  +--v-+  +--v-+
     | PE |->| PE |->| PE |->| PE |
     +----+  +----+  +----+  +----+

PE = Processing Element (곱셈-누적 연산)
데이터가 파도처럼 흘러가며 행렬 곱셈 수행
메모리 접근 최소화 -- 극도로 높은 효율

비트코인 마이닝 ASIC

비트코인 채굴은 SHA-256 해시 함수를 반복 실행하는 작업입니다. 초기에는 CPU, 그다음 GPU, 마지막으로 ASIC이 사용되었습니다.

비트코인 마이닝 하드웨어 효율 비교

하드웨어        | 해시레이트      | 전력 소비 | 효율
----------------|----------------|----------|------------------
CPU (i7)        | ~25 MH/s       | 150W     | 0.17 MH/W
GPU (RTX 4090)  | ~1,500 MH/s    | 350W     | 4.3 MH/W
ASIC (S21)      | ~200,000 MH/s  | 3,500W   | 57 MH/W

ASIC은 같은 전력 대비 CPU보다 약 335배 효율적

8. 반도체 공정

나노미터(nm)의 의미

반도체 공정에서 "5nm", "3nm"이라는 숫자는 마케팅 명칭에 가깝습니다. 과거에는 트랜지스터 게이트 길이를 직접 의미했지만, 현재는 실제 물리적 치수와 직접 대응하지 않습니다.

실질적으로 중요한 지표는 **트랜지스터 밀도(MTr/mm2)**입니다.

공정별 트랜지스터 밀도 비교 (2026년 기준)

공정 노드     | 밀도 (MTr/mm2) | 주요 업체
--------------|---------------|--------------------
7nm           | ~90           | TSMC, 삼성
5nm           | ~170          | TSMC, 삼성
4nm           | ~200          | TSMC
3nm (N3E)     | ~290          | TSMC
3nm (GAA)     | ~330          | 삼성
2nm           | ~490 (예상)   | TSMC, 삼성, 인텔

EUV 리소그래피

리소그래피는 실리콘 웨이퍼 위에 회로 패턴을 그리는 핵심 공정입니다.

EUV 리소그래피 원리

    EUV 광원 (13.5nm 파장)
         |
         v
    +----------+
    | 다층 반사 |
    | 거울 시스템|
    | (6~8개)   |
    +----+-----+
         |
         v
    +----------+
    |  마스크   |  <-- 회로 패턴이 새겨진 원판
    | (Reticle)|
    +----+-----+
         |
         v
    +----------+
    | 축소 렌즈 |  <-- 패턴을 4배 축소
    +----+-----+
         |
         v
    +----------+
    | 포토레지 |  <-- 빛에 반응하는 화학물질
    | 스트     |
    +----------+
    | 실리콘   |
    | 웨이퍼   |
    +----------+

기존 ArF 광원: 193nm --> 다중 패터닝(SAQP) 필요
EUV 광원: 13.5nm --> 한 번의 노광으로 미세 패턴 가능

ASML은 전 세계에서 유일하게 EUV 장비를 생산하는 회사입니다. EUV 장비 한 대의 가격은 약 2억 달러 이상이며, 무게는 180톤에 달합니다.

삼성 / TSMC / 인텔 비교 (2026년 기준)

항목TSMC삼성인텔
최첨단 공정N2 (2nm)SF2 (2nm GAA)Intel 18A
트랜지스터 구조GAA (나노시트)GAA (나노시트)RibbonFET (GAA)
후면 전력 공급N2P에서 적용SF2에서 적용PowerVia (18A)
주요 고객Apple, NVIDIA, AMDQualcomm, 자체자체 + 파운드리
파운드리 점유율약 60%약 12%확대 중

GAA (Gate-All-Around) 트랜지스터

기존 FinFET 구조의 한계를 넘기 위해 등장한 차세대 트랜지스터 구조입니다.

트랜지스터 구조 진화

Planar FET        FinFET           GAA (나노시트)
(~28nm)           (~16nm~5nm)      (~3nm~)

  Gate              Gate             Gate
   |              __|__            __|__|__
   |             |     |          |  ____  |
---+---       ---| Fin |---    ---|_|    |_|---
  Bulk           |     |          |  ----  |
                 |_____|          |_|    |_|
                                  |  ----  |
                                  |_|    |_|
                                  |________|

게이트 접촉면:    게이트 접촉면:    게이트 접촉면:
1면 (위)         3면 (양옆+위)    4면 (전체 감싸기)

채널 제어력 향상 --> 누설 전류 감소 --> 전력 효율 향상

9. AI 반도체 트렌드

HBM (High Bandwidth Memory)

AI 모델이 거대해지면서 메모리 대역폭이 최대 병목이 되었습니다. HBM은 DRAM 다이를 수직으로 쌓아 초고속 대역폭을 제공합니다.

HBM 구조

        +-----------+
        |  DRAM Die |  <-- 4층 (HBM2)
        +-----------+       8층 (HBM2e)
        |  DRAM Die |       12층 (HBM3e)
        +-----------+       16층 (HBM4, 예정)
        |  DRAM Die |
        +-----------+
        |  DRAM Die |
        +-----------+
        | Base Die  |
        +-----+-----+
              |
         TSV (Through-Silicon Via)
         수천 개의 실리콘 관통 전극
              |
        +-----+-----+
        | GPU / SoC  |
        +------------+

세대별 대역폭 비교:
  DDR5:    ~51 GB/s (단일 채널)
  HBM2e:   460 GB/s
  HBM3:    819 GB/s
  HBM3e:  1,218 GB/s
  HBM4:   ~2,048 GB/s (예상)

SK하이닉스가 HBM 시장을 선도하고 있으며, 삼성과 마이크론이 추격 중입니다. NVIDIA H100에는 HBM3, H200에는 HBM3e, B200에는 HBM3e 12단이 탑재됩니다.

CXL은 CPU, GPU, 메모리 사이의 고속 인터커넥트 표준입니다. PCIe 물리 계층 위에 구축되어, 디바이스 간 메모리를 캐시 일관성을 유지하면서 공유할 수 있습니다.

CXL 활용 시나리오

기존 구조:
  CPU <--PCIe--> GPU     (각자 독립된 메모리)
  CPU <--DDR5--> DRAM

CXL 구조:
  CPU <--CXL--> 공유 메모리 풀 <--CXL--> GPU
                     |
                     +--> CXL 메모리 확장 장치
                     +--> 다른 CPU
                     +--> 가속기

장점:
  - 메모리 풀링: 여러 서버가 메모리를 공유
  - 메모리 확장: DRAM 슬롯 한계 극복
  - 캐시 일관성: CPU와 가속기가 같은 메모리 뷰 공유

NPU (Neural Processing Unit)

NPU는 모바일/엣지 디바이스에 내장되는 AI 전용 프로세서입니다. 스마트폰의 사진 보정, 음성 인식, 온디바이스 AI 등에 활용됩니다.

제품NPU 성능주요 용도
Apple Neural Engine (M4)38 TOPS이미지/비디오 처리, Siri
Qualcomm Hexagon (SD 8 Gen 4)75 TOPS온디바이스 LLM, 카메라
Samsung Exynos NPU34.7 TOPS사진 보정, 통역
Intel NPU (Lunar Lake)48 TOPSWindows Copilot+

TOPS (Tera Operations Per Second): 1초에 1조 번의 연산을 수행할 수 있는 단위입니다.

Apple Silicon의 통합 메모리 아키텍처

Apple M 시리즈 칩은 CPU, GPU, NPU가 하나의 칩에 통합되고, **통합 메모리(Unified Memory)**를 공유합니다.

Apple M4 Pro 구조 (간략화)

+----------------------------------------------------------+
|                     M4 Pro SoC                            |
|                                                          |
|  +--------+  +--------+  +---------+  +---------------+  |
|  | P-Core |  | E-Core |  |   GPU   |  | Neural Engine |  |
|  |  x 6   |  |  x 4   |  | 20-Core |  |  16-Core NPU  |  |
|  +---+----+  +---+----+  +---+-----+  +------+--------+  |
|      |           |            |               |           |
|  +---v-----------v------------v---------------v--------+  |
|  |           System Level Cache (SLC)                  |  |
|  +------------------------+----------------------------+  |
|                           |                               |
|  +------------------------v----------------------------+  |
|  |         Unified Memory (LPDDR5X, 최대 48GB)         |  |
|  |  CPU, GPU, NPU가 동일한 메모리에 직접 접근           |  |
|  |  데이터 복사 불필요 --> 전력 절감 + 지연 감소         |  |
|  +---------------------------------------------------------+
+----------------------------------------------------------+

기존 PC에서는 CPU 메모리(RAM)와 GPU 메모리(VRAM)가 분리되어 있어 데이터를 PCIe 버스를 통해 복사해야 했습니다. Apple Silicon은 이 복사 과정을 없애 전력 효율과 성능 모두를 향상시켰습니다.


10. 종합 비교와 실무 가이드

AI 워크로드별 최적 하드웨어

워크로드                     | 추천 하드웨어      | 이유
-----------------------------|-------------------|---------------------------
LLM 학습 (수백억 파라미터)     | NVIDIA H100/B200 | HBM + Tensor Core + NVLink
LLM 추론 (서빙)              | NVIDIA L40S, TPU  | 비용 효율, 높은 처리량
이미지 생성 (Diffusion)       | RTX 4090/5090    | VRAM 24GB, 가성비
온디바이스 AI                 | NPU (Apple, QC)   | 저전력, 항시 동작
비트코인 마이닝               | 전용 ASIC         | SHA-256 특화, 최고 효율
네트워크 패킷 처리            | FPGA (Xilinx)    | 저지연, 재구성 가능

메모리 계층 접근 시간 비교

메모리 계층 피라미드

              +-------+
              |  Reg  |  ~0.3ns    (~1 사이클)
              +---+---+
                  |
             +----+----+
             | L1 Cache|  ~1ns     (~4 사이클)
             +----+----+
                  |
           +-----+-----+
           | L2 Cache   |  ~3ns     (~12 사이클)
           +-----+-----+
                 |
          +------+------+
          |  L3 Cache   |  ~10ns    (~40 사이클)
          +------+------+
                 |
        +--------+--------+
        |   Main Memory   |  ~100ns   (~400 사이클)
        |     (DRAM)      |
        +--------+--------+
                 |
     +-----------+-----------+
     |         SSD           |  ~100,000ns  (100us)
     +-----------+-----------+
                 |
     +-----------+-----------+
     |         HDD           |  ~10,000,000ns  (10ms)
     +------------------------+

속도: 위로 갈수록 빠름
용량: 아래로 갈수록 큼
비용: 위로 갈수록 비쌈

레지스터 접근이 HDD 접근보다 약 3,300만 배 빠릅니다. 이 격차 때문에 캐시 메모리와 메모리 계층 구조가 컴퓨터 성능에 결정적인 역할을 합니다.


마치며

반도체는 현대 기술 문명의 기반입니다. 트랜지스터 하나의 ON/OFF에서 시작해, CPU 파이프라인의 정교한 명령어 처리, RAM 커패시터의 충방전, GPU 수천 코어의 병렬 연산, 그리고 ASIC의 극한 효율까지 -- 모두가 하나의 거대한 시스템으로 연결되어 있습니다.

AI 시대를 맞아 반도체의 중요성은 더욱 커지고 있습니다. HBM이 메모리 대역폭 병목을 해소하고, CXL이 디바이스 간 메모리 공유를 가능하게 하며, 2nm 이하 공정이 트랜지스터 밀도의 한계를 밀어붙이고 있습니다.

소프트웨어 개발자라면 하드웨어의 동작 원리를 이해하는 것이 더 나은 코드를 작성하는 데 큰 도움이 됩니다. 캐시 지역성을 고려한 데이터 구조 설계, GPU 메모리 코얼레싱을 고려한 CUDA 코드 작성, 워크로드에 맞는 하드웨어 선택 -- 이 모든 판단의 기초가 바로 반도체에 대한 이해입니다.


참고 자료

  • Patterson, D. A., Hennessy, J. L. -- Computer Organization and Design (RISC-V Edition)
  • NVIDIA CUDA Programming Guide
  • IEEE International Solid-State Circuits Conference (ISSCC) 발표 자료
  • TSMC Technology Symposium 2025
  • SK hynix HBM Technical Brief

퀴즈: 반도체 지식 점검

Q1. DRAM 셀은 어떤 부품으로 1비트를 저장하나요?

A: 1개의 트랜지스터와 1개의 커패시터로 1비트를 저장합니다. 커패시터의 충전 상태가 1, 방전 상태가 0을 나타냅니다.

Q2. SRAM이 DRAM보다 빠른 이유는?

A: SRAM은 6개의 트랜지스터로 구성된 플립플롭 회로를 사용하여 리프레시 없이 안정적으로 데이터를 유지합니다. 커패시터 충방전이 필요 없어 접근 속도가 1-2ns로 매우 빠릅니다.

Q3. CUDA에서 Warp란 무엇인가요?

A: GPU 스케줄링의 최소 단위로, 32개의 스레드가 하나로 묶인 것입니다. 같은 Warp 내의 모든 스레드는 동일한 명령어를 동시에 실행합니다(SIMT 방식).

Q4. ASIC이 GPU보다 특정 작업에서 효율적인 이유는?

A: ASIC은 특정 연산만 수행하도록 회로가 설계되어, 불필요한 범용 로직(분기 예측, 캐시 관리 등)이 없습니다. 모든 트랜지스터가 목적 연산에 투입되므로, 동일 전력 대비 처리 효율이 훨씬 높습니다.

Q5. Apple Silicon의 통합 메모리 구조가 제공하는 가장 큰 장점은?

A: CPU, GPU, NPU가 동일한 물리적 메모리에 직접 접근하므로, 데이터 복사(CPU RAM에서 GPU VRAM으로) 과정이 불필요합니다. 이로 인해 전력 소비가 줄고, 지연 시간이 감소하며, 제한된 메모리를 모든 프로세서가 유연하게 공유할 수 있습니다.