Code Generation Using Fourier Motzkin Code Generation Previously Goals – Data dependences and loops – express outermost loop bounds in terms of symbolic constants and constants – Loop transformations – express inner loop bounds in terms of any enclosing loop variables, – Unimodular transformation framework symbolic constants, and constants – Kelly and Pugh transformation framework (affine transformations per statement) Approach – Project out inner loop iteration variables to determine loop bounds for Today outer loops – Code generation – Fourier Motzkin elimination is the algorithm that projects a variable out – use Fourier Motzkin to calculate new loop bounds of a polyhedron – review array access transformations – review loop bounds transformations CS553 Lecture Fourier-Motzkin Elimination 2 CS553 Lecture Fourier-Motzkin Elimination 3 Fourier-Motzkin Elimination: The Idea Fourier-Motzkin Elimination: The Algorithm 1 >= i Polyhedron FM( P, i_k ) => P’ – convex intersection of a set of j <=5 Input: inequalities – model for iteration spaces i <= j Output: j Problem – given a polyhedron how do we generate loop bounds that Algorithm: i scan all of its points? for each lower bound of – example: two possible loop orders for each upper bound of – ( i , j ) – ( j , i ) CS553 Lecture Fourier-Motzkin Elimination 4 CS553 Lecture Fourier-Motzkin Elimination 5 1
Distinguishing Upper and Lower Bounds Triangular Iteration Space Example Simple Algorithm ( i, j ) for target iteration space j <=5 – given that the polyhedron is represented as follows: i <= j j – any constraint with a positive coefficient for i_k is a lower bound – any constraint with a negative coefficient for i_k is an upper bound i ( j, i ) for target iteration space 1 >= i j <=5 i <= j j CS553 Lecture Fourier-Motzkin Elimination 6 CS553 Lecture Fourier-Motzkin Elimination 7 1 >= i i General Algorithm for Generating Loop Bounds Loop Skewing and Permutation Input: Original code where the i vector is the desired loop order do i = 1,6 do j = 1,5 j Output: A(i,j) = A(i-1,j+1)+1 i enddo enddo Algorithm: (1, -1) Distance vector: for k = d to 1 by -1 Skewing followed by Permutation: i’ j’ CS553 Lecture Fourier-Motzkin Elimination 8 CS553 Lecture Fourier-Motzkin Elimination 9 2
Transforming the Dependences and Array Accesses Transforming the Loop Bounds Original code Original code do i = 1,6 do i = 1,6 do j = 1,5 do j = 1,5 A(i,j) = A(i-1,j+1)+1 A(i,j) = A(i-1,j+1)+1 j j enddo enddo i enddo i enddo Bounds: Dependence vector: New Array Accesses: Transformed code (use general loop bound alg) do i’ = 2,11 do j’ = max(i’-5,1), min(6,i’-1) i’ i’ A(j’,i’-j’) = A(j’-1,i’-j’+1)+1 enddo enddo j’ j’ CS553 Lecture Fourier-Motzkin Elimination 10 CS553 Lecture Fourier-Motzkin Elimination 11 Wavefront Parallelism Example Concepts Example Fourier-Motzkin Elimination do i = 1,6 – algorithm do j = 1,min(5,7-i) – using for code generation A(i,j) = A(i-1,j-1) + A(i,j-1) Loop bounds j enddo enddo – how to determine upper and lower bounds for a variable when bounds are i in matrix format Iteration Space Goal – Determine a unimodular transformation that enables indicating that the Examples inner loop is fully parallel. (with an OpenMP directive for example) – triangular matrix do i’ = 1,5 – skew and permute example do j’ = 1, 7-i’ (parallel) – wavefront example A(j’,i’) = A(j’-1,i’-1) + A(j’,i’-1) enddo enddo CS553 Lecture Fourier-Motzkin Elimination 12 CS553 Lecture Fourier-Motzkin Elimination 13 3
Next Time Lecture – Parallelization with no synchronization or communication Suggested Exercises – 11.3.2, 11.3.3, 11.3.4 CS553 Lecture Fourier-Motzkin Elimination 14 4
Recommend
More recommend