title: 슈퍼스칼라/와이드 이슈
date: 2025-06-26
category: arch
tags: [superscalar, wide-issue, instruction-level-parallelism, register-renaming, out-of-order]
슈퍼스칼라/와이드 이슈 (Superscalar/Wide-Issue)
개요
슈퍼스칼라 프로세서(Superscalar Processor)는 단일 프로세서 코어 내에서 명령어 수준 병렬성(Instruction-Level Parallelism, ILP)을 활용하여 클럭당 복수의 명령어를 동시에 실행하는 CPU 아키텍처이다. Scalar 프로세서가 클럭당 최대 1개의 명령어를 완료하는 것과 달리, 슈퍼스칼라 프로세서는 여러 실행 유닛에 복수의 명령어를 동시에 발행하거나 동시 진행시켜 처리량(throughput)을 높인다. 이를 통해 파이프라인의 유휴 시간을 최소화하고 IPC(Instructions Per Cycle)를 증가시킨다.
와이드 이슈(Wide-Issue)는 보통 프런트엔드의 decode 폭, rename/allocate 폭, 스케줄러가 실행 유닛으로 내보내는 issue 폭을 묶어 가리키는 실무 용어로 쓰인다. 다만 실제 제품 문서는 decode width, dispatch/allocate width, execution width, retirement width를 따로 공개하는 경우가 많다. 1990년대의 2-wide x86에서 출발해 현대 코어는 4~6-wide급 프런트엔드와 더 넓은 백엔드 자원을 조합하는 방향으로 발전했지만, 폭이 넓어질수록 의존성 검사, 레지스터 파일 포트, 바이패스 네트워크의 복잡도가 빠르게 증가하므로 실질적인 성능 향상은 수확체감(diminishing returns)을 보인다.
핵심 개념
Scalar/Pipelined/Superscalar 비교
| 특성 | Scalar | Pipelined | Superscalar |
|---|---|---|---|
| 클럭당 명령어 | 1개 | 1개 (파이프라인 겹침) | N개 (N-wide) |
| 실행 병렬성 | 없음 | 파이프라인 단계별 겹침 | 여러 실행 유닛 동시 사용 |
| 의존성 처리 | 정지(Stall) | 정지 + 포워딩 | 동적 분석 + 재ordering |
| 복잡도 | 낮음 | 중간 | 높음 |
| 대표 프로세서 | ARM Cortex-M | ARM Cortex-A7 | Intel Golden Cove, AMD Zen 5 |
Scalar 프로세서는 각 명령어가 클럭당 하나의 데이터 항목을 처리하며 한 번에 하나의 명령어만 실행한다. Pipelined 프로세서는 명령어 실행을 여러 단계로 분할하여 한 명령어가 Execute 단계에 있을 때 다음 명령어가 Decode 단계에 있도록 겹침 실행하지만, 여전히 클럭당 하나의 명령어만 완료된다. 슈퍼스칼라 프로세서는 여러 개의 독립적인 파이프라인을 동시에 운영하여 클럭당 복수의 명령어를 완료할 수 있다.
대표적인 폭 계열
| 분류 | 대표 폭 | 대표 프로세서 | 비고 |
|---|---|---|---|
| 2-wide | 2-wide decode/issue | Intel P5 Pentium, ARM Cortex-A9 | 초기 상용 슈퍼스칼라 |
| 3-wide | 3-wide dispatch 계열 | Intel P6 Pentium Pro | Out-of-Order 대중화 시작 |
| 4-wide | 4-wide decode 계열 | Intel Core 2, AMD Zen | 범용 고성능 코어의 기준선 |
| 6-wide | 6-wide allocate 또는 decode 계열 | Intel Sandy Bridge 계열, Golden Cove | 프런트엔드 대역폭 확대 |
| 8-wide+ | 8-wide 이상 백엔드/실행 자원 | Apple Firestorm, 일부 서버/가속 지향 코어 | 프런트엔드와 백엔드 폭이 항상 같지는 않음 |
Issue Width vs Execution Width vs Retirement Width
슈퍼스칼라 프로세서에서는 여러 종류의 "폭(width)" 개념이 존재한다:
- Decode Width (디코드 폭): 클럭당 디코드할 수 있는 명령어 또는 μop 수. 프런트엔드의 대역폭을 보여준다.
- Allocate/Dispatch Width (할당 폭): 클럭당 ROB, 물리적 레지스터, 큐 엔트리를 몇 개나 배정할 수 있는지 나타낸다.
- Issue Width (발행 폭): 리저버베이션 스테이션 또는 issue queue가 실행 유닛으로 내보낼 수 있는 최대 μop 수다.
- Execution Width (실행 폭): 클럭당 실제로 동시에 실행될 수 있는 연산 수. 실행 유닛의 수와 유형에 의해 결정된다.
- Retirement Width (커밋 폭): 클럭당 프로그램 순서대로 상태를 확정(commit)할 수 있는 최대 명령어 수. ROB의 커밋 대역폭과 관련된다.
실제 코어는 이 폭들이 서로 다르며, 제품 소개 자료에서 말하는 "N-wide"가 정확히 어느 폭인지는 문맥을 확인해야 한다. 일반적으로는 백엔드 실행 자원이 프런트엔드보다 넓게 설계되기도 하고, retire 폭은 정확성 보장을 위해 별도 한계로 관리된다.
슈퍼스칼라 파이프라인 단계
현대 슈퍼스칼라 프로세서의 일반적인 파이프라인 단계는 다음과 같다:
Fetch → Decode → Rename/Allocate → Dispatch → Issue → Execute → Writeback → Retire
-
Instruction Fetch (명령어 인출): I-Cache에서 명령어를 읽고, 분기 예측기를 사용하여 다음 fetch 주소를 결정한다. 클럭당 여러 명령어를 동시에 fetch한다 (N-wide fetch).
-
Instruction Decode (명령어 디코딩): CISC(x86)의 경우 복잡한 명령어를 내부 마이크로 연산(micro-ops, μops)으로 변환한다. RISC의 경우 비교적 단순한 디코딩이 필요하다.
-
Register Rename (레지스터 이름 변경): ISA에 정의된 아키텍처 레지스터(architectural register)를 물리적 레지스터(physical register)로 매핑하여 WAW/WAR 의존성을 제거한다.
-
Allocate/Dispatch (할당/배정): ROB 엔트리 할당, 리저버베이션 스테이션 또는 명령어 큐에 명령어를 배정한다.
-
Issue (발행): 리저버베이션 스테이션에서 피연산자가 준비된 명령어를 실행 유닛으로 전달한다. Out-of-Order issue가 가능하다.
-
Execute (실행): ALU, FPU, Load/Store 유닛 등에서 실제 연산을 수행한다.
-
Writeback (결과 기록): 실행 결과를 물리적 레지스터 파일에 기록하고, 바이패스 네트워크를 통해 다른 명령어의 피연산자로 즉시 전달한다.
-
Retire/Commit (커밋): ROB에서 프로그램 순서대로 명령어를 확정하고, 아키텍처 상태를 업데이트한다.
의존성 검사 로직
슈퍼스칼라 프로세서에서 명령어 간 의존성을 검사하는 로직은 복잡도가 issue width의 제곱에 비례한다.
의존성 유형:
- RAW (Read-After-Write): True dependency. 한 명령어가 이전 명령어의 결과를 읽어야 한다. 해결: 피연산자 포워딩, 정지.
- WAW (Write-After-Write): Output dependency. 두 명령어가 같은 레지스터에 쓰는 경우. 해결: 레지스터 리네이밍, ROB에서 순서대로 커밋.
- WAR (Write-After-Read): Anti-dependency. 한 명령어가 읽기 전에 다른 명령어가 같은 레지스터에 쓰는 경우. 해결: 레지스터 리네이밍.
N-wide 프로세서에서 매 클럭 N개의 명령어 쌍에 대한 의존성을 검사해야 하므로, 복잡도는 O(N²)으로 증가한다. 이것이 슈퍼스칼라의 실질적인 issue width를 제한하는 핵심 요인 중 하나이다.
레지스터 파일 포트 요구 사항
슈퍼스칼라 프로세서는 매 클럭 복수의 명령어를 동시에 읽고 써야 하므로 레지스터 파일에 많은 포트가 필요하다.
| Issue Width | 읽기 포트 | 쓰기 포트 | 비고 |
|---|---|---|---|
| 4-wide | 8 | 4 | 최소 요구 사항 |
| 6-wide | 12 | 6 | 현대 프로세서 수준 |
| 8-wide | 16 | 8 | 고성능 프로세서 |
포트 수가 증가하면 레지스터 파일의 면적과 전력 소모가 제곱에 비례하여 증가하고, 타이밍 경로(timing path)가 길어져 클럭 주기 증가 가능성도 발생한다. 물리적 레지스터 파일의 포트 수 제한이 issue width의 실제 한계점이 된다.
의존성 검사 O(N²) 복잡도
| 자원 | O(N²) 성장 |
|---|---|
| 의존성 검사 로직 | 매 클럭 N개 명령어 쌍 검사 |
| 레지스터 파일 포트 | N-wide: 2N 읽기 + N 쓰기 포트 |
| 이슈/셀렉트 로직 | 복수의 ready 명령어 선택 인코더 |
| 바이패스 네트워크 | N개 실행 유닛 간 결과 전달 |
복잡도 증가의 실질적 영향:
- 클럭 주기 증가 (타이밍 경로 길어짐)
- 칩 면적 증가
- 설계 검증 시간 증가
비교/분석
슈퍼스칼라 프로세서 구현 비교
| 프로세서 | 연도 | Decode/Allocate 폭 | Retire 폭 | ROB 크기 | 실행 유닛 | 파이프라인 단계 | 특징 |
|---|---|---|---|---|---|---|---|
| Intel P5 Pentium | 1993 | 2 / 2 | 순차 완료 | N/A | 2 (U, V) | 5 | 최초 x86 슈퍼스칼라 |
| Intel P6 Pentium Pro | 1995 | 3 / 3 | 3 | 40 | 5 | 14 | OoO 첫 적용 |
| Intel Core 2 | 2006 | 4 / 4 | 4 | 96-128 | 6 | 14 | 매크로 퓨전 |
| Intel Sandy Bridge | 2011 | 4 / 4 | 4 | 168 | 6+ | 14-19 | μop cache, μop 퓨전 |
| Intel Haswell | 2013 | 4 / 4 | 4 | 192 | 8 | 14-19 | AVX2, 포트 구조 확장 |
| Intel Skylake | 2015 | 4 / 4 | 4 | 224 | 8 | 14-19 | 개선된 예측기 |
| Intel Golden Cove | 2021 | 6 / 6 | 6 | 512 | 12 | 14-20+ | 넓어진 프런트엔드 |
| AMD Zen | 2017 | 4 / 6 dispatch | 8 | 192 | 6 | 19 | SMT 2-way |
| AMD Zen 2 | 2019 | 4 / 6 dispatch | 8 | 224 | 6+ | 19 | 칩렛, 7nm |
| AMD Zen 3 | 2020 | 4 / 6 dispatch | 8 | 256 | 6+ | 19 | 통합 CCX |
| AMD Zen 4 | 2022 | 4 / 6 dispatch | 8 | 320 | 6+ | 19 | 5nm, AVX-512 |
| AMD Zen 5 | 2024 | 4-wide decode + 강화된 병렬 처리 | 8 | 448 | 8+ | 19 | 프런트엔드/백엔드 처리량 개선 |
Superscalar vs VLIW 비교
| 특성 | Superscalar | VLIW |
|---|---|---|
| 의존성 검사 | 하드웨어 (런타임) | 컴파일러 (컴파일 타임) |
| 코드 밀도 | 높음 | 낮음 (NOP 패딩) |
| 유연성 | 높음 (동적) | 낮음 (정적) |
| 전력 효율 | 낮음 | 높음 |
| 복잡도 | 하드웨어 복잡 | 소프트웨어 복잡 |
| 대표 | Intel, AMD, ARM | Intel Itanium (EPIC), TI DSP |
슈퍼스칼라는 하드웨어가 런타임에 명령어 간 의존성을 분석하여 병렬 실행할 명령어를 동적으로 결정한다. 반면 VLIW는 컴파일러가 컴파일 타임에 병렬 실행할 명령어를 정적으로 결정하여 하나의 긴 명령어 워드에 여러 연산을 패킹한다. VLIW는 하드웨어가 단순하고 전력 효율적이지만, 코드 밀도 저하(NOP 패딩), 컴파일러 의존성, 런타임 적응력 부족이라는 단점이 있다.
수확체감 (Diminishing Returns)
8-wide 프로세서의 이론적 최대 IPC는 8이지만, 실제 일반 워크로드에서 IPC 4-6을 달성하기도 어렵다. 그 이유는:
- 데이터 의존성: 프로그램 내 명령어 간 의존성이 병렬성을 제한한다.
- 분기 의존성: 분기 예측 실패 시 파이프라인 flush 비용이 issue width에 비례하여 증가한다.
- 메모리 의존성: L3 cache miss 시 수백 클럭 대기하며, Address aliasing 불확실성이 메모리 의존성 분석을 어렵게 한다.
- ILP_WALL: 프로그램의 본질적 병렬성이 제한되어 있어, wider issue일수록 추가 성능 향상이 작아진다.
분기 예측 실패 비용 계산:
비용 = Issue Width × 파이프라인 깊이 × 클럭 주기
현대 프로세서의 분기 예측 정확도는 95-99%이나, 나머지 1-5%가 성능에 큰 영향을 미친다.
동작 원리
슈퍼스칼라 명령어 처리 흐름
슈퍼스칼라 프로세서는 클럭당 복수의 명령어를 처리하기 위해 다음과 같은 하드웨어 구조를 필요로 한다:
프런트엔드 (Front-end):
- N-wide instruction fetch 유닛
- 멀티 워드 디코더 (CISC의 경우 μops로 변환)
- 분기 예측기 (TAGE, perceptron 등)
백엔드 (Back-end):
- 물리적 레지스터 파일 (포트 수 = 2N 읽기 + N 쓰기)
- N개의 리네이밍 포트
- ROB (Reorder Buffer)
- 리저버베이션 스테이션 또는 명령어 큐
- N개 이상의 실행 유닛
- N-wide 바이패스 네트워크
- N-wide 커밋 로직
레지스터 리네이밍 동작 방식
레지스터 리네이밍은 두 가지 주요 방식으로 구현된다:
태그 인덱스 방식 (Tag-indexed Register File):
- 큰 중앙 물리적 레지스터 파일 사용
- 모든 결과가 하나의 파일에 저장
- 예: MIPS R10000, Alpha 21264
리저버베이션 스테이션 방식 (Reservation Station-based):
- 각 실행 유닛 옆에 작은 어소시에이티브 레지스터 파일 배치
- 값이 직접 리저버베이션 스테이션에 저장됨
- 예: AMD K7/K8, Intel P6
물리적 레지스터 수는 아키텍처 레지스터보다 훨씬 많다. 예를 들어 Intel P6는 128개의 물리적 integer 레지스터를 가지는 반면, x86 ISA는 16개의 아키텍처 레지스터만 정의한다.
레지스터 파일 포트 요구 상세
N-wide 슈퍼스칼라 프로세서에서 레지스터 파일에 필요한 포트 수:
- 읽기 포트: 최소 2N개 (피연산자 A, B 각각 N개)
- 쓰기 포트: 최소 N개 (결과 N개)
- 총 포트 수: 3N개
포트 수 증가에 따른 영향:
- 면적: 포트 수에 제곱에 비례
- 전력: 액티브 트랜지스터 수에 비례
- 타이밍: 포트 간 간섭으로 critical path 증가
장단점
장점
-
성능 향상: 클럭당 여러 명령어를 동시에 실행하여 IPC(Instructions Per Cycle) 증가. 이론적으로 N-wide 프로세서는 최대 N배의 성능 향상을 기대할 수 있다.
-
기존 코드 호환: 소프트웨어 변경 없이 하드웨어 수준에서 성능 향상이 가능하다. 기존 바이너리 코드도 그대로 실행된다.
-
메모리 병목 완화: Out-of-Order 실행과 결합하여 메모리 대기 시간 동안 다른 명령어를 실행할 수 있다.
-
파이프라인 효율: 분기 stalls 및 data hazards로 인한 유휴 시간을 최소화한다.
-
유연성: 다양한 워크로드에 적응 가능하며, 동적 스케줄링을 통해 최적의 실행 순서를 결정한다.
단점
-
하드웨어 복잡도 증가: 의존성 검사, 레지스터 리네이밍, Out-of-Order 로직의 복잡도가 issue width의 제곱에 비례하여 증가한다.
-
전력 소모 증가: 복잡한 제어 로직과 추가 레지스터로 인한 전력 소비가 높다. 클럭 주기와 issue width를 동시에 높이기 어려운 power wall이 존재한다.
-
설계 난이도: 검증 및 타이밍 closure가 어렵다. 복잡한 로직이 critical path에 포함되어 클럭 주기 증가 가능성이 있다.
-
수확체감: Issue width를 넓힐수록 추가 성능 향상이 감소한다. 8-wide 프로세서의 실제 IPC는 이론적 최대치(8)에 훨씬 못 미친다.
-
면적 비용: 더 많은 실행 유닛, 큰 레지스터 파일, 복잡한 로직으로 인한 칩 면적 확대가 발생한다.
현대 프로세서의 대응 전략
슈퍼스칼라의 수확체감 문제에 대한 현대 프로세서의 대응 전략:
- 멀티코어: 단일 코어의 issue width 확대 대신 여러 코어를 통합하는 방식으로 전환
- SMT (Simultaneous Multithreading): 슈퍼스칼라 파이프라인의 자원을 여러 스레드가 공유하여 활용도를 높임
- 도메인 특화 가속기: AI/ML 가속기 등 특정 워크로드에 최적화된 유닛 통합
- 메모리 기술 발전: HBM, 3D V-Cache 등 메모리 대역폭과 용량 개선으로 메모리 병목 완화
관련 기술
참고 문헌 및 논문
-
Hennessy, J.L. & Patterson, D.A. - Computer Architecture: A Quantitative Approach (6th ed.). Morgan Kaufmann.
- 슈퍼스칼라 및 ILP에 대한 가장 권위 있는 교과서. 제3장: Instruction-Level Parallelism and Its Exploitation. -
Smith, J.E. & Sohi, G.S. - "The Microarchitecture of Superscalar Processors." Proceedings of the IEEE, Vol. 83, No. 12, 1995.
- 슈퍼스칼라 프로세서의 마이크로아키텍처에 대한 포괄적 논문. -
Johnson, M. - Superscalar Microprocessor Design. Prentice-Hall, 1991.
- 슈퍼스칼라 프로세서 설계에 대한 최초의 포괄적 저서. -
Tomasulo, R.M. - "An Efficient Algorithm for Exploiting Multiple Arithmetic Units." IBM Journal of Research and Development, Vol. 11, No. 1, 1967.
- Out-of-Order 실행과 레지스터 리네이밍의 기초가 된 알고리즘. -
Mudge, T. - "The Microarchitecture of Superscalar Processors." Proceedings of the IEEE, 2004.
- 슈퍼스칼라 프로세서의 마이크로아키텍처 분석.
공식 문서
- Intel 64 and IA-32 Architectures Optimization Reference Manual - 최신 Intel 프로세서의 마이크로아키텍처 상세 설명.
- AMD Family 19h (Zen 3/4/5) Architecture Reference Manual - AMD Zen 아키텍처의 상세 설계 문서.
- Intel Architecture Instruction Set Extensions and Future Features Reference Manual - SIMD 명령어 확장.
관련 기술 문서
- CPU 마이크로아키텍처 기초: 파이프라인, 스테이지, IPC 등 기본 개념
- 분기 예측: 슈퍼스칼라 프로세서의 분기 예측 기술
- Out-of-Order 실행: 슈퍼스칼라와 밀접하게 관련된 Out-of-Order 실행 기술
- 슈퍼스칼라/와이드 이슈: 본 문서
관련 기술 분야
- Out-of-Order 실행: 프로그램 순서와 달리 실행 가능한 명령어를 먼저 실행하는 기법
- VLIW (Very Long Instruction Word): 컴파일러가 병렬 실행 명령어를 정적으로 결정하는 아키텍처
- SIMD 통합: 하나의 명령어로 복수의 데이터를 처리하는 기술과의 통합
- SMT (Simultaneous Multithreading): 슈퍼스칼라 파이프라인의 자원을 여러 스레드가 공유하는 기술
핵심 정리
-
슈퍼스칼라 프로세서는 클럭당 복수의 명령어를 동시에 실행하여 IPC를 증가시키는 아키텍처이며, Issue Width에 따라 2-wide에서 8-wide+까지 분류된다.
-
의존성 검사 로직의 복잡도가 O(N²)으로 증가하고, 레지스터 파일 포트 수 요구 사항이 늘어나는 것이 issue width의 실질적인 한계를 만든다.
-
현대 프로세서는 Intel Golden Cove의 6-wide decode, AMD Zen 5의 2x throughput 등 지속적으로 발전하고 있으나, 수확체감으로 인해 멀티코어/SMT 중심 설계로 전환되는 추세이다.
-
슈퍼스칼라와 VLIW의 비교에서, 슈퍼스칼라는 하드웨어 동적 스케줄링에 의해 유연하지만 복잡하고 전력 효율이 낮은 반면, VLIW는 컴파일러 정적 스케줄링에 의해 단순하고 전력 효율적이지만 런타임 적응력이 부족하다.
-
슈퍼스칼라의 수확체감 문제를 해결하기 위해 현대 프로세서는 멀티코어, SMT, 도메인 특화 가속기, 메모리 기술 발전 등의 전략을 병행하고 있다.