CPU 명령어 수준 병렬성을 높이는 슈퍼스칼라와 비순차 실행

슈퍼스칼라, 비순차 실행, 분기 예측, 투기적 실행이 명령어 수준 병렬성을 활용해 CPU IPC를 높이는 방식을 정리한다.

2026-08-14 · 최초 발행 2026-01-16

명령어 사이에서 찾는 병렬성

명령어 수준 병렬성(Instruction-Level Parallelism, ILP)은 프로그램 안에서 동시에 실행할 수 있는 명령어의 양이다. 단일 스레드 성능을 높이려는 CPU는 이 병렬성을 끌어내기 위해 컴파일 시점의 정적 기법과 실행 시점의 동적 기법을 함께 사용한다.

명령어 수준 병렬성(ILP)정적 기법(컴파일 시점)동적 기법(실행 시점)VLIW루프 언롤링소프트웨어 파이프라이닝슈퍼스칼라비순차 실행투기적 실행분기 예측

여러 명령어를 한꺼번에 발행하는 슈퍼스칼라

슈퍼스칼라는 한 클럭 사이클에 여러 명령어를 인출하고 해독해 실행할 수 있는 프로세서 아키텍처다. 다중 실행 유닛을 두고, 명령어 간 의존성과 자원 상태를 살펴 병렬로 처리할 수 있는 작업을 골라낸다.

구성 요소 기능 설명
다중 인출 유닛 Multiple Fetch 여러 명령어 동시 인출
다중 해독기 Multiple Decoders 병렬 명령어 해독
발행 큐 Issue Queue 실행 대기 명령어 관리
다중 실행 유닛 Multiple EUs ALU, FPU, LSU 등 병렬 실행
재정렬 버퍼 Reorder Buffer 명령어 순서 복원
실행 단계발행 단계해독 단계인출 단계명령어 1명령어 2명령어 3명령어 4해독기 1해독기 2해독기 3해독기 4발행(Issue Queue)ALU 1ALU 2FPULoad/Store

슈퍼스칼라 차수는 한 사이클에 발행할 수 있는 최대 명령어 수를 가리킨다. 2-way 슈퍼스칼라는 사이클당 2개, 4-way 슈퍼스칼라는 4개, 6-way 슈퍼스칼라는 6개 명령어를 발행한다. 다만 실제 IPC(Instructions Per Cycle)는 명령어 의존성과 자원 충돌 때문에 이론적 최댓값보다 낮다.

준비된 명령어부터 실행하는 비순차 처리

아웃오브오더 실행(Out-of-Order Execution, 비순차 실행)은 프로그램에 적힌 순서를 그대로 따르기보다, 데이터가 준비된 명령어를 먼저 실행하는 기법이다. 데이터 해저드가 파이프라인 전체를 멈추게 하는 상황을 줄여 실행 유닛의 효율을 높인다.

Tomasulo 알고리즘은 IBM System/360 Model 91에서 처음 도입된 대표적인 OoO 실행 구현 방식이다.

구성 요소 기능
예약 스테이션(Reservation Station) 명령어와 피연산자 보관
공통 데이터 버스(CDB) 연산 결과 브로드캐스트
레지스터 리네이밍 WAR, WAW 해저드 제거
재정렬 버퍼(ROB) 순서대로 커밋 보장
커밋 단계백엔드프론트엔드피연산자 준비결과 전송CDB 브로드캐스트순서대로 커밋명령어 인출명령어 해독레지스터 리네이밍예약 스테이션실행 유닛재정렬 버퍼아키텍처 레지스터

레지스터 리네이밍은 논리 레지스터를 물리 레지스터에 동적으로 매핑해 WAR(Write After Read)와 WAW(Write After Write) 해저드를 없앤다.

원본:
R1 = R2 + R3    (명령어 1)
R4 = R1 × R5    (명령어 2)
R1 = R6 - R7    (명령어 3) - WAW with 명령어 1

리네이밍 후:
P1 = R2 + R3
P2 = P1 × R5
P3 = R6 - R7    - 별도 물리 레지스터 할당

