CPU 명령어 수준 병렬성을 높이는 슈퍼스칼라와 비순차 실행
슈퍼스칼라, 비순차 실행, 분기 예측, 투기적 실행이 명령어 수준 병렬성을 활용해 CPU IPC를 높이는 방식을 정리한다.
2026-08-14 · 최초 발행 2026-01-16
명령어 사이에서 찾는 병렬성
명령어 수준 병렬성(Instruction-Level Parallelism, ILP)은 프로그램 안에서 동시에 실행할 수 있는 명령어의 양이다. 단일 스레드 성능을 높이려는 CPU는 이 병렬성을 끌어내기 위해 컴파일 시점의 정적 기법과 실행 시점의 동적 기법을 함께 사용한다.
여러 명령어를 한꺼번에 발행하는 슈퍼스칼라
슈퍼스칼라는 한 클럭 사이클에 여러 명령어를 인출하고 해독해 실행할 수 있는 프로세서 아키텍처다. 다중 실행 유닛을 두고, 명령어 간 의존성과 자원 상태를 살펴 병렬로 처리할 수 있는 작업을 골라낸다.
| 구성 요소 | 기능 | 설명 |
|---|---|---|
| 다중 인출 유닛 | Multiple Fetch | 여러 명령어 동시 인출 |
| 다중 해독기 | Multiple Decoders | 병렬 명령어 해독 |
| 발행 큐 | Issue Queue | 실행 대기 명령어 관리 |
| 다중 실행 유닛 | Multiple EUs | ALU, FPU, LSU 등 병렬 실행 |
| 재정렬 버퍼 | Reorder Buffer | 명령어 순서 복원 |
슈퍼스칼라 차수는 한 사이클에 발행할 수 있는 최대 명령어 수를 가리킨다. 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) | 순서대로 커밋 보장 |
레지스터 리네이밍은 논리 레지스터를 물리 레지스터에 동적으로 매핑해 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% |
분기 타겟 버퍼(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를 가능하게 하며, 시스템 프로그래머가 하드웨어 성능을 활용하려면 그 동작 원리를 이해할 필요가 있다.