Beating In-Order Stalls with "Flea-Flicker" Two-Pass Pipelining

  • Authors:
  • Ronald D. Barnes;John W. Sias;Erik M. Nystrom;Sanjay J. Patel;Jose (Nacho) Navarro;Wen-mei W. Hwu

  • Affiliations:
  • IEEE;IEEE;IEEE;IEEE;IEEE;IEEE

  • Venue:
  • IEEE Transactions on Computers
  • Year:
  • 2006

Quantified Score

Hi-index 14.98

Visualization

Abstract

While compilers have generally proven adept at planning useful static instruction-level parallelism for in-order microarchitectures, the efficient accommodation of unanticipable latencies, like those of load instructions, remains a vexing problem. Traditional out-of-order execution hides some of these latencies, but repeats scheduling work already done by the compiler and adds additional pipeline overhead. Other techniques, such as prefetching and multithreading, can hide some anticipable, long-latency misses, but not the shorter, more diffuse stalls due to difficult-to-anticipate, first or second-level misses. Our work proposes a microarchitectural technique, two-pass pipelining, whereby the program executes on two in-order back-end pipelines coupled by a queue. The "advance” pipeline often defers instructions dispatching with unready operands rather than stalling. The "backup” pipeline allows concurrent resolution of instructions deferred by the first pipeline allowing overlapping of useful "advanced” execution with miss resolution. An accompanying compiler technique and instruction marking further enhance the handling of miss latencies. Applying our technique to an Itanium 2-like design achieves a speedup of 1.38\times in mcf, the most memory-intensive SPECint2000 benchmark, and an average of 1.12\times across other selected benchmarks, yielding between 32 percent and 67 percent of an idealized out-of-order design's speedup at a much lower design cost and complexity.