이 방식은 데이터 해저드로 인한 스톨을 줄이고 실행 유닛 활용률을 높이며 캐시 미스 지연 시간을 은닉할 수 있다. 반대로 하드웨어 복잡도와 전력 소비가 늘고, 설계 및 검증 비용도 상승한다.

분기 결과를 기다리지 않는 파이프라인

분기 명령어는 제어 해저드를 만들어 파이프라인 흐름을 끊는다. CPU는 분기 결과가 확정되기 전에도 다음 명령어를 인출해야 하므로, 분기 예측을 바탕으로 투기적 실행을 수행한다.

정적 예측은 컴파일 시점에 분기 방향을 결정한다. 항상 예측 안 함(Predict Not Taken), 항상 예측 함(Predict Taken), 루프 분기에 효과적인 후방 분기 예측 함(Backward Taken)이 여기에 속한다.

동적 예측은 실행 중 쌓인 분기 이력을 사용한다.

기법 설명 예측 정확도
1비트 예측기 마지막 분기 결과 기억 약 80%
2비트 포화 카운터 상태 기계 기반 예측 약 90%
상관관계 예측기 전역 분기 이력 활용 약 95%
신경망 예측기 퍼셉트론 기반 예측 약 97%
초기화분기 발생분기 미발생분기 발생분기 미발생분기 발생분기 미발생Strongly Not TakenWeakly Not TakenWeakly TakenStrongly Taken

분기 타겟 버퍼(BTB)는 분기 명령어의 타겟 주소를 캐싱해 예측 시 즉시 목적지 주소를 제공한다. BTB에는 분기 명령어 주소를 담는 태그(Tag), 분기 목적지 주소인 타겟(Target), 분기 방향을 나타내는 예측 비트가 들어간다.

예측 경로를 먼저 실행할 때의 대가

투기적 실행(Speculative Execution)은 분기 예측이나 메모리 접근 결과가 확정되기 전에 후속 명령어를 미리 실행한다. 예측이 맞으면 성능을 얻고, 틀리면 롤백(Rollback)한다.

예측 적중예측 실패분기 예측예측 방향실행투기적 명령어 실행분기 결과확인결과 커밋파이프라인 플러시올바른 경로 실행다음 명령어

2018년 발견된 Spectre와 Meltdown 취약점은 투기적 실행의 부작용을 악용한 사이드 채널 공격이다. 현대 프로세서는 이를 대응하기 위한 다양한 완화 기법을 적용하고 있다.

병목별로 다른 성능 기법의 역할

기법 목적 복잡도 성능 향상
슈퍼스칼라 다중 명령어 발행 중간 2-4배
OoO 실행 데이터 해저드 회피 높음 1.5-2배
분기 예측 제어 해저드 회피 중간 1.2-1.5배
레지스터 리네이밍 이름 의존성 제거 중간 1.3-1.5배
투기적 실행 지연 시간 은닉 높음 1.2-1.4배

프로세서 아키텍처에서 보이는 구현

Intel Core 아키텍처는 6-way 슈퍼스칼라, 224개 물리 레지스터, 512개 엔트리 재정렬 버퍼, 2-level 분기 예측기를 사용한다.

AMD Zen 아키텍처는 6-way 슈퍼스칼라와 분리된 정수/부동소수점 스케줄러를 갖추고 TAGE 분기 예측기와 SMT(Simultaneous Multi-Threading)를 지원한다.

ARM Cortex 아키텍처는 4-8 way 슈퍼스칼라, 에너지 효율 최적화, big.LITTLE 이기종 구조, 적응형 분기 예측을 사용한다.

슈퍼스칼라는 병렬 명령어 발행을, 비순차 실행은 데이터 해저드 회피를, 분기 예측은 파이프라인 효율화를 맡는다. 이 기법들은 상호 보완적으로 작동해 현대 프로세서의 높은 IPC를 가능하게 하며, 시스템 프로그래머가 하드웨어 성능을 활용하려면 그 동작 원리를 이해할 필요가 있다.

CPU 아키텍처슈퍼스칼라비순차 실행분기 예측명령어 수준 병렬성