Compiler Support for Speculation in Decoupled Access/Execute Architectures
Robert Szafarczyk, Syed Waqar Nabi, Wim Vanderbauwhede
TL;DR
This work tackles the loss of decoupling in decoupled access/execute (DAE) architectures caused by control dependencies on memory accesses. It introduces compiler based speculation that hoists memory requests in the address generation slice and poisons mis speculations in the compute slice, backed by proofs of sequential consistency. The method handles reducible control flow by leveraging topological order and a rigorous mapping between CFG edges and blocks, enabling DAE for irregular workloads across CPUs, GPUs, CGRAs, and HLS accelerators. Evaluation on HLS generated accelerators for graph and data analytics demonstrates average speedups around 1.9x (up to 3x) with minimal area overhead and no mis speculations, highlighting practical impact for accelerator design targeting irregular patterns.
Abstract
Irregular codes are bottlenecked by memory and communication latency. Decoupled access/execute (DAE) is a common technique to tackle this problem. It relies on the compiler to separate memory address generation from the rest of the program, however, such a separation is not always possible due to control and data dependencies between the access and execute slices, resulting in a loss of decoupling. In this paper, we present compiler support for speculation in DAE architectures that preserves decoupling in the face of control dependencies. We speculate memory requests in the access slice and poison mis-speculations in the execute slice without the need for replays or synchronization. Our transformation works on arbitrary, reducible control flow and is proven to preserve sequential consistency. We show that our approach applies to a wide range of architectural work on CPU/GPU prefetchers, CGRAs, and accelerators, enabling DAE on a wider range of codes than before.
