Given a loop construct containing array-based code, the student will be
able to use the delta test to determine the existence of array dependences,
the direction vectors of dependences and the distance vectors of dependences
contained in the loop body.
Given a loop construct containing array-based code, the student will be
able to determine the cache-reuse behavior of each array reference in the
loop using both dependence-based and linear-algebra-based reuse models.
The student will also be able to analyze any possible cache interference
within the loop body.
Given a nested loop construct containing array-based code, the student
will be able to analyze the reuse properties of each loop using dependence-based
and lineary-algebra-based reuse models. Further the student will be able
to apply loop permutation, loop tiling and unroll-and-jam to improve the
reuse properties of the entire loop nest.
Given a loop construct containing array-based code, the student will be
able to quantitatively analyze the instruction-level parallelism available
in the loop by computing the balance of the loop and determining if the
loop is memory-bound or compute-bound. Further, the student will be able
to apply unroll-and-jam and scalar replacement to the loop body to improve
instruction- level parallelism and quantitatively determine the effects
of unroll-and-jam and scalar replacement on loop balance before the transformation
are applied to the loop.
Given a loop construct containing array-based code, the student will be
able to determine which loops can be run in parallel on a symmetric multiprocessor
and be able to apply loop fusion, loop distribution, and loop alignment
to improve the quantity of parallelism in a loop.
Given a program, the student will be able to apply interprocedurel alias
analysis and interprocedural mod analysis to determine the side-effects
of procdure calls. In addition, the student will be able to perform regular
section analysis to determine the effects of procedure calls on arrays.