Execution Dependence Extension (EDE): ISA Support For Eliminating Fences

A proposed Execution Dependence Extension (EDE) allows execution dependences to be encoded in an ISA, which currently requires a workaround.


Fence instructions are a coarse-grained mechanism to enforce the order of instruction execution in an out-of-order pipeline. They are an overkill for cases when only one instruction must wait for the completion of one other instruction. For example, this is the case when performing undo logging in Non-Volatile Memory (NVM) systems: while the update of a variable needs to wait until the corresponding undo log entry is persisted, all other instructions can be reordered. Unfortunately, current ISAs do not provide a way to describe such an execution dependence between two instructions that have no register or memory dependences. As a result, programmers must place fences, which unnecessarily serialize many unrelated instructions. To remedy this limitation, we propose an ISA extension capable of describing these execution dependences. We call the proposal Execution Dependence Extension (EDE), and add it to Arm’s AArch64 ISA. We also present two hardware realizations of EDE that enforce execution dependences at different stages of the pipeline: one in the issue queue (IQ) and another in the write buffer (WB). We implement IQ and WB in a simulator and test them with several NVM applications. Overall, by using EDE with IQ and WB rather than fences, we attain average workload speedups of 18% and 26%, respectively

Thomas Shull*, Ilias Vougioukas†, Nikos Nikoleris†, Wendy Elsasser†, Josep Torrellas‡
*Oracle Labs§ †Arm Research ‡University of Illinois at Urbana-Champaign

Click here to access the paper.

Leave a Reply

(Note: This name will be displayed publicly)