CPU 구조와 명령어 실행, 성능을 높이는 프로세서 기술
CPU의 제어장치·ALU·레지스터·캐시 구조부터 명령어 사이클, 파이프라이닝, 멀티코어와 ISA까지 정리한다.
2026-08-14 · 최초 발행 2026-01-02
명령어를 처리하는 CPU 내부
CPU(Central Processing Unit)는 메모리에서 명령어를 가져오고(Fetch), 의미를 해석한 뒤(Decode), 실행(Execute)하는 프로세서다. 이 작업은 제어장치, 산술논리연산장치(ALU), 레지스터, 캐시 메모리가 역할을 나눠 수행한다.
제어장치(Control Unit, CU)는 명령어의 인출·해독·실행을 조율한다. 프로그램 카운터(PC)를 관리하고, 필요한 제어 신호를 각 구성 요소에 전달한다. 명령어 레지스터(IR)는 현재 처리 중인 명령어를 보관하며, 명령어 디코더는 Opcode를 해석한다. 이 과정에서 ALU 제어 신호, 메모리 읽기·쓰기 신호, 레지스터 전송 신호가 만들어진다.
ALU는 산술과 논리 연산을 담당한다. 덧셈·뺄셈·곱셈·나눗셈, 증가·감소 연산과 함께 부동소수점 연산을 수행한다. AND, OR, NOT, XOR, 비트 시프트와 비트 회전도 ALU의 처리 범위에 들어간다. 비교 결과는 Zero, Carry, Overflow, Sign 같은 조건 플래그로 남는다.
레지스터는 CPU 내부에서 데이터를 임시로 보관하는 저장 공간이다. 범용 레지스터는 연산의 피연산자와 결과를 저장하며, x86-64에서는 RAX, RBX, RCX, RDX, RSI, RDI, R8-R15가 여기에 해당한다. 특수 레지스터에는 다음 명령어 주소를 가리키는 PC, 스택 최상위 주소를 담는 SP, 현재 명령어를 저장하는 IR, 상태 정보를 담는 FLAGS/EFLAGS/RFLAGS, 메모리 주소와 데이터를 다루는 MAR 및 MBR/MDR이 있다.
캐시 메모리는 자주 쓰는 데이터와 명령어를 고속으로 보관해 메모리 접근 지연과 대역폭 병목을 줄인다. L1 캐시는 CPU 코어 내부에 있으며 32-64KB, 1-2 사이클의 특성을 가진다. L1i는 명령어 캐시, L1d는 데이터 캐시로 분리된다. CPU 칩 내부의 L2 캐시는 256KB-1MB, 3-10 사이클이며, 멀티코어가 공유하는 L3 캐시는 4-32MB, 10-20 사이클이다. 멀티코어 환경에서는 MESI, MOESI 같은 캐시 일관성 프로토콜로 캐시를 동기화한다.
Fetch부터 Write-back까지 이어지는 명령어 처리
CPU는 명령어 사이클을 반복한다. Fetch 단계에서는 PC가 가리키는 메모리 주소에서 명령어를 읽어 IR에 저장하고, PC를 다음 명령어 주소로 증가시킨다.
Decode 단계는 IR에 들어온 명령어를 분석해 Opcode와 Operand 위치를 파악하고 제어 신호를 생성하는 구간이다. Execute 단계에서는 ALU 연산을 수행하고, 필요할 때 메모리에 접근하며, 레지스터와 조건 플래그를 갱신한다. 마지막 Store/Write-back 단계에서 결과를 레지스터 또는 메모리에 저장하고 상태 플래그를 업데이트한다.
덧셈 명령어는 이 흐름을 간단하게 보여 준다.
ADD RAX, RBX ; RAX = RAX + RBX
1. Fetch: PC=0x1000에서 "ADD RAX, RBX" 명령어 인출, IR에 저장, PC=0x1004
2. Decode: Opcode=ADD, Dest=RAX, Src=RBX
3. Execute: ALU에서 RAX + RBX 계산
4. Write-back: 결과를 RAX에 저장
실행 유닛을 쉬지 않게 만드는 구조
파이프라이닝은 명령어 실행 단계를 겹쳐 여러 명령어가 서로 다른 단계에 동시에 머물게 하는 방식이다. IF(Instruction Fetch), ID(Instruction Decode), EX(Execute), MEM(Memory Access), WB(Write Back)로 나뉜다. 이상적으로는 5단계 파이프라인이 5배의 처리량 증가를 만들 수 있지만, 실제 처리량은 파이프라인 해저드 때문에 줄어든다.
구조적 해저드는 자원을 두고 경쟁할 때 발생한다. 데이터 해저드는 RAW, WAR, WAW처럼 데이터 의존성이 있을 때 생기며, 제어 해저드는 분기 명령어에서 문제를 만든다. 포워딩은 ALU 결과를 즉시 다음 명령어로 전달하고, 지연 슬롯은 분기 뒤에 명령어를 배치한다. 분기 예측도 해저드를 줄이는 방법이다.
슈퍼스칼라 구조는 한 사이클에 여러 명령어를 실행한다. ALU, FPU, Load/Store Unit 같은 다중 실행 유닛에 여러 명령어를 동시에 디스패치하고, 독립적인 명령어를 병렬 처리해 명령어 수준 병렬성(ILP, Instruction-Level Parallelism)을 활용한다. Intel Core는 4-way 슈퍼스칼라로 사이클당 최대 4개 명령어를 처리한다.
분기 예측은 if나 loop 같은 조건 분기로 파이프라인이 멈추는 문제를 다룬다. 정적 예측은 컴파일 시점에 항상 taken 또는 not taken을 가정하는 방식으로, 간단하지만 정확도가 낮다. 동적 예측은 실행 시점에 분기 이력 테이블(Branch History Table), 2-bit 카운터, Global History를 이용하며 정확도는 90% 이상이다. 투기적 실행은 예측 경로를 미리 실행하고, 예측이 틀리면 롤백한다.
비순차 실행(Out-of-Order Execution, OoOE)은 프로그램에 적힌 순서와 달리, 데이터 의존성이 없는 명령어를 먼저 실행해 파이프라인 stall을 줄인다. Reorder Buffer(ROB)는 명령어 순서를 유지하면서 투기 실행과 예외 처리를 관리한다. 이 구조는 데이터 해저드를 피하고 CPU 활용률을 높인다.
클럭만으로는 설명되지 않는 성능
클럭은 CPU 동작을 동기화하는 펄스 신호다. 클럭 사이클은 펄스 1개에 걸리는 시간이고, 클럭 속도는 초당 사이클 수를 Hz로 나타낸다. 3.0 GHz는 초당 30억 사이클이며, 1 사이클은 약 0.33 나노초다.
클럭 속도가 높아지면 명령어 실행도 빨라질 수 있지만 성능이 1:1로 비례하지는 않는다. 전력 소비는 P ∝ V² × f로 전압²와 주파수에 영향을 받고, 발열과 전류 누설(Leakage)도 제약이 된다. 2000년대 중반 이후 클럭 속도 증가는 물리적 한계에 부딪혔고, 멀티코어·파이프라이닝·IPC 향상이 대신 중요해졌다.
IPC(Instructions Per Cycle)는 사이클당 실행되는 명령어 수로, 아키텍처 효율성을 보여 주는 지표다.
성능 = 클럭 속도 × IPC
파이프라이닝, 슈퍼스칼라, 비순차 실행, 분기 예측, 캐시 최적화는 IPC를 높이는 기술이다.
멀티코어와 SMT가 병렬성을 다루는 방식
코어는 독립적인 실행 유닛이며, 각 코어는 별도의 명령어 스트림을 실행한다. 멀티코어 프로세서는 여러 코어를 하나의 프로세서에 담아 스레드 수준 병렬성(TLP, Thread-Level Parallelism)을 활용한다. 듀얼코어는 2개, 쿼드코어는 4개, 옥타코어는 8개 코어로 구성되며, 고성능 서버에는 16, 32, 64 코어 이상이 사용된다. 여러 프로그램이나 멀티스레드 애플리케이션을 동시에 실행하는 기반이 된다.
Simultaneous Multithreading(SMT)은 Intel에서는 Hyper-Threading(HT), AMD에서는 SMT라고 부른다. 하나의 물리 코어가 2개의 논리 코어로 동작하며, ALU와 캐시 같은 내부 자원을 공유한 채 두 스레드가 실행 유닛을 번갈아 사용한다. 유휴 실행 유닛을 활용해 약 20-30%의 성능 증가를 얻을 수 있지만, 자원을 공유하므로 2배 성능을 뜻하지는 않는다.
ISA가 결정하는 명령어 처리 방식
CISC(Complex Instruction Set Computer)는 복잡하고 다양한 명령어를 제공하며, 하나의 명령어로 여러 작업을 수행할 수 있다. 명령어 길이가 가변적이고 x86, x86-64가 대표 사례다. 코드 크기가 작고 메모리 접근을 줄일 수 있지만, 명령어 해독이 복잡하고 파이프라이닝이 어렵다.
RISC(Reduced Instruction Set Computer)는 단순하고 고정 길이인 명령어를 사용하며, 한 명령어가 한 작업을 수행하는 형태다. 레지스터를 많이 활용하고 ARM, RISC-V, MIPS가 대표적이다. 파이프라이닝과 효율적인 하드웨어 설계에 유리하며 모바일 환경에서 전력 효율을 제공하지만, 코드 크기가 커지고 메모리 접근이 늘어날 수 있다.
| 특성 | x86-64 (Intel, AMD) | ARM |
|---|---|---|
| 명령어 | CISC | RISC |
| 복잡도 | 높음 | 낮음 |
| 전력 효율 | 낮음 | 높음 |
| 성능 | 고성능 (데스크톱, 서버) | 효율적 (모바일, 임베디드) |
| 시장 | PC, 서버 | 스마트폰, 태블릿, Apple M1/M2 |
CPU를 비교하는 측정 도구
SPEC(Standard Performance Evaluation Corporation)는 SPECint로 정수 연산 성능을, SPECfp로 부동소수점 연산 성능을 측정한다. Geekbench는 싱글코어와 멀티코어 점수를 제공하고, Cinebench는 렌더링 성능을 다룬다. CPU-Z에서는 클럭 속도, 코어 수, 캐시 정보를 확인할 수 있다.