CPU Architecture
CISC vs RISC 비교, x86/x64 계보, ARM64, 인프라 관점 CPU 선택
🎯 ISA란?
ISA (Instruction Set Architecture): CPU가 이해하는 명령어 집합과 그 규칙
flowchart TB subgraph SW["소프트웨어"] S1["OS, 애플리케이션, 컴파일러"] end subgraph ISA["ISA (명령어 세트 아키텍처)"] I1["인터페이스"] end subgraph HW["하드웨어"] H1["CPU, 마이크로아키텍처"] end SW --> ISA --> HW
ISA가 정의하는 것:
- 명령어 종류와 형식
- 레지스터 개수와 용도
- 메모리 주소 지정 방식
- 데이터 타입
🆚 CISC vs RISC
CPU 설계 철학의 두 가지 접근법.
CISC (Complex Instruction Set Computer)
“하나의 명령어로 많은 일을”
; x86 CISC 예시: 메모리에서 직접 연산
ADD [mem], eax ; 메모리 값 + 레지스터 → 메모리에 저장
; (메모리 읽기 + 덧셈 + 메모리 쓰기를 한 명령어로)
- 명령어가 복잡하고 다양함
- 하나의 명령어가 여러 동작 수행
- 명령어 길이가 가변적
- 메모리에서 직접 연산 가능
RISC (Reduced Instruction Set Computer)
“단순한 명령어를 빠르게”
; ARM RISC 예시: 같은 동작을 여러 명령어로
LDR r1, [mem] ; 메모리 → 레지스터
ADD r1, r1, r0 ; 레지스터 + 레지스터
STR r1, [mem] ; 레지스터 → 메모리
- 명령어가 단순하고 적음
- 하나의 명령어는 하나의 동작
- 명령어 길이가 고정적
- Load/Store 구조 (메모리 접근은 전용 명령어)
비교 표
| 항목 | CISC | RISC |
|---|---|---|
| 명령어 수 | 많음 (수백 개) | 적음 (수십~백여 개) |
| 명령어 길이 | 가변 (1~15 바이트) | 고정 (4 바이트) |
| 명령어 복잡도 | 복잡 | 단순 |
| 실행 사이클 | 명령어마다 다름 | 대부분 1 사이클 |
| 레지스터 | 적음 | 많음 |
| 메모리 접근 | 대부분의 명령어에서 가능 | Load/Store만 |
| 파이프라인 | 구현 어려움 | 구현 쉬움 |
| 코드 밀도 | 높음 (짧은 프로그램) | 낮음 (긴 프로그램) |
| 대표 | x86, x64 | ARM, RISC-V, MIPS |
역사적 배경
flowchart TB subgraph Era1["1970년대"] A1["메모리가 비쌈 → 코드 크기 최소화 중요"] A2["컴파일러가 단순 → HW가 복잡한 명령어 지원"] A3["CISC 설계 채택"] A1 --> A2 --> A3 end subgraph Era2["1980년대"] B1["연구 결과: 복잡한 명령어는 거의 안 쓰임"] B2["메모리 가격 하락, 컴파일러 발전"] B3["RISC 개념 등장"] B4["Berkeley RISC, Stanford MIPS"] B1 --> B2 --> B3 --> B4 end Era1 --> Era2
💻 x86 계보
8086부터 x64까지
flowchart TB A["1978: Intel 8086 (16비트)"] B["1985: Intel 80386 (32비트, IA-32)"] C["x86 이름의 유래 (80x86 시리즈)"] D["2003: AMD Opteron (64비트, AMD64/x86-64)"] E["Intel이 AMD64를 라이선스 (Intel 64, EM64T)"] F["현재: x64 = AMD64 = x86-64 = Intel 64"] A --> B --> C --> D --> E --> F
x86 (32비트, IA-32)
- 8개의 범용 레지스터 (EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP)
- 최대 4GB 메모리 주소 공간 (2^32)
- 가변 길이 명령어 (1~15 바이트)
- 복잡한 주소 지정 모드
flowchart LR subgraph Reg32["x86 레지스터 (32비트)"] direction TB EAX["EAX (32비트)"] AX["AX (16비트)"] AHAL["AH | AL (8비트)"] EAX --> AX --> AHAL end
x64 (64비트, AMD64)
x86의 64비트 확장임. 하위 호환성 유지.
| 항목 | x86 (32비트) | x64 (64비트) |
|---|---|---|
| 레지스터 크기 | 32비트 | 64비트 |
| 범용 레지스터 | 8개 | 16개 (R8~R15 추가) |
| 메모리 주소 | 4GB (2^32) | 16EB 이론상 (현재 256TB~) |
| 함수 호출 규약 | 스택 기반 | 레지스터 기반 (fastcall) |
flowchart LR subgraph Reg64["x64 레지스터 (64비트)"] direction TB RAX["RAX (64비트)"] EAX["EAX (32비트)"] AX["AX (16비트)"] AHAL["AH | AL (8비트)"] R8["추가: R8~R15"] RAX --> EAX --> AX --> AHAL end
x64의 장점
| 장점 | 설명 |
|---|---|
| 메모리 | 4GB 제한 해제, 대용량 메모리 활용 |
| 레지스터 | 더 많은 레지스터로 성능 향상 |
| 호환성 | 32비트 프로그램 실행 가능 |
| 보안 | NX 비트 (실행 방지), ASLR 강화 |
동작 모드
| 모드 | 설명 |
|---|---|
| Long Mode (64비트) | 64비트 OS + 64비트 앱 |
| Compatibility Mode | 64비트 OS + 32비트 앱 |
| Legacy Mode | 32비트 OS (x64 기능 미사용) |
📱 ARM 계보
ARM의 역사
flowchart TB A["1985: Acorn RISC Machine (BBC Micro용)"] B["1990: ARM Ltd 설립 (Apple, Acorn, VLSI 합작)"] C["라이선스 비즈니스 모델"] D["2011: ARMv8-A (64비트, AArch64)"] E["2020: Apple M1 (데스크탑/노트북 진출)"] F["현재: 서버, 클라우드까지 확장"] A --> B --> C --> D --> E --> F
ARM vs ARM64
| 항목 | ARM (32비트) | ARM64 (AArch64) |
|---|---|---|
| 레지스터 | 16개 (R0~R15) | 31개 (X0~X30) |
| 명령어 길이 | 32비트 (Thumb: 16비트) | 32비트 고정 |
| 메모리 주소 | 4GB | 최대 48비트 (256TB) |
| 부동소수점 | 선택적 (VFP) | 필수 포함 |
| SIMD | NEON (선택) | NEON (필수) |
ARM의 특징 — 라이선스 모델
flowchart TB ARM["ARM Holdings (설계)"] Apple["Apple (A시리즈, M시리즈)"] Qualcomm["Qualcomm (Snapdragon)"] Samsung["Samsung (Exynos)"] AWS["AWS (Graviton)"] Ampere["Ampere (Altra)"] NVIDIA["NVIDIA (Grace)"] ARM --> Apple ARM --> Qualcomm ARM --> Samsung ARM --> AWS ARM --> Ampere ARM --> NVIDIA
🔄 현대 CPU: 하이브리드화
CISC의 RISC화
현대 x86 CPU는 내부적으로 RISC처럼 동작함.
flowchart LR subgraph CPU["x86 CPU 내부"] A["x86 명령어"] B["디코더"] C["micro-ops (RISC-like)"] D["실행 유닛"] E["파이프라인, 비순차 실행"] A --> B --> C --> D --> E end
복잡한 CISC 명령어 → 단순한 마이크로 연산으로 분해 → RISC처럼 실행함
빅리틀 (big.LITTLE) 아키텍처
성능 코어 + 효율 코어 조합임.
flowchart TB subgraph Modern["현대 CPU"] subgraph PCore["Performance Core (P-Core, big)"] P1["고성능 / 고클럭 / 복잡한 작업"] end subgraph ECore["Efficiency Core (E-Core, LITTLE)"] E1["저전력 / 저클럭 / 백그라운드 작업"] end end
| 제조사 | P-Core | E-Core |
|---|---|---|
| Intel (12세대+) | Golden Cove, Raptor Cove | Gracemont |
| Apple (M시리즈) | Firestorm, Avalanche | Icestorm, Blizzard |
| ARM (big.LITTLE) | Cortex-X, A7x | Cortex-A5x |
⚡ 주요 기술 요소
파이프라인
명령어 실행을 여러 단계로 나눠 동시 처리함.
gantt title 5단계 파이프라인 dateFormat X axisFormat %s section 명령어1 IF: 0, 1 ID: 1, 2 EX: 2, 3 MEM: 3, 4 WB: 4, 5 section 명령어2 IF: 1, 2 ID: 2, 3 EX: 3, 4 MEM: 4, 5 WB: 5, 6 section 명령어3 IF: 2, 3 ID: 3, 4 EX: 4, 5 MEM: 5, 6 WB: 6, 7
- IF: Instruction Fetch (명령어 가져오기)
- ID: Instruction Decode (명령어 해석)
- EX: Execute (실행)
- MEM: Memory Access (메모리 접근)
- WB: Write Back (결과 저장)
RISC가 파이프라인에 유리한 이유:
- 고정 길이 명령어 → IF가 쉬움
- 단순한 명령어 → 균일한 실행 시간
- Load/Store 분리 → 명확한 MEM 단계
분기 예측 (Branch Prediction)
조건 분기의 결과를 예측하여 파이프라인 효율을 유지함.
if (condition) {
A(); // 분기 1
} else {
B(); // 분기 2
}
CPU: condition 결과 나오기 전에 미리 예측해서 실행
→ 맞으면 성능 유지
→ 틀리면 파이프라인 비우고 다시 (페널티)
캐시 계층
flowchart TB CPU["CPU Core"] L1["L1 Cache (32~64KB)"] L2["L2 Cache (256KB~1MB)"] L3["L3 Cache (수MB~수십MB)"] RAM["RAM (수GB~TB)"] CPU -->|~1ns| L1 -->|~3ns| L2 -->|~10ns| L3 -->|~100ns| RAM
SIMD (Single Instruction, Multiple Data)
하나의 명령어로 여러 데이터를 동시 처리함.
flowchart LR subgraph Normal["일반 덧셈 (4번 연산)"] N1["A[0]+B[0]=C[0]"] N2["A[1]+B[1]=C[1]"] N3["A[2]+B[2]=C[2]"] N4["A[3]+B[3]=C[3]"] end subgraph SIMD["SIMD 덧셈 (1번 연산)"] S1["A[0-3] + B[0-3] = C[0-3]"] end
| 기술 | 아키텍처 | 벡터 크기 | 용도 |
|---|---|---|---|
| SSE | x86/x64 | 128비트 | 멀티미디어 |
| AVX | x86/x64 | 256비트 | 과학 계산 |
| AVX-512 | x86/x64 | 512비트 | HPC, AI |
| NEON | ARM | 128비트 | 모바일, 임베디드 |
| SVE/SVE2 | ARM | 가변 (128~2048) | 서버, HPC |
가상화 확장
하드웨어 수준 가상화 지원임.
| 기술 | 제조사 | 설명 |
|---|---|---|
| VT-x | Intel | CPU 가상화 |
| VT-d | Intel | I/O 가상화 (DMA) |
| AMD-V | AMD | CPU 가상화 |
| AMD-Vi | AMD | I/O 가상화 |
| ARM VHE | ARM | 가상화 호스트 확장 |
자세한 내용은 Hypervisor & VM 참고
🖥️ 인프라 관점: CPU 선택
서버 CPU 시장
pie title 서버 CPU 시장 점유율 "x86 (Intel + AMD)" : 90 "ARM" : 8 "기타" : 2
x64 서버 선택
| 제조사 | 제품군 | 특징 |
|---|---|---|
| Intel | Xeon Scalable | 시장 점유율 1위, 광범위한 에코시스템 |
| AMD | EPYC | 코어 수 많음, 가성비 좋음 |
고려 사항:
| 항목 | 설명 |
|---|---|
| 코어 수 | 병렬 처리 워크로드에 중요 |
| 클럭 속도 | 단일 스레드 성능 |
| 메모리 채널 | 메모리 대역폭 |
| PCIe 레인 | GPU, NVMe 확장성 |
| TDP | 전력/냉각 비용 |
ARM 서버 선택
| 제공사 | 제품 | 환경 |
|---|---|---|
| AWS | Graviton (2, 3, 4) | EC2 인스턴스 |
| Azure | Ampere Altra | VM |
| GCP | Tau T2A | Compute Engine |
| Oracle | Ampere A1 | OCI |
ARM 서버 장점:
| 장점 | 설명 |
|---|---|
| 가격 | x86 대비 ~20-40% 저렴 (클라우드) |
| 전력 효율 | 와트당 성능 우수 |
| 코어 밀도 | 많은 코어로 병렬 처리 |
ARM 서버 고려사항:
| 항목 | 설명 |
|---|---|
| 소프트웨어 호환 | x86 바이너리 실행 불가 |
| 에코시스템 | 일부 상용 SW 미지원 |
| 성숙도 | x86 대비 경험/자료 적음 |
워크로드별 권장
| 워크로드 | 권장 | 이유 |
|---|---|---|
| 범용 웹서버 | x64 또는 ARM | 둘 다 적합 |
| 컨테이너/K8s | ARM 고려 | 비용 효율 |
| 데이터베이스 | x64 | 성숙한 최적화 |
| 빅데이터/분석 | 둘 다 | 워크로드에 따라 |
| AI/ML 학습 | x64 + GPU | CUDA 에코시스템 |
| AI 추론 | ARM 고려 | 비용 효율 |
| 레거시 앱 | x64 | 호환성 |
| Java/Node.js | ARM 고려 | 잘 지원됨 |
클라우드 인스턴스 예시
AWS:
| 인스턴스 | CPU | 용도 |
|---|---|---|
| m6i | Intel Xeon | 범용 (x64) |
| m6a | AMD EPYC | 범용 (x64, 저렴) |
| m7g | Graviton3 | 범용 (ARM, 저렴) |
| c7g | Graviton3 | 컴퓨팅 최적화 (ARM) |
가격 비교 (예시, 리전마다 다름):
m6i.large (x64 Intel): $0.096/시간
m6a.large (x64 AMD): $0.086/시간
m7g.large (ARM): $0.082/시간
→ ARM이 ~15-20% 저렴
🔮 미래 트렌드
RISC-V
오픈소스 ISA
- 로열티 무료, 오픈 표준
- 누구나 구현 가능
- 확장 가능한 모듈식 설계
- 현재 임베디드/IoT에서 성장 중
- 서버는 아직 초기 단계
이기종 컴퓨팅
flowchart LR subgraph Heterogeneous["이기종 컴퓨팅"] CPU["CPU (범용)"] GPU["GPU (병렬 연산)"] NPU["NPU (AI 추론)"] Other["기타 (FPGA, DSP)"] end
Apple M시리즈: CPU + GPU + Neural Engine 통합 (SoC)임
Chiplet 아키텍처
flowchart TB subgraph Monolithic["전통적 모놀리식"] M1["하나의 큰 다이"] end subgraph Chiplet["Chiplet 방식"] C1["CPU"] C2["CPU"] C3["I/O"] IC["인터커넥트"] C1 --- IC C2 --- IC C3 --- IC end Monolithic --> Chiplet
- 수율 향상, 유연한 구성, 제조 비용 감소
- 예시: AMD EPYC, Intel Ponte Vecchio
📋 요약
CISC vs RISC
| 항목 | CISC (x86/x64) | RISC (ARM) |
|---|---|---|
| 철학 | 복잡한 명령어 | 단순한 명령어 |
| 현실 | 내부는 RISC-like | 점점 복잡해짐 |
| 시장 | 서버/데스크탑 지배 | 모바일/임베디드, 서버 진출 |
선택 가이드
| 상황 | 선택 |
|---|---|
| 호환성/안정성 중요 | x64 |
| 비용 최적화 | ARM |
| 레거시 앱 | x64 |
| 컨테이너 워크로드 | ARM 고려 |
| 특수 SW 필요 | 지원 여부 확인 |
🔗 관련 포스트
- Hypervisor & VM — 가상화 확장 (VT-x, AMD-V)
- Linux Kernel Overview — 커널과 하드웨어 인터페이스
- Container Virtualization — 컨테이너와 CPU