Lesson 14--Framework for Parallelizing Load-Stores Flashcards
X-Y memory architecture
There are two parallel banks of memory. Each has its own address calculator and its own bus.
Edge between two variables in the same memory bank
0
Edge between two variables in different memory banks
1
Motion Schedule Graph (MSG)
Graph to determine which loads and stores can be moved
Rematerialization
Recomputing a value and storing it in another bank
Motion Range Determination
The interval between program points where a load/store can be legally moved, restrained by dependencies
Pseudo fixed-boundary
For Store: move as early as possible, assuming other instructions are fixed.
For Load: Move as late as possible, assuming other instructions are fixed.
Cross basic block merge
–To guarantee profitability: move to where the reference is live. If the reference is not live,
all we do is increase register pressure causing more spills
–Move the stores using the extended basic blocks
–Move the loads on reverse Extended basic blocks
–Make sure: if moving load/stores in basic blocks that we are able to combine them with something else. So make sure it can be combined if pushed to at least one of the live predecessors/successors.
Variable duplication
Adding stores for a variable to a different bank in order to take advantage of parallelization