Skip to content
DenseChip
Learn
PracticeCode labInterview

DenseChip

Navigate

Menu

LearnPracticeCode labInterview

Tools

All toolsSV editorCode repoResume
DenseChip

Practice, courses, and chip-design tools in one focused workspace.

LearnPracticeCode labInterviewToolsLearning paths

© 2026 DenseChip

AboutContactPrivacyTerms
Skip to lesson

Course contents

  • Architecture Metrics Reference
  • Workload Taxonomy for Architects
  • Architecture Glossary
  • Computer Architecture Cheatsheet
  • Pipeline Fundamentals14
    • Pipeline Throughput
    • Branch Prediction and Fetch
    • Out-of-Order Superscalar Execution
      • Superscalar Issue Width
      • In-Order Versus Out-of-Order
      • Register Renaming
      • Reorder Buffer and Commit
      • Why IPC Saturates
  • Memory Hierarchy15
  • NoC and Interconnect Architecture6
  • Coherency and Memory Ordering9
  • Performance Analysis9
  • Accelerator Architectures6
  • SoC Architecture Tradeoffs9
  • Architecture Interview Prep14
Loading lesson

‹Out-of-Order Superscalar Execution
  1. Topics
  2. Computer Architecture
  3. Pipeline Fundamentals
  4. Out-of-Order Superscalar Execution
  5. In-Order Versus Out-of-Order

Computer Architecture · All levels

In-Order Versus Out-of-Order

In-order stalls on the next dependency, while out-of-order works around it.

On this page

    In-order stops at the stall

    An in-order core issues strictly in program order. When the next instruction waits on an unready operand, every later instruction waits behind it, even independent ones.

    This head-of-line blocking is simple to build and verify. Its cost is idle issue slots behind every exposed latency.

    Out-of-order works around it

    An out-of-order core issues any ready instruction from its window. Independent work flows past the stall, and true dependencies still wait for their operands.

    Consider single-issue cores with ALU latency 1 and load latency 3, on this sequence: LD r1, then ADD r2 from r1, then independent ADD r3, then MUL r6 from r3.

    Diagram
    in-order, single issue (result usable N cycles after issue; LD 3, ALU 1)
    cycle 1: issue LD          (r1 ready end of cycle 3)
    cycle 2: stall             (ADD r2 waits on r1)
    cycle 3: stall             (ADD r2 waits on r1)
    cycle 4: issue ADD r2
    cycle 5: issue ADD r3      (r3 ready end of cycle 5)
    cycle 6: issue MUL r6
    total 6 cycles for 4 instructions -> IPC = 4 / 6 = 0.67
    
    out-of-order on the same sequence
    cycle 1: issue LD          (r1 ready end of cycle 3)
    cycle 2: issue ADD r3      (independent; r3 ready end of cycle 2)
    cycle 3: issue MUL r6      (r3 ready; ADD r2 still waits on r1)
    cycle 4: issue ADD r2      (r1 ready)
    total 4 cycles for 4 instructions -> IPC = 4 / 4 = 1.0

    In-order

    Out-of-order

    Issue rule

    Program order only

    Any ready instruction in the window

    Independent work behind a stall

    Waits

    Issues past the stall

    True dependency latency

    Paid in full, plus blocking

    Paid in full, without blocking others

    Hardware cost

    Scoreboard or stall logic

    Window, wakeup, select, reorder buffer

    Commit stays in order

    Execution order is invisible to software. Both designs commit results in program order, so interrupts and exceptions stay precise.

    The reorder buffer is the mechanism. A later lesson covers it in full.

    Common mistakes

    Common pitfall

    Believing out-of-order execution removes dependency latency. It hides latency behind other work but the dependent instruction still waits the full producer delay.

    Interview

    Likely probes: head-of-line blocking and precise state.

    • In-order pays every exposed latency plus the blocking of followers.

    • Out-of-order needs in-order commit to keep precise exceptions.

    • The win is bounded by how much independent work the window holds.

    Check yourself In the worked example, which instruction pair is the true dependency that neither design can shorten?

    ADD r2 on the LD through r1: the 3-cycle load latency is paid by both designs.

    Check yourself The MUL issues in cycle 6 in-order but cycle 3 out-of-order. What changed for it?

    Nothing about its own dependency: its operand r3 was ready earlier, and out-of-order issue let it pass the stalled ADD r2.

    Related topics

    • Superscalar issue width

    • Register renaming

    • Reorder buffer and commit

    • Out-of-order core implementation

    Previous

    15 / 86

    Next: Register Renaming

    Up next

    Up nextRegister Renaming

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Reorder Buffer and Commit
    • Why IPC Saturates