Skip to content

Lecture 25. 컴퓨터 구조

개요

핵심 질문

  • CPU·메모리·저장장치는 어떻게 협력하여 프로그램을 실행하는가?
  • 캐시 메모리와 메모리 계층 구조는 성능에 어떤 영향을 미치는가?
  • GPU는 왜 딥러닝 연산에 유리한가?
  • AI 시스템 설계에서 컴퓨터 구조 지식이 왜 필요한가?

학습 목표

  • CPU의 핵심 구성 요소(ALU, CU, 레지스터)와 명령어 실행 사이클을 설명할 수 있다.
  • 메모리 계층 구조와 캐시 동작 원리를 이해한다.
  • GPU 아키텍처가 행렬 연산에 유리한 이유를 설명할 수 있다.
  • AI 시스템 관점에서 메모리 병목·배치 크기·Mixed Precision의 의미를 이해한다.

핵심 개념

1. 컴퓨터의 핵심 부품

CPU (Central Processing Unit)

  • ALU (산술논리연산장치): 실질적인 연산 수행 — 사칙연산, 논리 연산, 비교 연산
  • CU (제어장치): 명령어를 해석하고 제어 신호를 생성하여 각 부품 조율
  • 레지스터: CPU 내부의 초고속 임시 저장장치

메모리 계층 구조

CPU와 가까울수록 빠르고 용량이 작으며 비싸다.

레지스터L1 캐시L2 캐시L3 캐시RAMSSD/HDD \text{레지스터} \to \text{L1 캐시} \to \text{L2 캐시} \to \text{L3 캐시} \to \text{RAM} \to \text{SSD/HDD}

계층속도용량비용
레지스터~1 사이클수십 바이트최고
L1 캐시 (SRAM)~4 사이클32~64 KB매우 높음
L2 캐시 (SRAM)~12 사이클256 KB~1 MB높음
L3 캐시 (SRAM)~40 사이클8~64 MB중간
RAM (DRAM)~200 사이클8~128 GB낮음
SSD/HDD~수만 사이클TB 단위매우 낮음

버스 (Bus)

부품 간 데이터를 주고받는 통로. 시스템 버스는 CPU·메모리·입출력 장치를 연결한다.

AI 개발자 관점: 딥러닝 학습의 병목은 대부분 메모리 계층 간 데이터 이동에서 발생한다. 연산 자체(O(n2)O(n^2))보다 메모리 대역폭(Memory Bandwidth)이 실제 속도를 제한하는 경우가 많다.


2. 데이터 표현

정수 표현

  • 비트(bit): 0과 1을 나타내는 최소 정보 단위
  • 바이트(byte): 8비트 = 256가지 표현 가능
  • 워드(word): CPU가 한 번에 처리하는 데이터 크기 — 현대 CPU는 대부분 64비트

부동소수점 (IEEE 754)

=(1)부호×1.가수×2지수바이어스 \text{값} = (-1)^{\text{부호}} \times 1.\text{가수} \times 2^{\text{지수} - \text{바이어스}}

형식부호지수가수바이어스
FP32 (단정밀도)1 bit8 bit23 bit127
FP64 (배정밀도)1 bit11 bit52 bit1023
FP16 (반정밀도)1 bit5 bit10 bit15
BF16 (Brain Float)1 bit8 bit7 bit127

AI 개발자 심화 — Mixed Precision Training

FP32로 전체 학습하면 메모리와 연산량이 크다. Mixed Precision은 FP16/BF16으로 순전파·역전파를 수행하고 파라미터 업데이트는 FP32로 유지하는 방식이다.

  • FP16: 범위가 좁아 수치 불안정(overflow/underflow) 위험 → Loss Scaling 필요
  • BF16: FP32와 지수 비트 수가 같아 범위가 동일 → 학습 안정성 높음, 최근 선호
  • 효과: 메모리 사용량 약 절반, 연산 속도 약 2~3배 향상

엔디안 (Endianness)

다중 바이트 데이터를 메모리에 저장하는 순서.

  • 빅 엔디안: MSB(최상위 바이트)를 낮은 주소에 — 네트워크 표준
  • 리틀 엔디안: LSB(최하위 바이트)를 낮은 주소에 — x86/x64 CPU 표준

3. CPU 구조와 명령어 실행

주요 레지스터

레지스터역할
프로그램 카운터 (PC)다음 실행할 명령어의 메모리 주소 저장
명령어 레지스터 (IR)현재 실행 중인 명령어 저장
범용 레지스터데이터·명령어·주소 임시 저장
스택 포인터 (SP)메모리 스택 영역의 최상단 주소
플래그 레지스터연산 결과 상태 (부호, 제로, 오버플로우, 캐리 등)

