EECS 583 Homework 1: Heuristic Hyperblock Formation Algorithm - Prof. Scott Mahlke, Assignments of Electrical and Electronics Engineering

A homework assignment for eecs 583 students in which they are tasked with implementing a heuristic hyperblock formation algorithm for selective if-conversion of inner-most loops. The assignment includes instructions for loop detection, backedge coalescing, block selection, tail duplication, and if-conversion. Students are encouraged to be creative with their block selection heuristic and are provided with resources such as control flow profile information, dependence height, and resource minimum schedule length.

Typology: Assignments

Pre 2010

Uploaded on 09/02/2009

koofers-user-v02
koofers-user-v02 🇺🇸

10 documents

1 / 2

Toggle sidebar

This page cannot be seen from the preview

Don't miss anything!

bg1
EECS 583 – Homework 1
Winter 2005
Assigned: Monday, January 24, 2005
Due: Wednesday, February 9, 2005
The goal for this homework is to implement a heuristic hyperblock formation algorithm
that performs selective if-conversion for inner-most loops. On the surface, this requires a
large amount of code to accomplish this task. However, the bulk of the code will be
provided to you (tail duplication, if-conversion). Your main task is to first implement a
simple control flow optimization, backedge coalescing, to convert any multi-backedge
loop into a single backedge loop. Second, implement a heuristic block selection
algorithm to “intelligently” choose the set of basic blocks that will be if-converted. You
are free to define any heuristic that you wish and are encouraged to be creative here.
Please try to avoid just blindly using the BSV algorithm discussed in class.
Your algorithm should operate on an inner-most loop, where you wish to perform
selective if-conversion of the loop body. You should create at most 1 hyperblock for the
loop, so you do not need to worry about making other HBs out of basic blocks that you
do not choose for your primary HB. The algorithm should be applied to all the inner
most loops in the program.
Your algorithm should consist of the following 5 steps:
Loop detection – Using the code in Trimaran (el_loop.cpp) to identify all the
loops in a Procedure. All innermost loops are used for subsequent processing.
Backedge coalescing – For each innermost with multiple backedges, combine
all backedges into a single backedge using the technique described in class.
Block selection – Identify the subset of blocks within the loop that you wish to
if-convert using whatever means you wish. The goal is to produce the fastest
code possible as compared with the original basic block implementation.
Tail duplication – Replicate the set of basic blocks and adjust the control flow
edges such that the selected blocks contain no side entrances. This code will be
provided to you, see elcor/src/Control/el_tail_duplication.cpp
If-conversion – Eliminate all the control flow among the selected basic blocks
by using predicated execution. This code will be provided to you, see
elcor/src/Control/el_if_converter.cpp
Block Selection
This will obviously require some thought. You should start with the lecture on
Hyperblocks that discusses two previous techniques, block selection value and path
selection. Think about the cost/benefits of if-conversion. On the benefit side, you
eliminate branches, mispredictions and allow for more instruction overlap. On the
negative side, you may increase resource utilization, dependence height, and possibly
pf2

Partial preview of the text

Download EECS 583 Homework 1: Heuristic Hyperblock Formation Algorithm - Prof. Scott Mahlke and more Assignments Electrical and Electronics Engineering in PDF only on Docsity!

EECS 583 – Homework 1

Winter 2005

Assigned: Monday, January 24, 2005

Due: Wednesday, February 9, 2005

The goal for this homework is to implement a heuristic hyperblock formation algorithm that performs selective if-conversion for inner-most loops. On the surface, this requires a large amount of code to accomplish this task. However, the bulk of the code will be provided to you (tail duplication, if-conversion). Your main task is to first implement a simple control flow optimization, backedge coalescing, to convert any multi-backedge loop into a single backedge loop. Second, implement a heuristic block selection algorithm to “intelligently” choose the set of basic blocks that will be if-converted. You are free to define any heuristic that you wish and are encouraged to be creative here. Please try to avoid just blindly using the BSV algorithm discussed in class.

Your algorithm should operate on an inner-most loop, where you wish to perform selective if-conversion of the loop body. You should create at most 1 hyperblock for the loop, so you do not need to worry about making other HBs out of basic blocks that you do not choose for your primary HB. The algorithm should be applied to all the inner most loops in the program.

Your algorithm should consist of the following 5 steps:

Loop detection – Using the code in Trimaran (el_loop.cpp) to identify all the loops in a Procedure. All innermost loops are used for subsequent processing. Backedge coalescing – For each innermost with multiple backedges, combine all backedges into a single backedge using the technique described in class. Block selection – Identify the subset of blocks within the loop that you wish to if-convert using whatever means you wish. The goal is to produce the fastest code possible as compared with the original basic block implementation. Tail duplication – Replicate the set of basic blocks and adjust the control flow edges such that the selected blocks contain no side entrances. This code will be provided to you, see elcor/src/Control/el_tail_duplication.cpp If-conversion – Eliminate all the control flow among the selected basic blocks by using predicated execution. This code will be provided to you, see elcor/src/Control/el_if_converter.cpp

Block Selection

This will obviously require some thought. You should start with the lecture on Hyperblocks that discusses two previous techniques, block selection value and path selection. Think about the cost/benefits of if-conversion. On the benefit side, you eliminate branches, mispredictions and allow for more instruction overlap. On the negative side, you may increase resource utilization, dependence height, and possibly

restrict the ordering of operations. So, the trick is to come up with a heuristic that does a good balancing job. This is left as an open problem without any prescribed solutions.

There are several tools available that may be useful to defining a good heuristic for block selection. More info about these will be provided on the course newsgroup.

  1. Control flow profile information
  2. Dependence height of a basic block
  3. Resource minimum schedule length (RMSL)

Performance Evaluation

To evaluate the quality of your hyperblocks, you will need to turn on the Elcor scheduler. For simplicity, we will assume infinite registers, so register allocation will be turned off. Use the cycle stats obtained in ELCOR_STATS as you did for homework 0 as your performance.

Submission

You should submit a single .tgz file via anonymous ftp to www.eecs.umich.edu, log in as anonymous, cd /groups/eecs583, put your tar file named uniquename_hw1.tgz. Note that you will not be able to perform any gets from this directory. Your tar file should contain:

  1. hyperblock.cpp, hyperblock.h which contain the source code for this HW
  2. 583_template.cpp if you used any new templates
  3. Text output file that you get for 583hw1d (583hw1[a-c] are for you to play with, feel free to create other testcases, just create a directory under benchmarks using the same format).
  4. README.hw1 file that contains any special instructions or other notes you wish to give me. For instance, if you could not get the entire thing working, how far did you get, what is broken, etc.

Competition

The person with the best performance (benchmark(s) and machine model TBD) will crowned EECS 583 Hyperblock formation champion. Stay tuned for more.