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 구조 (메모리 접근은 전용 명령어)

비교 표

항목CISCRISC
명령어 수많음 (수백 개)적음 (수십~백여 개)
명령어 길이가변 (1~15 바이트)고정 (4 바이트)
명령어 복잡도복잡단순
실행 사이클명령어마다 다름대부분 1 사이클
레지스터적음많음
메모리 접근대부분의 명령어에서 가능Load/Store만
파이프라인구현 어려움구현 쉬움
코드 밀도높음 (짧은 프로그램)낮음 (긴 프로그램)
대표x86, x64ARM, 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 Mode64비트 OS + 32비트 앱
Legacy Mode32비트 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)필수 포함
SIMDNEON (선택)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-CoreE-Core
Intel (12세대+)Golden Cove, Raptor CoveGracemont
Apple (M시리즈)Firestorm, AvalancheIcestorm, Blizzard
ARM (big.LITTLE)Cortex-X, A7xCortex-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
기술아키텍처벡터 크기용도
SSEx86/x64128비트멀티미디어
AVXx86/x64256비트과학 계산
AVX-512x86/x64512비트HPC, AI
NEONARM128비트모바일, 임베디드
SVE/SVE2ARM가변 (128~2048)서버, HPC

가상화 확장

하드웨어 수준 가상화 지원임.

기술제조사설명
VT-xIntelCPU 가상화
VT-dIntelI/O 가상화 (DMA)
AMD-VAMDCPU 가상화
AMD-ViAMDI/O 가상화
ARM VHEARM가상화 호스트 확장

자세한 내용은 Hypervisor & VM 참고


🖥️ 인프라 관점: CPU 선택

서버 CPU 시장

pie title 서버 CPU 시장 점유율
    "x86 (Intel + AMD)" : 90
    "ARM" : 8
    "기타" : 2

x64 서버 선택

제조사제품군특징
IntelXeon Scalable시장 점유율 1위, 광범위한 에코시스템
AMDEPYC코어 수 많음, 가성비 좋음

고려 사항:

항목설명
코어 수병렬 처리 워크로드에 중요
클럭 속도단일 스레드 성능
메모리 채널메모리 대역폭
PCIe 레인GPU, NVMe 확장성
TDP전력/냉각 비용

ARM 서버 선택

제공사제품환경
AWSGraviton (2, 3, 4)EC2 인스턴스
AzureAmpere AltraVM
GCPTau T2ACompute Engine
OracleAmpere A1OCI

ARM 서버 장점:

장점설명
가격x86 대비 ~20-40% 저렴 (클라우드)
전력 효율와트당 성능 우수
코어 밀도많은 코어로 병렬 처리

ARM 서버 고려사항:

항목설명
소프트웨어 호환x86 바이너리 실행 불가
에코시스템일부 상용 SW 미지원
성숙도x86 대비 경험/자료 적음

워크로드별 권장

워크로드권장이유
범용 웹서버x64 또는 ARM둘 다 적합
컨테이너/K8sARM 고려비용 효율
데이터베이스x64성숙한 최적화
빅데이터/분석둘 다워크로드에 따라
AI/ML 학습x64 + GPUCUDA 에코시스템
AI 추론ARM 고려비용 효율
레거시 앱x64호환성
Java/Node.jsARM 고려잘 지원됨

클라우드 인스턴스 예시

AWS:

인스턴스CPU용도
m6iIntel Xeon범용 (x64)
m6aAMD EPYC범용 (x64, 저렴)
m7gGraviton3범용 (ARM, 저렴)
c7gGraviton3컴퓨팅 최적화 (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 필요지원 여부 확인

🔗 관련 포스트


🔗 참고 자료