COA Notes
Superscalar processor design with multiple issue, dynamic scheduling, and instruction-level parallelism.
Introduction
A superscalar processor can issue and execute multiple instructions in a single clock cycle. While a basic pipelined processor completes at most one instruction per cycle (CPI = 1), a superscalar processor achieves CPI < 1 (or equivalently, IPC > 1). Your laptop's CPU is superscalar — it can execute 4-6 instructions every single clock cycle when conditions are favorable. This page explains how superscalar processors extract instruction-level parallelism from sequential programs.
From Scalar to Superscalar
| Cycle | 1 2 3 4 5 6 7 |
| I1 | IF ID EX MEM WB |
| I2 | IF ID EX MEM WB |
| I3 | IF ID EX MEM WB |
| Throughput | 1 instruction per cycle |
| Cycle | 1 2 3 4 5 6 |
| I1,I2 | IF ID EX MEM WB |
| I3,I4 | IF ID EX MEM WB |
| I5,I6 | IF ID EX MEM WB |
| Throughput | 2 instructions per cycle (ideal) |
Issue Width
Modern superscalar processors:
- Intel Golden Cove: 6-wide (6 micro-ops per cycle)
- AMD Zen 4: 6-wide
- Apple M3 Firestorm: 8-wide
- ARM Cortex-X4: 10-wide decode, 6-wide rename
Requirements for Superscalar Execution
1. Multiple Fetch
Fetch multiple instructions per cycle from instruction cache (typically 32 bytes = 8 MIPS instructions or 2-8 x86 instructions).
2. Multiple Decode
Decode all fetched instructions in parallel. For RISC (fixed-length), this is straightforward. For x86 (variable-length), this requires complex logic to find instruction boundaries.
3. Dependency Checking
Before issuing multiple instructions together, hardware must verify no dependencies between them:
Can issue together (independent)
ADD R1, R2, R3
SUB R4, R5, R6 ← No shared registers with ADD
Cannot issue together (dependent)
ADD R1, R2, R3
SUB R4, R1, R6 ← Needs R1 from ADD (RAW hazard)
4. Multiple Execution Units
Need parallel hardware to actually execute multiple instructions:
| │ ALU 1 | Integer add/sub/logic │ |
| │ ALU 2 | Integer add/sub/logic │ |
| │ MUL | Integer/FP multiply │ |
| │ Load Unit | Memory read │ |
| │ Store Unit | Memory write │ |
| │ Branch Unit | Branch resolution │ |
| │ FP Unit | Floating-point add │ |
5. Multiple Write-Back
The register file needs multiple write ports to accept results from multiple execution units simultaneously.
Static vs Dynamic Superscalar
Static (In-Order Issue)
Hardware issues instructions in program order, limited by dependencies:
| I1 | ADD R1, R2, R3 ─┐ |
| I2 | SUB R4, R1, R5 │ Cannot issue together (I2 depends on I1) |
| I3 | MUL R6, R7, R8 ─┘ I1 and I3 could issue together! |
In-order superscalar may issue I1+I3 but not I1+I2. Simple but misses opportunities.
Dynamic (Out-of-Order Issue)
Hardware reorders instructions to find independent ones:
| Original order | Issued order (2-wide): |
| I1 | ADD R1, R2, R3 Cycle 1: I1 + I3 (independent!) |
| I2 | SUB R4, R1, R5 Cycle 2: I2 + I4 (I2 waits for I1 via forwarding) |
| I3 | MUL R6, R7, R8 |
| I4 | AND R9, R10, R11 |
Dynamic scheduling (Tomasulo's algorithm, reservation stations) enables this reordering.
Instruction-Level Parallelism (ILP)
ILP is the amount of parallelism available in a program:
| I1 | LD R1, A ─┐ |
| I2 | LD R2, B │ All four loads are independent |
| I3 | LD R3, C │ ILP = 4 (can all execute in parallel) |
| I4 | LD R4, D ─┘ |
| I5 | ADD R5, R1, R2 ─┐ Depends on I1, I2 |
| I6 | ADD R6, R3, R4 │ Depends on I3, I4 |
| I7 | MUL R7, R5, R6 ─┘ Depends on I5, I6. ILP = 1 |
Average ILP determines how much a superscalar processor can extract.
Typical ILP Available
| Program Type | Available ILP |
|---|---|
| Integer (general) | 2-4 |
| Floating-point (scientific) | 4-8 |
| Multimedia/SIMD | 8-16+ |
| Conditional heavy (branching) | 1-2 |
Limits to Superscalar Performance
True Data Dependencies
Cannot execute instruction until its inputs are ready. Limits parallelism.
Control Dependencies
Branches create uncertainty — cannot issue past a branch until it resolves (mitigated by prediction).
Resource Conflicts
Only so many ALUs, load units, etc. Two instructions needing the same unit cannot execute simultaneously.
Window Size
Larger instruction window → more opportunity to find parallel instructions → but more complex hardware.
Diminishing Returns
Going from 1-wide to 2-wide: ~40% speedup Going from 2-wide to 4-wide: ~25% speedup Going from 4-wide to 8-wide: ~10% speedup (Amdahl's Law at the instruction level — sequential dependencies limit gains)
Real-World Superscalar Performance
Modern CPUs achieve IPC of 4-6 on favorable code:
Intel Core i9 (Golden Cove)
- 6-wide rename/allocate
- Up to 12 execution ports
- 512-entry ROB (instruction window)
- Practical IPC: 4-6 on integer, 3-4 on FP
Apple M3 (Firestorm core)
- 8-wide decode
- 192-entry ROB
- Practical IPC: 5-7 on optimized code
Key Takeaways
- Superscalar processors issue multiple instructions per cycle, achieving CPI < 1 (IPC > 1)
- Requirements: multiple fetch, decode, dependency checking, execution units, and register file ports
- Dynamic (out-of-order) scheduling finds more parallelism than static (in-order) by reordering instructions
- Available ILP is program-dependent — scientific code has more parallelism than branch-heavy integer code
- Diminishing returns limit practical issue width to 4-8 — wider machines find less additional parallelism
- Modern desktop CPUs achieve IPC of 4-6, meaning they effectively complete 4-6 instructions every nanosecond-scale clock cycle
Exam Focus
Revise definitions, diagrams, examples, and short-answer points for Superscalar Architecture.
Interview Use
Prepare one clear explanation, one practical example, and one common mistake for this Computer Organization & Architecture topic.
Search Terms
computer-organization, computer organization & architecture, computer, organization, parallel, processing, superscalar, architecture
Related Computer Organization & Architecture Topics