From: Luke Kenneth Casson Leighton Date: Sat, 3 Jul 2021 11:50:38 +0000 (+0100) Subject: add remap matrix schedule print program, for checking redesign of REMAP X-Git-Tag: DRAFT_SVP64_0_1~662 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a723db05ea363b6107d6bcd4361c5d5e0f1cf3c4;p=libreriscv.git add remap matrix schedule print program, for checking redesign of REMAP --- diff --git a/openpower/sv/remapmatrix.py b/openpower/sv/remapmatrix.py index 54d73e93f..dc8f5caa3 100644 --- a/openpower/sv/remapmatrix.py +++ b/openpower/sv/remapmatrix.py @@ -87,6 +87,8 @@ def matrix_demo(): # now create the schedule. we use three generators, zipped # together + print ("ydim2 xdim2 ydim1", ydim2, xdim2, ydim1) + class SVSHAPE: pass # result uses SVSHAPE0 diff --git a/openpower/sv/remapmatrixprint.py b/openpower/sv/remapmatrixprint.py new file mode 100644 index 000000000..c724a8b52 --- /dev/null +++ b/openpower/sv/remapmatrixprint.py @@ -0,0 +1,93 @@ +# a "yield" version of the REMAP algorithm. a little easier to read +# than the Finite State Machine version + +from remapyield import iterate_indices + + +def matrixscheduledemo(): + ydim2, xdim2, ydim1 = (3, 4, 3) + + print ("ydim2 xdim2 ydim1", ydim2, xdim2, ydim1) + + # got this from running an earlier version + expected = [ + ( 0 , (0, 0, 0) ), + ( 1 , (1, 0, 1) ), + ( 2 , (2, 0, 2) ), + ( 3 , (3, 0, 3) ), + ( 4 , (4, 3, 0) ), + ( 5 , (5, 3, 1) ), + ( 6 , (6, 3, 2) ), + ( 7 , (7, 3, 3) ), + ( 8 , (8, 6, 0) ), + ( 9 , (9, 6, 1) ), + ( 10 , (10, 6, 2) ), + ( 11 , (11, 6, 3) ), + ( 12 , (0, 1, 4) ), + ( 13 , (1, 1, 5) ), + ( 14 , (2, 1, 6) ), + ( 15 , (3, 1, 7) ), + ( 16 , (4, 4, 4) ), + ( 17 , (5, 4, 5) ), + ( 18 , (6, 4, 6) ), + ( 19 , (7, 4, 7) ), + ( 20 , (8, 7, 4) ), + ( 21 , (9, 7, 5) ), + ( 22 , (10, 7, 6) ), + ( 23 , (11, 7, 7) ), + ( 24 , (0, 2, 8) ), + ( 25 , (1, 2, 9) ), + ( 26 , (2, 2, 10) ), + ( 27 , (3, 2, 11) ), + ( 28 , (4, 5, 8) ), + ( 29 , (5, 5, 9) ), + ( 30 , (6, 5, 10) ), + ( 31 , (7, 5, 11) ), + ( 32 , (8, 8, 8) ), + ( 33 , (9, 8, 9) ), + ( 34 , (10, 8, 10) ), + ( 35 , (11, 8, 11) ), + ] + + class SVSHAPE: + pass + # result uses SVSHAPE0 + SVSHAPE0 = SVSHAPE() + SVSHAPE0.lims = [ydim2, xdim2, 1] + SVSHAPE0.order = [0,2,1] # result iterates through i and j (modulo) + SVSHAPE0.mode = 0b00 + SVSHAPE0.offset = 0 # no offset + SVSHAPE0.invxyz = [0,0,0] # no inversion + # X uses SVSHAPE1 + SVSHAPE1 = SVSHAPE() + SVSHAPE1.lims = [ydim2, xdim2, ydim1] + SVSHAPE1.order = [1,2,0] # X iterates through i and k + SVSHAPE1.mode = 0b10 + SVSHAPE1.offset = 0 # no offset + SVSHAPE1.invxyz = [0,0,0] # no inversion + # y-selector uses SHAPE2 + SVSHAPE2 = SVSHAPE() + SVSHAPE2.lims = [ydim2, xdim2, ydim1] + SVSHAPE2.order = [1,2,0] # Y iterates through k and j + SVSHAPE2.mode = 0b01 + SVSHAPE2.offset = 0 # no offset + SVSHAPE2.invxyz = [0,0,0] # no inversion + + # perform the iteration over the *linear* arrays using the + # schedules + VL = ydim2 * xdim2 * ydim1 + i = 0 + for i, idxs in enumerate(zip(iterate_indices(SVSHAPE0), + iterate_indices(SVSHAPE1), + iterate_indices(SVSHAPE2))): + + if i == VL: + break + print ("(", i, ",", idxs, "),") + if expected[i] != (i, idxs): + print ("row incorrect") + + +# run the demo +if __name__ == '__main__': + matrixscheduledemo()