|
| 1 | +# RUN: python %s --simple 2>&1 | filecheck %s --check-prefix=CHECK-SIMPLE |
| 2 | +# RUN: python %s --tiled 2>&1 | filecheck %s --check-prefix=CHECK-TILED |
| 3 | +# RUN: python %s --vectorized 2>&1 | filecheck %s --check-prefix=CHECK-VECTORIZED |
| 4 | +# RUN: python %s --full 2>&1 | filecheck %s --check-prefix=CHECK-FULL |
| 5 | +# RUN: python %s --split 2>&1 | filecheck %s --check-prefix=CHECK-SPLIT |
| 6 | + |
| 7 | +import sys |
| 8 | +from xtc.schedules.parsing import ScheduleParser |
| 9 | +from xtc.schedules.descript import ScheduleInterpreter |
| 10 | + |
| 11 | +parser = ScheduleParser() |
| 12 | +abstract_axis = ["i", "j", "k"] |
| 13 | +interpreter = ScheduleInterpreter(abstract_axis) |
| 14 | + |
| 15 | +if "--simple" in sys.argv: |
| 16 | + spec = {"i": {}, "k": {}, "j": {}} |
| 17 | + ast = parser.parse(spec) |
| 18 | + loop_nest = interpreter.interpret(ast, root="C") |
| 19 | + print(loop_nest.root_node.pretty_print()) |
| 20 | + |
| 21 | +elif "--tiled" in sys.argv: |
| 22 | + spec = {"i": {}, "k": {}, "j": {}, "j#16": {}} |
| 23 | + ast = parser.parse(spec) |
| 24 | + loop_nest = interpreter.interpret(ast, root="C") |
| 25 | + print(loop_nest.root_node.pretty_print()) |
| 26 | + |
| 27 | +elif "--vectorized" in sys.argv: |
| 28 | + spec = {"i": {}, "k": {}, "j": {}, "j#16": {"vectorize": True}} |
| 29 | + ast = parser.parse(spec) |
| 30 | + loop_nest = interpreter.interpret(ast, root="C") |
| 31 | + print(loop_nest.root_node.pretty_print()) |
| 32 | + |
| 33 | +elif "--full" in sys.argv: |
| 34 | + spec = { |
| 35 | + "i": {"parallelize": True}, |
| 36 | + "k": {}, |
| 37 | + "j": {}, |
| 38 | + "j#32": {}, |
| 39 | + "j#16": {"vectorize": True, "unroll": 4}, |
| 40 | + } |
| 41 | + ast = parser.parse(spec) |
| 42 | + loop_nest = interpreter.interpret(ast, root="C") |
| 43 | + print(loop_nest.root_node.pretty_print()) |
| 44 | + |
| 45 | +elif "--split" in sys.argv: |
| 46 | + spec = { |
| 47 | + "i": {}, |
| 48 | + "j[:128]": {"k": {}, "k#32": {}}, |
| 49 | + "j[128:]": {"k": {}, "k#16": {"vectorize": True}}, |
| 50 | + } |
| 51 | + ast = parser.parse(spec) |
| 52 | + loop_nest = interpreter.interpret(ast, root="C") |
| 53 | + print(loop_nest.root_node.pretty_print()) |
| 54 | + |
| 55 | +# CHECK-SIMPLE: for i in ...: |
| 56 | +# CHECK-SIMPLE-NEXT: for k in ...: |
| 57 | +# CHECK-SIMPLE-NEXT: for j in ...: |
| 58 | + |
| 59 | +# CHECK-TILED: for i in ...: |
| 60 | +# CHECK-TILED-NEXT: for k in ...: |
| 61 | +# CHECK-TILED-NEXT: for j in ...: |
| 62 | +# CHECK-TILED-NEXT: for j0 in tile(j, 16): |
| 63 | + |
| 64 | +# CHECK-VECTORIZED: for i in ...: |
| 65 | +# CHECK-VECTORIZED-NEXT: for k in ...: |
| 66 | +# CHECK-VECTORIZED-NEXT: for j in ...: |
| 67 | +# CHECK-VECTORIZED-NEXT: for j0 in tile(j, 16): // vectorized |
| 68 | + |
| 69 | +# CHECK-FULL: for i in ...: // parallelized |
| 70 | +# CHECK-FULL-NEXT: for k in ...: |
| 71 | +# CHECK-FULL-NEXT: for j in ...: |
| 72 | +# CHECK-FULL-NEXT: for j0 in tile(j, 32): |
| 73 | +# CHECK-FULL-NEXT: for j1 in tile(j, 16): // vectorized, unroll(4) |
| 74 | + |
| 75 | +# CHECK-SPLIT: for i in ...: |
| 76 | +# CHECK-SPLIT-NEXT: for j[0] in split(j, 0, 128): |
| 77 | +# CHECK-SPLIT-NEXT: for j in ...: |
| 78 | +# CHECK-SPLIT-NEXT: for k in ...: |
| 79 | +# CHECK-SPLIT-NEXT: for k0 in tile(k, 32): |
| 80 | +# CHECK-SPLIT-NEXT: for j[1] in split(j, 128, ...): |
| 81 | +# CHECK-SPLIT-NEXT: for j in ...: |
| 82 | +# CHECK-SPLIT-NEXT: for k in ...: |
| 83 | +# CHECK-SPLIT-NEXT: for k0 in tile(k, 16): // vectorized |
0 commit comments