명령어 사이클

인출(Fetch)해석(Decode)실행(Execute)저장(Write Back) \text{인출(Fetch)} \to \text{해석(Decode)} \to \text{실행(Execute)} \to \text{저장(Write Back)}

각 단계가 독립적이므로 파이프라이닝으로 병렬 처리 가능.

명령어 파이프라이닝

여러 명령어를 단계별로 겹쳐 실행하여 처리량(Throughput) 향상.

명령어1: [Fetch][Decode][Execute][Write]
명령어2:         [Fetch][Decode ][Execute][Write]
명령어3:                 [Fetch ][Decode ][Execute][Write]

파이프라인 위험(Hazard):

  • 데이터 위험: 이전 명령어 결과를 다음 명령어가 사용 — 데이터 전달(Forwarding)로 완화
  • 제어 위험: 분기(branch) 명령어로 PC가 갑자기 변경 — 분기 예측(Branch Prediction)으로 완화
  • 구조적 위험: 여러 명령어가 동일 하드웨어 자원 동시 사용

CISC vs RISC

CISCRISC
명령어 수많음, 복잡적음, 단순
명령어 크기가변고정
클럭당 사이클여러 사이클1클럭 내외
파이프라이닝비효율최적화
대표x86, x86-64 (Intel, AMD)ARM (Apple M1/M2, 모바일)

인터럽트 (Interrupt)

CPU 작업을 중단시키는 신호.

  • 하드웨어 인터럽트: 입출력 장치 완료 신호 — 비동기, CPU 폴링 불필요
  • 소프트웨어 인터럽트(예외): 잘못된 연산, 시스템 콜 발생 시

인터럽트 처리 순서: 요청 신호 → 플래그 확인 → 현재 작업 백업 → ISR 실행 → 복구

AI 개발자 관점: CUDA 커널 실행, DMA 데이터 전송, GPU↔CPU 비동기 통신 모두 인터럽트 메커니즘 위에서 동작한다.


4. 메모리 (RAM)

RAM 종류

종류특징사용처
DRAM느리지만 집적도 높음, 저렴메인 메모리
SRAM빠르지만 집적도 낮음, 고가캐시 메모리
SDRAM클럭 동기화 DRAMDDR 계열 기반
DDR4/DDR5대역폭 향상현대 메인 메모리 표준
GDDR6/HBM2GPU 전용 고대역폭VRAM

캐시 메모리

CPU 연산 속도(GHz)와 메모리 접근 속도(수백 사이클) 간격을 줄이기 위한 SRAM 기반 저장장치.

  • L1 캐시: 코어 내부, 가장 빠름 (명령어 캐시 L1I + 데이터 캐시 L1D로 분리)
  • L2 캐시: 코어 내부, L1 미스 시 참조
  • L3 캐시: 코어 외부 공유, L2 미스 시 참조

캐시 히트와 미스

캐시 적중률=캐시 히트 횟수캐시 히트 횟수+캐시 미스 횟수 \text{캐시 적중률} = \frac{\text{캐시 히트 횟수}}{\text{캐시 히트 횟수} + \text{캐시 미스 횟수}}

현대 프로세서의 캐시 적중률은 보통 95% 이상이다.

참조 지역성 (Locality of Reference)

  • 시간 지역성: 최근 접근한 데이터를 다시 접근하는 경향 — 반복문 변수
  • 공간 지역성: 접근한 주소 근처를 접근하는 경향 — 배열 순회

캐시 쓰기 정책

정책방법특징
즉시 쓰기 (Write-through)캐시·메모리 동시 쓰기일관성 보장, 대역폭 소모
지연 쓰기 (Write-back)캐시에만 쓰고 나중에 메모리 반영빠름, 일관성 위험

AI 개발자 심화 — 캐시와 딥러닝 성능

  • 행렬 연산 메모리 접근 패턴: 행렬 곱 C=ABC = AB에서 BB를 열 방향으로 접근하면 캐시 미스가 많이 발생한다. 블록 행렬 분해(Tiling)로 캐시 효율을 높인다.
  • FlashAttention: Attention 계산 시 O(n2)O(n^2) 크기의 어텐션 행렬을 메모리에 쓰는 대신, SRAM(온칩 캐시) 안에서 블록 단위로 계산 완료 후 버린다 → HBM(VRAM) 접근 횟수 대폭 감소.
  • KV Cache: LLM 추론 시 이전 토큰의 K·V를 VRAM에 캐싱하여 재계산 방지. 시퀀스가 길어질수록 VRAM 사용량이 선형 증가하는 병목.

5. GPU 아키텍처

CPU vs GPU 설계 철학

CPUGPU
코어 수수~수십 개수천~수만 개
코어 성능고성능, 범용단순, 특화
캐시대용량 (수십 MB)소용량
설계 목표순차 처리 최적화병렬 처리 최적화
적합한 작업복잡한 제어 흐름단순 반복 대량 연산

GPU가 행렬 연산에 유리한 이유

행렬 곱 Cij=kAikBkjC_{ij} = \sum_k A_{ik} B_{kj}의 각 원소 계산은 서로 독립적이다. GPU의 수천 개 CUDA 코어가 이를 동시에 병렬 계산한다.

SIMT (Single Instruction, Multiple Threads)

GPU는 SIMT 방식으로 동작한다 — 하나의 명령어가 수천 개의 스레드에서 동시에 실행된다.

CUDA 스레드 계층
Grid (전체 작업)
  └─ Block (협력 스레드 묶음, 공유 메모리 공유)
       └─ Thread (개별 실행 단위)

CUDA 메모리 계층

메모리위치속도크기범위
레지스터온칩최고수십 KB스레드 전용
공유 메모리 (SRAM)온칩매우 빠름~48 KB/Block블록 공유
L1/L2 캐시온칩빠름MB 단위자동 관리
글로벌 메모리 (HBM/GDDR)오프칩느림GB 단위전체 Grid

HBM (High Bandwidth Memory)

기존 GDDR보다 대역폭이 5~10배 높은 GPU 전용 메모리. A100의 HBM2e는 2 TB/s, H100의 HBM3는 3.35 TB/s 대역폭.

산술 집약도(Arithmetic Intensity)=FLOPs메모리 접근 바이트 \text{산술 집약도(Arithmetic Intensity)} = \frac{\text{FLOPs}}{\text{메모리 접근 바이트}}

산술 집약도가 낮은 연산은 메모리 대역폭 병목(Memory-Bound), 높은 연산은 연산 능력 병목(Compute-Bound).

AI 개발자 심화

  • VRAM OOM (Out of Memory): 배치 크기·시퀀스 길이·모델 파라미터·옵티마이저 상태·활성화 값이 모두 VRAM을 사용한다. FP32 파라미터 1개 = 4 bytes, Mixed Precision 학습 시 추가 오버헤드(그래디언트, 옵티마이저 상태) 포함하면 파라미터당 약 16~20 bytes.

VRAM 추정파라미터 수×(바이트/파라미터)×레플리카 수 \text{VRAM 추정} \approx \text{파라미터 수} \times (\text{바이트/파라미터}) \times \text{레플리카 수}

  • 그래디언트 체크포인팅 (Gradient Checkpointing): 순전파 시 중간 활성화를 저장하지 않고 역전파 시 재계산 — 메모리 O(n)O(\sqrt{n})으로 감소, 연산량 약 33% 증가.
  • 텐서 병렬(Tensor Parallelism): 하나의 행렬 곱을 여러 GPU에 분할하여 각 GPU가 일부분을 계산 후 합산. Megatron-LM 스타일.
  • 파이프라인 병렬(Pipeline Parallelism): 모델의 층을 여러 GPU에 분할하여 마이크로배치 단위로 파이프라인 처리.
  • TPU (Tensor Processing Unit): Google이 설계한 AI 전용 ASIC. 행렬 곱에 특화된 시스토릭 배열(Systolic Array) 구조. 범용성은 낮지만 특정 워크로드에서 GPU 대비 비용 효율적.

6. 보조기억장치와 입출력

RAID (Redundant Array of Independent Disks)

여러 디스크를 하나처럼 사용하여 성능 또는 안정성 향상.

레벨방식성능안정성사용 용량
RAID 0스트라이핑최고낮음100%
RAID 1미러링읽기 향상높음50%
RAID 5분산 패리티중간중간(n1)/n(n-1)/n
RAID 6이중 패리티중간매우 높음(n2)/n(n-2)/n
RAID 10RAID 1+0높음높음50%

DMA (Direct Memory Access)

입출력 데이터를 CPU가 직접 처리하지 않고 DMA 컨트롤러가 메모리에 직접 전송한다 → CPU 오버헤드 감소.

PCIe (Peripheral Component Interconnect Express)

GPU·NVMe SSD를 CPU에 연결하는 고속 입출력 버스.

  • PCIe 4.0 x16: ~32 GB/s 양방향 대역폭
  • PCIe 5.0 x16: ~64 GB/s 양방향 대역폭

AI 개발자 심화

  • GPU↔CPU 데이터 전송: PCIe를 통한 CPU→GPU(H2D), GPU→CPU(D2H) 복사는 HBM 접근보다 훨씬 느리다. 데이터 전처리를 CPU에서 완료한 후 한 번에 전송하거나, pin_memory=True로 고정 메모리 사용 시 전송 속도 향상.
  • NVLink: NVIDIA GPU 간 직접 고속 통신 — A100 기준 최대 600 GB/s. PCIe보다 훨씬 빠른 GPU 간 통신 경로.
  • 스토리지 병목: 대규모 데이터셋 학습 시 SSD 읽기 속도가 GPU 연산보다 느려 데이터 로딩이 병목이 될 수 있다. 분산 파일 시스템(HDFS, S3) + 멀티프로세스 DataLoader로 완화.

7. 멀티코어와 병렬 처리

하드웨어 스레드 vs 소프트웨어 스레드

  • 하드웨어 스레드: 물리적으로 동시 실행되는 명령어 흐름 — 코어 수 × 하이퍼스레딩
  • 소프트웨어 스레드: OS가 스케줄링하는 실행 단위 — 실제로는 시분할

병렬성 vs 동시성

  • 병렬성: 물리적으로 동시에 실행 — 멀티코어, GPU CUDA 코어
  • 동시성: 동시에 실행되는 것처럼 보이는 성질 — 단일 코어의 시분할

Amdahl의 법칙

병렬화로 얻을 수 있는 최대 속도 향상의 이론적 한계:

S(n)=1(1p)+pn S(n) = \frac{1}{(1-p) + \frac{p}{n}}

  • pp: 병렬화 가능 비율, nn: 프로세서 수
  • p=0.95p = 0.95, n=100n = 100이면 최대 속도 향상은 약 17배

AI 개발자 심화

  • 데이터 병렬(Data Parallelism): 같은 모델을 여러 GPU에 복제하고 미니배치를 분할하여 각 GPU가 독립적으로 순전파·역전파 수행 → 그래디언트를 AllReduce로 합산. PyTorch DistributedDataParallel.
  • ZeRO (Zero Redundancy Optimizer): 옵티마이저 상태·그래디언트·파라미터를 GPU 간에 분할 저장하여 메모리 효율 극대화. DeepSpeed ZeRO Stage 1/2/3.
  • Ring-AllReduce: 모든 GPU가 환형으로 연결되어 그래디언트를 분산 집계하는 알고리즘. 통신량 O(n)O(n)으로 GPU 수에 무관하게 효율적.

수식 정리

IEEE 754 부동소수점

=(1)S×(1+가수)×2지수바이어스 \text{값} = (-1)^S \times (1 + \text{가수}) \times 2^{\text{지수} - \text{바이어스}}

캐시 적중률

적중률=히트히트+미스 \text{적중률} = \frac{\text{히트}}{\text{히트} + \text{미스}}

산술 집약도

I=FLOPsMemory Access (Bytes) I = \frac{\text{FLOPs}}{\text{Memory Access (Bytes)}}

행렬 곱 C=ABC = AB (n×nn \times n): FLOPs =2n3= 2n^3, 메모리 접근 =3n2×데이터 크기= 3n^2 \times \text{데이터 크기}

Imatmul=2n33n2×4=n6(FP32 기준) I_{\text{matmul}} = \frac{2n^3}{3n^2 \times 4} = \frac{n}{6} \quad (\text{FP32 기준})

nn이 클수록 Compute-Bound. 작은 배치에서는 Memory-Bound.

Amdahl의 법칙

S(n)=1(1p)+pn,S()=11p S(n) = \frac{1}{(1-p) + \frac{p}{n}}, \quad S(\infty) = \frac{1}{1-p}

VRAM 사용량 추정 (학습 시)

VRAMN×(2+2+4+4+4) bytes=N×16 bytes \text{VRAM} \approx N \times (2 + 2 + 4 + 4 + 4) \text{ bytes} = N \times 16 \text{ bytes}

  • NN: 파라미터 수, FP16 파라미터(2) + FP16 그래디언트(2) + FP32 파라미터(4) + FP32 1차 모멘텀(4) + FP32 2차 모멘텀(4)
  • 실제로는 활성화 값·배치 크기·시퀀스 길이에 따른 추가 사용량 포함