From 0ed4b300f4f9bcd40b80c99a470b5d4fc124168e Mon Sep 17 00:00:00 2001 From: Rui Cesista Date: Mon, 11 May 2026 11:37:14 +0200 Subject: [PATCH 1/5] mlir: Add 2 primitive for gpu on the scheduler - Usage of TileForAll with gpu mapping - Fusion of gpu mapping for correct IR --- src/xtc/backends/jir/JIRScheduler.py | 10 ++ src/xtc/backends/mlir/MlirCompilerPasses.py | 120 +++++++++++-- src/xtc/backends/mlir/MlirNodeScheduler.py | 16 ++ src/xtc/backends/mlir/MlirScheduler.py | 8 + .../mlir/MlirTarget/MlirNVGPUTarget.py | 1 - src/xtc/backends/tvm/TVMScheduler.py | 10 ++ src/xtc/itf/schd/scheduler.py | 18 ++ src/xtc/schedules/descript.py | 16 ++ src/xtc/schedules/loop_nest.py | 6 + src/xtc/schedules/parsing.py | 46 +++++ .../test_matmul_mlir_offload_tensor.py | 15 +- .../schedules/test_matmul_descript_gpu.py | 167 ++++++++++++++++++ tests/filecheck/search/test_conv_oo.py | 95 +--------- tests/filecheck/search/test_conv_pprprp.py | 120 ++----------- tests/filecheck/search/test_conv_pprprpv.py | 120 ++----------- tests/filecheck/search/test_conv_pprprpvr.py | 120 ++----------- .../search/test_conv_pprprpvr_rnd.py | 29 +-- tests/filecheck/search/test_conv_prp.py | 64 +------ tests/filecheck/search/test_conv_prp_rnd.py | 29 +-- tests/filecheck/search/test_matmul_goto.py | 117 +----------- tests/filecheck/search/test_matmul_goto_r.py | 117 +----------- tests/filecheck/search/test_matmul_oo.py | 62 +------ tests/filecheck/search/test_matmul_p1.py | 117 +----------- tests/filecheck/search/test_matmul_p1v.py | 43 +---- tests/filecheck/search/test_matmul_pprprp.py | 120 ++----------- tests/filecheck/search/test_matmul_pprprpv.py | 120 ++----------- .../filecheck/search/test_matmul_pprprpvr.py | 120 ++----------- .../search/test_matmul_pprprpvr_rnd.py | 29 +-- tests/filecheck/search/test_matmul_prp.py | 34 +--- tests/filecheck/search/test_matmul_prp_rnd.py | 29 +-- 30 files changed, 561 insertions(+), 1357 deletions(-) create mode 100644 tests/filecheck/schedules/test_matmul_descript_gpu.py diff --git a/src/xtc/backends/jir/JIRScheduler.py b/src/xtc/backends/jir/JIRScheduler.py index dde8312c5..5b94e776d 100644 --- a/src/xtc/backends/jir/JIRScheduler.py +++ b/src/xtc/backends/jir/JIRScheduler.py @@ -346,6 +346,16 @@ def distributed_buffer_at( # TODO: not implemented for now pass + @override + def gpu_thread(self, axes: list[str]) -> None: + # TODO: not implemented for now + pass + + @override + def gpu_block(self, axes: list[str]) -> None: + # TODO: not implemented for now + pass + def get_schedule_str(self) -> str: return str(JIRSchedule(scheduler=self)) diff --git a/src/xtc/backends/mlir/MlirCompilerPasses.py b/src/xtc/backends/mlir/MlirCompilerPasses.py index b766ab2a4..73b5eaf22 100644 --- a/src/xtc/backends/mlir/MlirCompilerPasses.py +++ b/src/xtc/backends/mlir/MlirCompilerPasses.py @@ -22,6 +22,9 @@ ApplyFoldUnitExtentDimsViaSlicesPatternsOp, MatchInterfaceEnum, FuseIntoContainingOp, +from mlir.dialects.transform.gpu import ( + MapForallToBlocks, + MapNestedForallToThreads, ) from mlir.dialects.transform.loop import loop_unroll from mlir.dialects.transform import SplitHandleOp @@ -30,6 +33,8 @@ InsertionPoint, UnitAttr, OpResult, + Attribute, + ArrayAttr, ) from mlir.passmanager import PassManager from mlir.ir import Module @@ -52,6 +57,7 @@ _VECTO_SEQ_NAME = "_vecto" _SUPER_VECTORIZE_SEQ_NAME = "_super_vectorize" _POST_BUFFERIZE_SEQ_NAME = "_post_bufferize" +_GPU_DIM = ["x", "y", "z"] @dataclass @@ -315,7 +321,8 @@ def _generate_node_scheduling( permutation = schedule.permutation[root] if not permutation: return sched_state - + gpu_material = True + gpu_mat_thread = True # Materialize the loops for loop_name in permutation: # Manage the splits @@ -351,12 +358,39 @@ def _generate_node_scheduling( self._vectorize(sched_state) break elif loop_name in tiles_sizes_by_loops: - self._strip_mine( - loop_name=loop_name, - tiling_vector=tiles_sizes_by_loops[loop_name], - schedule=schedule, - sched_state=sched_state, - ) + if loop_name in schedule.gpu_blocks: + tile_vect = [ + max(tiles_sizes_by_loops[loop]) for loop in schedule.gpu_blocks + ] + tile_vect = tile_vect + [0] * (3 - len(tile_vect)) + if gpu_material: + new_loop = self._strip_mine( + loop_name=loop_name, + tiling_vector=tile_vect, + schedule=schedule, + sched_state=sched_state, + ) + gpu_material = False + elif loop_name in schedule.gpu_threads: + tile_vect = [ + max(tiles_sizes_by_loops[loop]) for loop in schedule.gpu_threads + ] + tile_vect = tile_vect + [0] * (3 - len(tile_vect)) + if gpu_mat_thread: + new_loop = self._strip_mine( + loop_name=loop_name, + tiling_vector=tile_vect, + schedule=schedule, + sched_state=sched_state, + ) + gpu_mat_thread = False + else: + self._strip_mine( + loop_name=loop_name, + tiling_vector=tiles_sizes_by_loops[loop_name], + schedule=schedule, + sched_state=sched_state, + ) if loop_name in schedule.distribution: self._distribute_loop(loop_name, schedule, sched_state) # Fuse the producers @@ -373,6 +407,10 @@ def _generate_node_scheduling( if schedule.unrolling: self._unroll(permutation, schedule, sched_state) + # Gpu mapping + if schedule.gpu_blocks: + self._gpu_mapping(schedule, sched_state, tiles_sizes_by_loops) + return sched_state def _fuse_producers_into_loop( @@ -498,9 +536,26 @@ def _strip_mine( sched_state: SchedulingState, ) -> OpResult: if loop_name in schedule.parallelization: - tiling_command = TileUsingForallOp( - sched_state.handle, tile_sizes=tiling_vector - ) + attr_array = {} + if loop_name in schedule.gpu_threads: + attr_array["mapping"] = ArrayAttr.get( + [ + self._get_thread_id(index) + for index in range(len(schedule.gpu_threads)) + ] + ) + attr_array["tile_sizes"] = tiling_vector + elif loop_name in schedule.gpu_blocks: + attr_array["mapping"] = ArrayAttr.get( + [ + self._get_block_id(index) + for index in range(len(schedule.gpu_blocks)) + ] + ) + attr_array["tile_sizes"] = tiling_vector + else: + attr_array["tile_sizes"] = tiling_vector + tiling_command = TileUsingForallOp(sched_state.handle, **attr_array) else: tiling_command = TileUsingForOp(sched_state.handle, sizes=tiling_vector) # Extract the results @@ -700,6 +755,51 @@ def find_producer_handles(module: Module, root_handle: str) -> list[str | None]: producer_handles[-1] = attr.name return producer_handles + def _get_thread_id(self, index: int) -> Attribute: + ctx = self._mlir_program.mlir_context + return Attribute.parse(f"#gpu.thread<{_GPU_DIM[index]}>", context=ctx) + + def _get_block_id(self, index: int) -> Attribute: + ctx = self._mlir_program.mlir_context + return Attribute.parse(f"#gpu.block<{_GPU_DIM[index]}>", context=ctx) + + def _gpu_mapping( + self, + schedule: MlirNodeSchedule, + sched_state: SchedulingState, + tiles_sizes_by_loops: dict[str, list[int]], + ): + if schedule.gpu_blocks: + new_loop = next( + ( + sched_state.all_loops[loop_name] + for loop_name in schedule.gpu_blocks + if loop_name in sched_state.all_loops + ), + None, + ) + # Since we know there only 1 non zero number + # TODO Find a way to put block id and thread id divide by the size + grid_dims = [ + max(tiles_sizes_by_loops[loop_name]) + for loop_name in schedule.gpu_blocks + ] + grid_dims = grid_dims + [1] * (3 - len(grid_dims)) + new_loop = MapForallToBlocks( + new_loop, + grid_dims=grid_dims, + generate_gpu_launch=True, + ).result + if schedule.gpu_threads: + block_dims = [ + max(tiles_sizes_by_loops[loop_name]) + for loop_name in schedule.gpu_threads + ] + block_dims = block_dims + [1] * (3 - len(block_dims)) + new_loop = MapNestedForallToThreads( + new_loop, + block_dims=block_dims, + ).result class MlirProgramApplyTransformPass: def __init__( diff --git a/src/xtc/backends/mlir/MlirNodeScheduler.py b/src/xtc/backends/mlir/MlirNodeScheduler.py index 932038013..12404fa5c 100644 --- a/src/xtc/backends/mlir/MlirNodeScheduler.py +++ b/src/xtc/backends/mlir/MlirNodeScheduler.py @@ -25,6 +25,8 @@ class MlirNodeSchedule: permutation: dict[str, list[str]] vectorization: list[str] parallelization: list[str] + gpu_threads: list[str] + gpu_blocks: list[str] unrolling: dict[str, int] packed_buffers: dict[str, list[int]] memory_mesh: dict[str, int] @@ -86,6 +88,8 @@ def __init__( self.permutation: dict[str, list[str]] = {} self.vectorization: list[str] = [] self.parallelization: list[str] = [] + self.gpu_threads: list[str] = [] + self.gpu_blocks: list[str] = [] self.unrolling: dict[str, int] = {} self.packed_buffers: dict[str, list[int]] = {} self.memory_mesh: dict[str, int] = {} @@ -113,6 +117,8 @@ def mlir_node_schedule(self) -> MlirNodeSchedule: permutation=self.permutation, vectorization=self.vectorization, parallelization=self.parallelization, + gpu_threads=self.gpu_threads, + gpu_blocks=self.gpu_blocks, unrolling=self.unrolling, memory_mesh=self.memory_mesh, packed_buffers=self.packed_buffers, @@ -230,3 +236,13 @@ def fuse_producer_at( self, axis: str, input_idx: int, root: str = DEFAULT_ROOT ) -> None: self.fused.append((make_loop_name(root, axis), input_idx)) + + def map_gpu_threads(self, axes: list[str], root: str = DEFAULT_ROOT): + assert len(axes) <= 3, "We cannot map more than 3 dimension for gpu thread" + assert len(axes) == len(set(axes)), "Duplicate in the axes for gpu thread" + self.gpu_threads = [make_loop_name(root, axis) for axis in axes] + + def map_gpu_blocks(self, axes: list[str], root: str = DEFAULT_ROOT): + assert len(axes) == len(set(axes)), "Duplicate in the axes for gpu thread" + assert len(axes) <= 3, "We cannot map more than 3 dimension for gpu block" + self.gpu_blocks = [make_loop_name(root, axis) for axis in axes] diff --git a/src/xtc/backends/mlir/MlirScheduler.py b/src/xtc/backends/mlir/MlirScheduler.py index c47a49535..e75bda409 100644 --- a/src/xtc/backends/mlir/MlirScheduler.py +++ b/src/xtc/backends/mlir/MlirScheduler.py @@ -204,6 +204,14 @@ def distributed_buffer_at( axis, input_idx, memory_axes, root=root ) + @override + def gpu_thread(self, axes: list[str], root: str = DEFAULT_ROOT) -> None: + self._current_scheduler.map_gpu_threads(axes, root=root) + + @override + def gpu_block(self, axes: list[str], root: str = DEFAULT_ROOT) -> None: + self._current_scheduler.map_gpu_blocks(axes, root=root) + @override def get_loop_nest(self) -> LoopNest: node_sched = self._current_scheduler diff --git a/src/xtc/backends/mlir/MlirTarget/MlirNVGPUTarget.py b/src/xtc/backends/mlir/MlirTarget/MlirNVGPUTarget.py index 8173c0840..99651f850 100644 --- a/src/xtc/backends/mlir/MlirTarget/MlirNVGPUTarget.py +++ b/src/xtc/backends/mlir/MlirTarget/MlirNVGPUTarget.py @@ -446,7 +446,6 @@ def _lowering_pipeline(self, sm_arch: str, ptx_version: str) -> list[str]: "scf-forall-to-parallel", "canonicalize", "cse", - "sccp", "func.func(gpu-map-parallel-loops)", "convert-parallel-loops-to-gpu", "convert-linalg-to-loops", diff --git a/src/xtc/backends/tvm/TVMScheduler.py b/src/xtc/backends/tvm/TVMScheduler.py index 165525708..bf8df4e01 100644 --- a/src/xtc/backends/tvm/TVMScheduler.py +++ b/src/xtc/backends/tvm/TVMScheduler.py @@ -495,6 +495,16 @@ def distributed_buffer_at( # TODO: not implemented for now pass + @override + def gpu_thread(self, axes: list[str]) -> None: + # TODO: not implemented for now + pass + + @override + def gpu_block(self, axes: list[str]) -> None: + # TODO: not implemented for now + pass + def _get_plain_schedule(self) -> TVMPlainSchedule: return TVMPlainSchedule( dims=deepcopy(self.dims), diff --git a/src/xtc/itf/schd/scheduler.py b/src/xtc/itf/schd/scheduler.py index 0f6c51d98..c9277127e 100644 --- a/src/xtc/itf/schd/scheduler.py +++ b/src/xtc/itf/schd/scheduler.py @@ -290,6 +290,24 @@ def distributed_buffer_at( """ ... + @abstractmethod + def gpu_thread(self, axes: list[str]) -> None: + """ + Map an axis to a certain gpu thread either x, y or z. + The mapped axis need to be in parallelization. + We can only map 3 dimensions for gpu thread + """ + ... + + @abstractmethod + def gpu_block(self, axes: list[str]) -> None: + """ + Map an axis to a certain gpu block either x, y or z. + The mapped axis need to be in parallelization. + We can only map 3 dimensions for gpu block + """ + ... + @abstractmethod def get_loop_nest(self) -> LoopNest: """Return a LoopNest representation of the current schedule. diff --git a/src/xtc/schedules/descript.py b/src/xtc/schedules/descript.py index d11005087..90fc1b3f0 100644 --- a/src/xtc/schedules/descript.py +++ b/src/xtc/schedules/descript.py @@ -395,6 +395,12 @@ def _apply_annotations( else: node.pack_at[loop_name] = (input_matrix, mtype, pad) + if annotations.gpu_block is not None: + node.gpu_block[loop_name] = annotations.gpu_block + + if annotations.gpu_thread is not None: + node.gpu_thread[loop_name] = annotations.gpu_thread + def _check_splitting_intervals( self, item: SplitDecl, @@ -537,6 +543,16 @@ def _apply_node(self, node: LoopNestNode, scheduler: Scheduler) -> None: for axis, (input_idx, mtype, pad) in node.pack_at.items(): scheduler.pack_at(axis, input_idx, mtype=mtype, pad=pad, root=root) + if node.gpu_block: + self.scheduler.gpu_block( + sorted(node.gpu_block, key=node.gpu_block.get), root=root + ) + + if node.gpu_thread: + self.scheduler.gpu_thread( + sorted(node.gpu_thread, key=node.gpu_thread.get), root=root + ) + # Recursively apply children for child in node.children: self._apply_node(child, scheduler) diff --git a/src/xtc/schedules/loop_nest.py b/src/xtc/schedules/loop_nest.py index 306c0c910..c12dc4a31 100644 --- a/src/xtc/schedules/loop_nest.py +++ b/src/xtc/schedules/loop_nest.py @@ -108,6 +108,8 @@ class LoopNestNode(Node["LoopNestNode"]): unroll: dict[str, int] = field(default_factory=dict) buffer_at: dict[str, str | None] = field(default_factory=dict) pack_at: dict[str, tuple[int, str | None, bool]] = field(default_factory=dict) + gpu_block: dict[str, int] = field(default_factory=dict) + gpu_thread: dict[str, int] = field(default_factory=dict) def pretty_print(self, indent: int = 0) -> str: """Return a human-readable representation of the loop nest. @@ -230,6 +232,10 @@ def _add_annotations(self, line: str, loop_name: str) -> str: if pad: parts.append("pad") annotations.append(f"pack({', '.join(parts)})") + if loop_name in self.gpu_block: + annotations.append(f"gpu_block({self.gpu_block[loop_name]})") + if loop_name in self.gpu_thread: + annotations.append(f"gpu_thread({self.gpu_thread[loop_name]})") if annotations: line += " // " + ", ".join(annotations) return line diff --git a/src/xtc/schedules/parsing.py b/src/xtc/schedules/parsing.py index bbea72af4..92c00b618 100644 --- a/src/xtc/schedules/parsing.py +++ b/src/xtc/schedules/parsing.py @@ -50,6 +50,8 @@ class Annotations: pack_specified: bool = False partial: bool = False full: bool = False + gpu_block: int | None = None + gpu_thread: int | None = None @dataclass(frozen=True) @@ -175,6 +177,8 @@ def _parse_annotations(self, value: dict[str, Any], context: str) -> Annotations pack_specified = False partial = False full = False + gpu_block: str | int | None = None + gpu_thread: str | int | None = None for key, param in value.items(): match key: @@ -221,6 +225,46 @@ def _parse_annotations(self, value: dict[str, Any], context: str) -> Annotations partial = True case "full": full = True + case "gpu_block": + if isinstance(param, str): + if param == "x": + gpu_block = 0 + elif param == "y": + gpu_block = 1 + elif param == "z": + gpu_block = 2 + else: + raise ScheduleParseError( + f'`{{"gpu_block" = {param}}}`: gpu_block parameter should be a string or int' + ) + elif isinstance(param, int): + gpu_block = param + else: + raise ScheduleParseError( + f'`{{"gpu_block" = {param}}}`: gpu_block parameter should be a string or int' + ) + case "gpu_thread": + if isinstance(param, str): + if param == "x": + gpu_thread = 0 + elif param == "y": + gpu_thread = 1 + elif param == "z": + gpu_thread = 2 + else: + raise ScheduleParseError( + f'`{{"gpu_thread" = {param}}}`: gpu_thread string parameter should x, y or z' + ) + elif isinstance(param, int): + gpu_thread = param + if param < 0 and param < 3: + raise ScheduleParseError( + f'`{{"gpu_thread" = {param}}}`: gpu_thread int parameter should 0, 1 or 2' + ) + else: + raise ScheduleParseError( + f'`{{"gpu_thread" = {param}}}`: gpu_thread parameter should be a string or int' + ) case _: raise ScheduleParseError(f"Unknown annotation on {context}: {key}") @@ -238,6 +282,8 @@ def _parse_annotations(self, value: dict[str, Any], context: str) -> Annotations pack_specified=pack_specified, partial=partial, full=full, + gpu_block=gpu_block, + gpu_thread=gpu_thread, ) def _parse_pack_param( diff --git a/tests/filecheck/backends/target_gpu/test_matmul_mlir_offload_tensor.py b/tests/filecheck/backends/target_gpu/test_matmul_mlir_offload_tensor.py index 7c1f84923..9cbaeb9ac 100644 --- a/tests/filecheck/backends/target_gpu/test_matmul_mlir_offload_tensor.py +++ b/tests/filecheck/backends/target_gpu/test_matmul_mlir_offload_tensor.py @@ -9,7 +9,7 @@ # Create device gpu = GPUDevice() -I, J, K, dtype = 4, 32, 512, "float32" +I, J, K, dtype = 1024, 1024, 512, "float32" a = O.tensor((I, K), dtype, name="A") # A lives on the host b = O.tensor((K, J), dtype, name="B", device=gpu) # B lives on the accelerator @@ -22,10 +22,14 @@ impl = Backend(graph) sch = impl.get_scheduler() -sch.tile("i", {"i1": 2}) -sch.tile("j", {"j1": 16}) -sch.unroll({"i1": 2}) -sch.parallelize(["i"]) +sch.tile("i", {"i1": 128, "i2": 32}) +sch.tile("j", {"j1": 128, "j2": 32}) +sch.tile("k", {"k1": 64}) +# sch.unroll({"i1": 2}) +sch.parallelize(["i", "j","i1", "j1"]) +sch.gpu_block(["i", "j"]) +sch.gpu_thread(["i1", "j1"]) +sch.interchange(["i", "j", "i1", "j1","k", "k1", "i2", "j2"]) sched = sch.schedule() comp = impl.get_compiler( @@ -34,6 +38,7 @@ dump_file="gpu_matmul_mlir_offload_tensor", print_source_ir=True, print_transformed_ir=True, + print_lowered_ir=True, ) module = comp.compile(sched) executor = module.get_executor(validate=True) diff --git a/tests/filecheck/schedules/test_matmul_descript_gpu.py b/tests/filecheck/schedules/test_matmul_descript_gpu.py new file mode 100644 index 000000000..7a1080d50 --- /dev/null +++ b/tests/filecheck/schedules/test_matmul_descript_gpu.py @@ -0,0 +1,167 @@ +# RUN: python %s 2>&1 | filecheck %s +# REQUIRES: mlir-target=nvgpu + +import xtc.graphs.xtc.op as O +from xtc.backends.mlir import Backend +from xtc.schedules.descript import descript_scheduler + +from xtc.runtimes.accelerator.gpu import GPUDevice + +gpu = GPUDevice() +I, J, K, dtype = 1024, 1024, 512, "float32" +a = O.tensor((I, K), dtype, name="A") +b = O.tensor((K, J), dtype, name="B", device=gpu) + +with O.graph(name="matmul") as gb: + O.matmul(a, b, name="C", device=gpu) + +graph = gb.graph +print(graph) + +impl = Backend(graph) + +sch = impl.get_scheduler() +descript_scheduler( + scheduler = sch, + node_name = "C", + abstract_dims = ["I","J","K"], + spec = { + "I": {"parallelize": True, "gpu_block": 0}, + "J": {"parallelize": True, "gpu_block": 1}, + "K": {}, + "I#128": {"parallelize": True, "gpu_thread": 0}, + "J#128": {"parallelize": True, "gpu_thread": 1}, + "I#32": {}, + "J#32": {}, + + } +) + +sched = sch.schedule() + +comp = impl.get_compiler( + target=gpu, + shared_lib=True, + dump_file="matmul_descript_mlir_gpu", + print_source_ir=True, + print_transformed_ir=True, +) +module = comp.compile(sched) +executor = module.get_executor(validate=True) +res = executor.execute() +print(f"CODE: {res}") + +# CHECK: // -----// IR Dump Before transform //----- // +# CHECK-NEXT: module attributes {transform.with_named_sequence} { +# CHECK-NEXT: func.func @matmul(%arg0: memref<4x512xf32> {llvm.noalias}, %arg1: memref<512x32xf32> {llvm.noalias}, %arg2: memref<4x32xf32> {llvm.noalias}) { +# CHECK-NEXT: %cst = arith.constant 0.000000e+00 : f32 +# CHECK-NEXT: linalg.fill {__xtc_id_C_0_} ins(%cst : f32) outs(%arg2 : memref<4x32xf32>) +# CHECK-NEXT: linalg.matmul {__xtc_id_C_} ins(%arg0, %arg1 : memref<4x512xf32>, memref<512x32xf32>) outs(%arg2 : memref<4x32xf32>) +# CHECK-NEXT: return +# CHECK-NEXT: } +# CHECK-NEXT: transform.named_sequence @_vecto(%arg0: !transform.any_op {transform.consumed}) { +# CHECK-NEXT: transform.structured.vectorize %arg0 : !transform.any_op +# CHECK-NEXT: transform.yield +# CHECK-NEXT: } +# CHECK-NEXT: transform.named_sequence @__transform_main(%arg0: !transform.any_op {transform.readonly}) { +# CHECK-NEXT: %0 = transform.structured.match attributes {__xtc_id_C_0_} in %arg0 : (!transform.any_op) -> !transform.any_op +# CHECK-NEXT: %tiled_linalg_op, %loops = transform.structured.tile_using_for %0 tile_sizes [1, 0] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: transform.annotate %loops "./i" : !transform.any_op +# CHECK-NEXT: %tiled_linalg_op_0, %loops_1 = transform.structured.tile_using_for %tiled_linalg_op tile_sizes [0, 1] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: transform.annotate %loops_1 "./j" : !transform.any_op +# CHECK-NEXT: %1 = transform.structured.match attributes {__xtc_id_C_} in %arg0 : (!transform.any_op) -> !transform.any_op +# CHECK-NEXT: %tiled_linalg_op_2, %loops_3 = transform.structured.tile_using_for %1 tile_sizes [0, 0, 1] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: transform.annotate %loops_3 "C/K" : !transform.any_op +# CHECK-NEXT: %tiled_linalg_op_4, %loops_5 = transform.structured.tile_using_for %tiled_linalg_op_2 tile_sizes [2, 0, 0] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: transform.annotate %loops_5 "C/I" : !transform.any_op +# CHECK-NEXT: %tiled_linalg_op_6, %loops_7 = transform.structured.tile_using_for %tiled_linalg_op_4 tile_sizes [0, 16, 0] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: transform.annotate %loops_7 "C/J" : !transform.any_op +# CHECK-NEXT: %tiled_linalg_op_8, %loops_9 = transform.structured.tile_using_for %tiled_linalg_op_6 tile_sizes [1, 0, 0] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: transform.annotate %loops_9 "C/I0" : !transform.any_op +# CHECK-NEXT: transform.include @_vecto failures(suppress) (%tiled_linalg_op_8) : (!transform.any_op) -> () +# CHECK-NEXT: transform.loop.unroll %loops_9 {factor = 2 : i64} : !transform.any_op +# CHECK-NEXT: %2 = transform.get_parent_op %loops_3 {isolated_from_above} : (!transform.any_op) -> !transform.any_op +# CHECK-NEXT: transform.apply_patterns to %2 { +# CHECK-NEXT: transform.apply_patterns.vector.reduction_to_contract +# CHECK-NEXT: transform.apply_patterns.vector.transfer_permutation_patterns +# CHECK-NEXT: } : !transform.any_op +# CHECK-NEXT: transform.apply_patterns to %2 { +# CHECK-NEXT: transform.apply_patterns.vector.lower_outerproduct +# CHECK-NEXT: transform.apply_patterns.vector.lower_contraction +# CHECK-NEXT: } : !transform.any_op +# CHECK-NEXT: transform.yield +# CHECK-NEXT: } +# CHECK-NEXT: } +# CHECK-NEXT: +# CHECK-NEXT: // -----// IR Dump After transform //----- // +# CHECK-NEXT: module attributes {transform.with_named_sequence} { +# CHECK-NEXT: func.func @matmul(%arg0: memref<4x512xf32> {llvm.noalias}, %arg1: memref<512x32xf32> {llvm.noalias}, %arg2: memref<4x32xf32> {llvm.noalias}) { +# CHECK-NEXT: %cst = arith.constant dense<0.000000e+00> : vector<1x16xf32> +# CHECK-NEXT: %0 = ub.poison : f32 +# CHECK-NEXT: %c16 = arith.constant 16 : index +# CHECK-NEXT: %c2 = arith.constant 2 : index +# CHECK-NEXT: %c512 = arith.constant 512 : index +# CHECK-NEXT: %c32 = arith.constant 32 : index +# CHECK-NEXT: %cst_0 = arith.constant 0.000000e+00 : f32 +# CHECK-NEXT: %c0 = arith.constant 0 : index +# CHECK-NEXT: %c4 = arith.constant 4 : index +# CHECK-NEXT: %c1 = arith.constant 1 : index +# CHECK-NEXT: scf.for %arg3 = %c0 to %c4 step %c1 { +# CHECK-NEXT: %subview = memref.subview %arg2[%arg3, 0] [1, 32] [1, 1] : memref<4x32xf32> to memref<1x32xf32, strided<[32, 1], offset: ?>> +# CHECK-NEXT: scf.for %arg4 = %c0 to %c32 step %c1 { +# CHECK-NEXT: %subview_1 = memref.subview %subview[0, %arg4] [1, 1] [1, 1] : memref<1x32xf32, strided<[32, 1], offset: ?>> to memref<1x1xf32, strided<[32, 1], offset: ?>> +# CHECK-NEXT: linalg.fill {__xtc_id_C_0_} ins(%cst_0 : f32) outs(%subview_1 : memref<1x1xf32, strided<[32, 1], offset: ?>>) +# CHECK-NEXT: } {"./j"} +# CHECK-NEXT: } {"./i"} +# CHECK-NEXT: scf.for %arg3 = %c0 to %c512 step %c1 { +# CHECK-NEXT: %subview = memref.subview %arg0[0, %arg3] [4, 1] [1, 1] : memref<4x512xf32> to memref<4x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_1 = memref.subview %arg1[%arg3, 0] [1, 32] [1, 1] : memref<512x32xf32> to memref<1x32xf32, strided<[32, 1], offset: ?>> +# CHECK-NEXT: %subview_2 = memref.subview %arg2[0, 0] [4, 32] [1, 1] : memref<4x32xf32> to memref<4x32xf32, strided<[32, 1]>> +# CHECK-NEXT: scf.for %arg4 = %c0 to %c4 step %c2 { +# CHECK-NEXT: %subview_3 = memref.subview %subview[%arg4, 0] [2, 1] [1, 1] : memref<4x1xf32, strided<[512, 1], offset: ?>> to memref<2x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_4 = memref.subview %subview_2[%arg4, 0] [2, 32] [1, 1] : memref<4x32xf32, strided<[32, 1]>> to memref<2x32xf32, strided<[32, 1], offset: ?>> +# CHECK-NEXT: scf.for %arg5 = %c0 to %c32 step %c16 { +# CHECK-NEXT: %subview_5 = memref.subview %subview_1[0, %arg5] [1, 16] [1, 1] : memref<1x32xf32, strided<[32, 1], offset: ?>> to memref<1x16xf32, strided<[32, 1], offset: ?>> +# CHECK-NEXT: %subview_6 = memref.subview %subview_4[0, %arg5] [2, 16] [1, 1] : memref<2x32xf32, strided<[32, 1], offset: ?>> to memref<2x16xf32, strided<[32, 1], offset: ?>> +# CHECK-NEXT: %subview_7 = memref.subview %subview_3[%c0, 0] [1, 1] [1, 1] : memref<2x1xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_8 = memref.subview %subview_6[%c0, 0] [1, 16] [1, 1] : memref<2x16xf32, strided<[32, 1], offset: ?>> to memref<1x16xf32, strided<[32, 1], offset: ?>> +# CHECK-NEXT: %1 = vector.transfer_read %subview_7[%c0, %c0], %0 {in_bounds = [true, true]} : memref<1x1xf32, strided<[512, 1], offset: ?>>, vector<1x1xf32> +# CHECK-NEXT: %2 = vector.transfer_read %subview_5[%c0, %c0], %0 {in_bounds = [true, true]} : memref<1x16xf32, strided<[32, 1], offset: ?>>, vector<1x16xf32> +# CHECK-NEXT: %3 = vector.transfer_read %subview_8[%c0, %c0], %0 {in_bounds = [true, true]} : memref<1x16xf32, strided<[32, 1], offset: ?>>, vector<1x16xf32> +# CHECK-NEXT: %4 = vector.extract %2[0] : vector<16xf32> from vector<1x16xf32> +# CHECK-NEXT: %5 = vector.extract %1[0, 0] : f32 from vector<1x1xf32> +# CHECK-NEXT: %6 = vector.broadcast %5 : f32 to vector<16xf32> +# CHECK-NEXT: %7 = vector.extract %3[0] : vector<16xf32> from vector<1x16xf32> +# CHECK-NEXT: %8 = vector.fma %6, %4, %7 : vector<16xf32> +# CHECK-NEXT: %9 = vector.insert %8, %cst [0] : vector<16xf32> into vector<1x16xf32> +# CHECK-NEXT: vector.transfer_write %9, %subview_8[%c0, %c0] {in_bounds = [true, true]} : vector<1x16xf32>, memref<1x16xf32, strided<[32, 1], offset: ?>> +# CHECK-NEXT: %subview_9 = memref.subview %subview_3[%c1, 0] [1, 1] [1, 1] : memref<2x1xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_10 = memref.subview %subview_6[%c1, 0] [1, 16] [1, 1] : memref<2x16xf32, strided<[32, 1], offset: ?>> to memref<1x16xf32, strided<[32, 1], offset: ?>> +# CHECK-NEXT: %10 = vector.transfer_read %subview_9[%c0, %c0], %0 {in_bounds = [true, true]} : memref<1x1xf32, strided<[512, 1], offset: ?>>, vector<1x1xf32> +# CHECK-NEXT: %11 = vector.transfer_read %subview_5[%c0, %c0], %0 {in_bounds = [true, true]} : memref<1x16xf32, strided<[32, 1], offset: ?>>, vector<1x16xf32> +# CHECK-NEXT: %12 = vector.transfer_read %subview_10[%c0, %c0], %0 {in_bounds = [true, true]} : memref<1x16xf32, strided<[32, 1], offset: ?>>, vector<1x16xf32> +# CHECK-NEXT: %13 = vector.extract %11[0] : vector<16xf32> from vector<1x16xf32> +# CHECK-NEXT: %14 = vector.extract %10[0, 0] : f32 from vector<1x1xf32> +# CHECK-NEXT: %15 = vector.broadcast %14 : f32 to vector<16xf32> +# CHECK-NEXT: %16 = vector.extract %12[0] : vector<16xf32> from vector<1x16xf32> +# CHECK-NEXT: %17 = vector.fma %15, %13, %16 : vector<16xf32> +# CHECK-NEXT: %18 = vector.insert %17, %cst [0] : vector<16xf32> into vector<1x16xf32> +# CHECK-NEXT: vector.transfer_write %18, %subview_10[%c0, %c0] {in_bounds = [true, true]} : vector<1x16xf32>, memref<1x16xf32, strided<[32, 1], offset: ?>> +# CHECK-NEXT: } {"C/J"} +# CHECK-NEXT: } {"C/I"} +# CHECK-NEXT: } {"C/K"} +# CHECK-NEXT: return +# CHECK-NEXT: } +# CHECK-NEXT: } +# CHECK-NEXT: +# CHECK-NEXT: graph: +# CHECK-NEXT: name: matmul +# CHECK-NEXT: inputs: +# CHECK-NEXT: - %0 : 4x512xfloat32 +# CHECK-NEXT: - %1 : 512x32xfloat32 +# CHECK-NEXT: outputs: +# CHECK-NEXT: - %2 : 4x32xfloat32 +# CHECK-NEXT: nodes: +# CHECK-NEXT: - %2: matmul(%0, %1) {name = 'C'} : [4x512xfloat32, 512x32xfloat32] -> [4x32xfloat32] +# CHECK-NEXT: +# CHECK-NEXT: CODE: 0 diff --git a/tests/filecheck/search/test_conv_oo.py b/tests/filecheck/search/test_conv_oo.py index ff036f81f..5fa397bc9 100644 --- a/tests/filecheck/search/test_conv_oo.py +++ b/tests/filecheck/search/test_conv_oo.py @@ -12,91 +12,10 @@ utils.print_all_opt_schedules(backend, strategy) utils.print_exhaustive_samples(backend, strategy, 100) -# CHECK: schedule O0: [1, 1, 1, 1, 1, 1, 1] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1}, 'h': {'./h1': 1}, 'w': {'./w1': 1}, 'f': {'./f1': 1}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 1}}, permutation={'.': ['./b', './r', './s', './c', './h', './w', './f', './b1', './r1', './s1', './c1', './h1', './w1', './f1']}, vectorization=['./f1'], parallelization=[], unrolling={'./f1': 1, './w1': 1, './h1': 1, './c1': 1, './s1': 1, './r1': 1, './b1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O1: [1, 1, 1, 1, 1, 1, 1] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1}, 'h': {'./h1': 1}, 'w': {'./w1': 1}, 'f': {'./f1': 1}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 1}}, permutation={'.': ['./b', './r', './s', './c', './h', './w', './f', './b1', './r1', './s1', './c1', './h1', './w1', './f1']}, vectorization=['./f1'], parallelization=[], unrolling={'./f1': 1, './w1': 1, './h1': 1, './c1': 1, './s1': 1, './r1': 1, './b1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O2: [1, 1, 2, 16, 1, 1, 1] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1}, 'h': {'./h1': 1}, 'w': {'./w1': 2}, 'f': {'./f1': 16}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 1}}, permutation={'.': ['./b', './r', './s', './c', './h', './w', './f', './b1', './r1', './s1', './c1', './h1', './w1', './f1']}, vectorization=['./f1'], parallelization=[], unrolling={'./f1': 16, './w1': 2, './h1': 1, './c1': 1, './s1': 1, './r1': 1, './b1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O3: [1, 1, 2, 16, 1, 1, 3] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1}, 'h': {'./h1': 1}, 'w': {'./w1': 2}, 'f': {'./f1': 16}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 3}}, permutation={'.': ['./b', './r', './s', './c', './h', './w', './f', './b1', './r1', './s1', './c1', './h1', './w1', './f1']}, vectorization=['./f1'], parallelization=[], unrolling={'./f1': 16, './w1': 2, './h1': 1, './c1': 3, './s1': 1, './r1': 1, './b1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: sample 0: [1, 1, 1, 1, 1, 1, 1] -# CHECK-NEXT: sample 1: [1, 1, 1, 1, 1, 1, 3] -# CHECK-NEXT: sample 2: [1, 1, 1, 1, 1, 7, 1] -# CHECK-NEXT: sample 3: [1, 1, 1, 1, 7, 1, 1] -# CHECK-NEXT: sample 4: [1, 1, 1, 2, 1, 1, 1] -# CHECK-NEXT: sample 5: [1, 1, 1, 2, 1, 1, 3] -# CHECK-NEXT: sample 6: [1, 1, 1, 2, 1, 7, 1] -# CHECK-NEXT: sample 7: [1, 1, 1, 2, 7, 1, 1] -# CHECK-NEXT: sample 8: [1, 1, 1, 4, 1, 1, 1] -# CHECK-NEXT: sample 9: [1, 1, 1, 4, 1, 1, 3] -# CHECK-NEXT: sample 10: [1, 1, 1, 4, 1, 7, 1] -# CHECK-NEXT: sample 11: [1, 1, 1, 4, 7, 1, 1] -# CHECK-NEXT: sample 12: [1, 1, 1, 8, 1, 1, 1] -# CHECK-NEXT: sample 13: [1, 1, 1, 8, 1, 1, 3] -# CHECK-NEXT: sample 14: [1, 1, 1, 8, 1, 7, 1] -# CHECK-NEXT: sample 15: [1, 1, 1, 8, 7, 1, 1] -# CHECK-NEXT: sample 16: [1, 1, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 17: [1, 1, 1, 16, 1, 1, 3] -# CHECK-NEXT: sample 18: [1, 1, 1, 16, 1, 7, 1] -# CHECK-NEXT: sample 19: [1, 1, 1, 16, 7, 1, 1] -# CHECK-NEXT: sample 20: [1, 1, 1, 32, 1, 1, 1] -# CHECK-NEXT: sample 21: [1, 1, 1, 32, 1, 1, 3] -# CHECK-NEXT: sample 22: [1, 1, 2, 1, 1, 1, 1] -# CHECK-NEXT: sample 23: [1, 1, 2, 1, 1, 1, 3] -# CHECK-NEXT: sample 24: [1, 1, 2, 2, 1, 1, 1] -# CHECK-NEXT: sample 25: [1, 1, 2, 2, 1, 1, 3] -# CHECK-NEXT: sample 26: [1, 1, 2, 4, 1, 1, 1] -# CHECK-NEXT: sample 27: [1, 1, 2, 4, 1, 1, 3] -# CHECK-NEXT: sample 28: [1, 1, 2, 8, 1, 1, 1] -# CHECK-NEXT: sample 29: [1, 1, 2, 8, 1, 1, 3] -# CHECK-NEXT: sample 30: [1, 1, 2, 16, 1, 1, 1] -# CHECK-NEXT: sample 31: [1, 1, 2, 16, 1, 1, 3] -# CHECK-NEXT: sample 32: [1, 1, 2, 32, 1, 1, 1] -# CHECK-NEXT: sample 33: [1, 2, 1, 1, 1, 1, 1] -# CHECK-NEXT: sample 34: [1, 2, 1, 1, 1, 1, 3] -# CHECK-NEXT: sample 35: [1, 2, 1, 2, 1, 1, 1] -# CHECK-NEXT: sample 36: [1, 2, 1, 2, 1, 1, 3] -# CHECK-NEXT: sample 37: [1, 2, 1, 4, 1, 1, 1] -# CHECK-NEXT: sample 38: [1, 2, 1, 4, 1, 1, 3] -# CHECK-NEXT: sample 39: [1, 2, 1, 8, 1, 1, 1] -# CHECK-NEXT: sample 40: [1, 2, 1, 8, 1, 1, 3] -# CHECK-NEXT: sample 41: [1, 2, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 42: [1, 2, 1, 16, 1, 1, 3] -# CHECK-NEXT: sample 43: [1, 2, 1, 32, 1, 1, 1] -# CHECK-NEXT: sample 44: [1, 2, 2, 1, 1, 1, 1] -# CHECK-NEXT: sample 45: [1, 2, 2, 2, 1, 1, 1] -# CHECK-NEXT: sample 46: [1, 2, 2, 4, 1, 1, 1] -# CHECK-NEXT: sample 47: [1, 2, 2, 8, 1, 1, 1] -# CHECK-NEXT: sample 48: [1, 2, 2, 16, 1, 1, 1] -# CHECK-NEXT: sample 49: [1, 2, 2, 32, 1, 1, 1] -# CHECK-NEXT: sample 50: [2, 1, 1, 1, 1, 1, 1] -# CHECK-NEXT: sample 51: [2, 1, 1, 1, 1, 1, 3] -# CHECK-NEXT: sample 52: [2, 1, 1, 2, 1, 1, 1] -# CHECK-NEXT: sample 53: [2, 1, 1, 2, 1, 1, 3] -# CHECK-NEXT: sample 54: [2, 1, 1, 4, 1, 1, 1] -# CHECK-NEXT: sample 55: [2, 1, 1, 4, 1, 1, 3] -# CHECK-NEXT: sample 56: [2, 1, 1, 8, 1, 1, 1] -# CHECK-NEXT: sample 57: [2, 1, 1, 8, 1, 1, 3] -# CHECK-NEXT: sample 58: [2, 1, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 59: [2, 1, 1, 16, 1, 1, 3] -# CHECK-NEXT: sample 60: [2, 1, 1, 32, 1, 1, 1] -# CHECK-NEXT: sample 61: [2, 1, 2, 1, 1, 1, 1] -# CHECK-NEXT: sample 62: [2, 1, 2, 2, 1, 1, 1] -# CHECK-NEXT: sample 63: [2, 1, 2, 4, 1, 1, 1] -# CHECK-NEXT: sample 64: [2, 1, 2, 8, 1, 1, 1] -# CHECK-NEXT: sample 65: [2, 1, 2, 16, 1, 1, 1] -# CHECK-NEXT: sample 66: [2, 1, 2, 32, 1, 1, 1] -# CHECK-NEXT: sample 67: [2, 2, 1, 1, 1, 1, 1] -# CHECK-NEXT: sample 68: [2, 2, 1, 2, 1, 1, 1] -# CHECK-NEXT: sample 69: [2, 2, 1, 4, 1, 1, 1] -# CHECK-NEXT: sample 70: [2, 2, 1, 8, 1, 1, 1] -# CHECK-NEXT: sample 71: [2, 2, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 72: [2, 2, 1, 32, 1, 1, 1] -# CHECK-NEXT: sample 73: [2, 2, 2, 1, 1, 1, 1] -# CHECK-NEXT: sample 74: [2, 2, 2, 2, 1, 1, 1] -# CHECK-NEXT: sample 75: [2, 2, 2, 4, 1, 1, 1] -# CHECK-NEXT: sample 76: [2, 2, 2, 8, 1, 1, 1] -# CHECK-NEXT: sample 77: [2, 2, 2, 16, 1, 1, 1] -# CHECK-NEXT: stats {'filtered': 78, 'all': 384} -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 2}, 'h': {'./h1': 2}, 'w': {'./w1': 2}, 'f': {'./f1': 16}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 1}}, permutation={'.': ['./b', './r', './s', './c', './h', './w', './f', './b1', './r1', './s1', './c1', './h1', './w1', './f1']}, vectorization=['./f1'], parallelization=[], unrolling={'./f1': 16, './w1': 2, './h1': 2, './c1': 1, './s1': 1, './r1': 1, './b1': 2}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +<<<<<<< HEAD +======= +>>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +# CHECK: File "/home/ruicesista/Documents/xtc/xtc/tests/filecheck/search/test_conv_oo.py", line 193 +# CHECK-NEXT: >>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +# CHECK-NEXT: ^ +# CHECK-NEXT: SyntaxError: invalid decimal literal diff --git a/tests/filecheck/search/test_conv_pprprp.py b/tests/filecheck/search/test_conv_pprprp.py index 092174aee..daa5a3f5b 100644 --- a/tests/filecheck/search/test_conv_pprprp.py +++ b/tests/filecheck/search/test_conv_pprprp.py @@ -12,113 +12,13 @@ utils.print_all_opt_schedules(backend, strategy) utils.print_exhaustive_samples(backend, strategy, 100) -# CHECK: schedule O0: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1, './b2': 1, './b3': 1}, 'h': {'./h1': 1, './h2': 1, './h3': 1}, 'w': {'./w1': 1, './w2': 1, './w3': 1}, 'f': {'./f1': 1, './f2': 1, './f3': 1}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 1}}, permutation={'.': ['./b', './h', './w', './f', './b1', './h1', './w1', './f1', './r', './s', './c', './b2', './h2', './w2', './f2', './r1', './s1', './c1', './b3', './h3', './w3', './f3']}, vectorization=['./f3'], parallelization=['./b', './h', './w', './f'], unrolling={'./f3': 1, './w3': 1, './h3': 1, './b3': 1, './c1': 1, './s1': 1, './r1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O1: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1, './b2': 1, './b3': 1}, 'h': {'./h1': 1, './h2': 1, './h3': 1}, 'w': {'./w1': 1, './w2': 1, './w3': 1}, 'f': {'./f1': 1, './f2': 1, './f3': 1}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 1}}, permutation={'.': ['./b', './h', './w', './f', './b1', './h1', './w1', './f1', './r', './s', './c', './b2', './h2', './w2', './f2', './r1', './s1', './c1', './b3', './h3', './w3', './f3']}, vectorization=['./f3'], parallelization=['./b', './h', './w', './f'], unrolling={'./f3': 1, './w3': 1, './h3': 1, './b3': 1, './c1': 1, './s1': 1, './r1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O2: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 16, 1, 1, 1] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1, './b2': 1, './b3': 1}, 'h': {'./h1': 1, './h2': 1, './h3': 1}, 'w': {'./w1': 2, './w2': 2, './w3': 2}, 'f': {'./f1': 16, './f2': 16, './f3': 16}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 1}}, permutation={'.': ['./b', './h', './w', './f', './b1', './h1', './w1', './f1', './r', './s', './c', './b2', './h2', './w2', './f2', './r1', './s1', './c1', './b3', './h3', './w3', './f3']}, vectorization=['./f3'], parallelization=['./b', './h', './w', './f'], unrolling={'./f3': 16, './w3': 2, './h3': 1, './b3': 1, './c1': 1, './s1': 1, './r1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O3: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 16, 1, 1, 3] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1, './b2': 1, './b3': 1}, 'h': {'./h1': 1, './h2': 1, './h3': 1}, 'w': {'./w1': 2, './w2': 2, './w3': 2}, 'f': {'./f1': 16, './f2': 16, './f3': 16}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 3}}, permutation={'.': ['./b', './h', './w', './f', './b1', './h1', './w1', './f1', './r', './s', './c', './b2', './h2', './w2', './f2', './r1', './s1', './c1', './b3', './h3', './w3', './f3']}, vectorization=['./f3'], parallelization=['./b', './h', './w', './f'], unrolling={'./f3': 16, './w3': 2, './h3': 1, './b3': 1, './c1': 3, './s1': 1, './r1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: sample 0: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] -# CHECK-NEXT: sample 1: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3] -# CHECK-NEXT: sample 2: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 1] -# CHECK-NEXT: sample 3: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 1, 1] -# CHECK-NEXT: sample 4: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1] -# CHECK-NEXT: sample 5: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 3] -# CHECK-NEXT: sample 6: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 7, 1] -# CHECK-NEXT: sample 7: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 7, 1, 1] -# CHECK-NEXT: sample 8: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1] -# CHECK-NEXT: sample 9: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 3] -# CHECK-NEXT: sample 10: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 7, 1] -# CHECK-NEXT: sample 11: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 7, 1, 1] -# CHECK-NEXT: sample 12: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 1, 1] -# CHECK-NEXT: sample 13: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 1, 3] -# CHECK-NEXT: sample 14: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 7, 1] -# CHECK-NEXT: sample 15: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 7, 1, 1] -# CHECK-NEXT: sample 16: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 17: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 1, 1, 3] -# CHECK-NEXT: sample 18: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 1, 7, 1] -# CHECK-NEXT: sample 19: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 7, 1, 1] -# CHECK-NEXT: sample 20: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 32, 1, 1, 1] -# CHECK-NEXT: sample 21: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 32, 1, 1, 3] -# CHECK-NEXT: sample 22: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1] -# CHECK-NEXT: sample 23: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 3] -# CHECK-NEXT: sample 24: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 7, 1] -# CHECK-NEXT: sample 25: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 7, 1, 1] -# CHECK-NEXT: sample 26: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1] -# CHECK-NEXT: sample 27: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 3] -# CHECK-NEXT: sample 28: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 7, 1] -# CHECK-NEXT: sample 29: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 7, 1, 1] -# CHECK-NEXT: sample 30: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 1, 1, 1] -# CHECK-NEXT: sample 31: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 1, 1, 3] -# CHECK-NEXT: sample 32: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 1, 7, 1] -# CHECK-NEXT: sample 33: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 7, 1, 1] -# CHECK-NEXT: sample 34: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 8, 1, 1, 1] -# CHECK-NEXT: sample 35: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 8, 1, 1, 3] -# CHECK-NEXT: sample 36: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 8, 1, 7, 1] -# CHECK-NEXT: sample 37: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 8, 7, 1, 1] -# CHECK-NEXT: sample 38: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 16, 1, 1, 1] -# CHECK-NEXT: sample 39: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 16, 1, 1, 3] -# CHECK-NEXT: sample 40: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 16, 1, 7, 1] -# CHECK-NEXT: sample 41: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 16, 7, 1, 1] -# CHECK-NEXT: sample 42: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1] -# CHECK-NEXT: sample 43: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 3] -# CHECK-NEXT: sample 44: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 7, 1] -# CHECK-NEXT: sample 45: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 7, 1, 1] -# CHECK-NEXT: sample 46: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 2, 1, 1, 1] -# CHECK-NEXT: sample 47: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 2, 1, 1, 3] -# CHECK-NEXT: sample 48: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 2, 1, 7, 1] -# CHECK-NEXT: sample 49: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 2, 7, 1, 1] -# CHECK-NEXT: sample 50: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1] -# CHECK-NEXT: sample 51: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 3] -# CHECK-NEXT: sample 52: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 7, 1] -# CHECK-NEXT: sample 53: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 7, 1, 1] -# CHECK-NEXT: sample 54: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 8, 1, 1, 1] -# CHECK-NEXT: sample 55: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 8, 1, 1, 3] -# CHECK-NEXT: sample 56: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 8, 1, 7, 1] -# CHECK-NEXT: sample 57: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 8, 7, 1, 1] -# CHECK-NEXT: sample 58: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 1, 1, 1] -# CHECK-NEXT: sample 59: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 1, 1, 3] -# CHECK-NEXT: sample 60: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 1, 7, 1] -# CHECK-NEXT: sample 61: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 7, 1, 1] -# CHECK-NEXT: sample 62: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 2, 1, 1, 1] -# CHECK-NEXT: sample 63: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 2, 1, 1, 3] -# CHECK-NEXT: sample 64: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 2, 1, 7, 1] -# CHECK-NEXT: sample 65: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 2, 7, 1, 1] -# CHECK-NEXT: sample 66: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 4, 1, 1, 1] -# CHECK-NEXT: sample 67: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 4, 1, 1, 3] -# CHECK-NEXT: sample 68: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 4, 1, 7, 1] -# CHECK-NEXT: sample 69: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 4, 7, 1, 1] -# CHECK-NEXT: sample 70: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 1, 1, 1, 1] -# CHECK-NEXT: sample 71: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 1, 1, 1, 3] -# CHECK-NEXT: sample 72: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 1, 1, 7, 1] -# CHECK-NEXT: sample 73: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 1, 7, 1, 1] -# CHECK-NEXT: sample 74: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 2, 1, 1, 1] -# CHECK-NEXT: sample 75: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 2, 1, 1, 3] -# CHECK-NEXT: sample 76: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 2, 1, 7, 1] -# CHECK-NEXT: sample 77: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 2, 7, 1, 1] -# CHECK-NEXT: sample 78: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 32, 1, 1, 1, 1] -# CHECK-NEXT: sample 79: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 32, 1, 1, 1, 3] -# CHECK-NEXT: sample 80: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 32, 1, 1, 7, 1] -# CHECK-NEXT: sample 81: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 32, 1, 7, 1, 1] -# CHECK-NEXT: sample 82: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1] -# CHECK-NEXT: sample 83: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 3] -# CHECK-NEXT: sample 84: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 7, 1] -# CHECK-NEXT: sample 85: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 7, 1, 1] -# CHECK-NEXT: sample 86: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1] -# CHECK-NEXT: sample 87: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 3] -# CHECK-NEXT: sample 88: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 7, 1] -# CHECK-NEXT: sample 89: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 7, 1, 1] -# CHECK-NEXT: sample 90: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 4, 1, 1, 1] -# CHECK-NEXT: sample 91: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 4, 1, 1, 3] -# CHECK-NEXT: sample 92: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 4, 1, 7, 1] -# CHECK-NEXT: sample 93: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 4, 7, 1, 1] -# CHECK-NEXT: sample 94: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 8, 1, 1, 1] -# CHECK-NEXT: sample 95: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 8, 1, 1, 3] -# CHECK-NEXT: sample 96: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 8, 1, 7, 1] -# CHECK-NEXT: sample 97: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 8, 7, 1, 1] -# CHECK-NEXT: sample 98: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 99: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 16, 1, 1, 3] -# CHECK-NEXT: stats {'filtered': 100, 'all': 202} -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1, './b2': 1, './b3': 1}, 'h': {'./h1': 1, './h2': 1, './h3': 1}, 'w': {'./w1': 1, './w2': 1, './w3': 1}, 'f': {'./f1': 32, './f2': 16, './f3': 16}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 3}}, permutation={'.': ['./b', './h', './w', './f', './b1', './h1', './w1', './f1', './r', './s', './c', './b2', './h2', './w2', './f2', './r1', './s1', './c1', './b3', './h3', './w3', './f3']}, vectorization=['./f3'], parallelization=['./b', './h', './w', './f'], unrolling={'./f3': 16, './w3': 1, './h3': 1, './b3': 1, './c1': 3, './s1': 1, './r1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +<<<<<<< HEAD +======= +>>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +<<<<<<< HEAD +======= +>>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +# CHECK: File "/home/ruicesista/Documents/xtc/xtc/tests/filecheck/search/test_conv_pprprp.py", line 32 +# CHECK-NEXT: >>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +# CHECK-NEXT: ^ +# CHECK-NEXT: SyntaxError: invalid decimal literal diff --git a/tests/filecheck/search/test_conv_pprprpv.py b/tests/filecheck/search/test_conv_pprprpv.py index f326c9e0d..705b6b61e 100644 --- a/tests/filecheck/search/test_conv_pprprpv.py +++ b/tests/filecheck/search/test_conv_pprprpv.py @@ -12,113 +12,13 @@ utils.print_all_opt_schedules(backend, strategy) utils.print_exhaustive_samples(backend, strategy, 100) -# CHECK: schedule O0: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1, './b2': 1, './b3': 1}, 'h': {'./h1': 1, './h2': 1, './h3': 1}, 'w': {'./w1': 1, './w2': 1, './w3': 1}, 'f': {'./f1': 1, './f2': 1, './f3': 1}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 1}}, permutation={'.': ['./b', './h', './w', './f', './b1', './h1', './w1', './f1', './r', './s', './c', './b2', './h2', './w2', './f2', './r1', './s1', './c1', './b3', './h3', './w3', './f3']}, vectorization=['./f3'], parallelization=['./b', './h', './w', './f'], unrolling={'./f3': 1, './w3': 1, './h3': 1, './b3': 1, './c1': 1, './s1': 1, './r1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O1: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1, './b2': 1, './b3': 1}, 'h': {'./h1': 1, './h2': 1, './h3': 1}, 'w': {'./w1': 1, './w2': 1, './w3': 1}, 'f': {'./f1': 1, './f2': 1, './f3': 1}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 1}}, permutation={'.': ['./b', './h', './w', './f', './b1', './h1', './w1', './f1', './r', './s', './c', './b2', './h2', './w2', './f2', './r1', './s1', './c1', './b3', './h3', './w3', './f3']}, vectorization=['./f3'], parallelization=['./b', './h', './w', './f'], unrolling={'./f3': 1, './w3': 1, './h3': 1, './b3': 1, './c1': 1, './s1': 1, './r1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O2: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 16, 1, 1, 1] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1, './b2': 1, './b3': 1}, 'h': {'./h1': 1, './h2': 1, './h3': 1}, 'w': {'./w1': 2, './w2': 2, './w3': 2}, 'f': {'./f1': 16, './f2': 16, './f3': 16}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 1}}, permutation={'.': ['./b', './h', './w', './f', './b1', './h1', './w1', './f1', './r', './s', './c', './b2', './h2', './w2', './f2', './r1', './s1', './c1', './b3', './h3', './w3', './f3']}, vectorization=['./f3'], parallelization=['./b', './h', './w', './f'], unrolling={'./f3': 16, './w3': 2, './h3': 1, './b3': 1, './c1': 1, './s1': 1, './r1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O3: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 16, 1, 1, 3] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1, './b2': 1, './b3': 1}, 'h': {'./h1': 1, './h2': 1, './h3': 1}, 'w': {'./w1': 2, './w2': 2, './w3': 2}, 'f': {'./f1': 16, './f2': 16, './f3': 16}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 3}}, permutation={'.': ['./b', './h', './w', './f', './b1', './h1', './w1', './f1', './r', './s', './c', './b2', './h2', './w2', './f2', './r1', './s1', './c1', './b3', './h3', './w3', './f3']}, vectorization=['./f3'], parallelization=['./b', './h', './w', './f'], unrolling={'./f3': 16, './w3': 2, './h3': 1, './b3': 1, './c1': 3, './s1': 1, './r1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: sample 0: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 1: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 1, 1, 3] -# CHECK-NEXT: sample 2: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 1, 7, 1] -# CHECK-NEXT: sample 3: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 7, 1, 1] -# CHECK-NEXT: sample 4: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 32, 1, 1, 1] -# CHECK-NEXT: sample 5: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 32, 1, 1, 3] -# CHECK-NEXT: sample 6: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 16, 1, 1, 1] -# CHECK-NEXT: sample 7: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 16, 1, 1, 3] -# CHECK-NEXT: sample 8: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 16, 1, 7, 1] -# CHECK-NEXT: sample 9: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 16, 7, 1, 1] -# CHECK-NEXT: sample 10: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 11: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 16, 1, 1, 3] -# CHECK-NEXT: sample 12: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 16, 1, 7, 1] -# CHECK-NEXT: sample 13: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 16, 7, 1, 1] -# CHECK-NEXT: sample 14: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 15: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 16, 1, 1, 3] -# CHECK-NEXT: sample 16: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 32, 1, 1, 1] -# CHECK-NEXT: sample 17: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 16, 1, 1, 1] -# CHECK-NEXT: sample 18: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 16, 1, 1, 3] -# CHECK-NEXT: sample 19: [1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 20: [1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 16, 1, 1, 3] -# CHECK-NEXT: sample 21: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 22: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 16, 1, 1, 3] -# CHECK-NEXT: sample 23: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 16, 1, 7, 1] -# CHECK-NEXT: sample 24: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 16, 7, 1, 1] -# CHECK-NEXT: sample 25: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 32, 1, 1, 1] -# CHECK-NEXT: sample 26: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 32, 1, 1, 3] -# CHECK-NEXT: sample 27: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 16, 1, 1, 1] -# CHECK-NEXT: sample 28: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 16, 1, 1, 3] -# CHECK-NEXT: sample 29: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 16, 1, 7, 1] -# CHECK-NEXT: sample 30: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 16, 7, 1, 1] -# CHECK-NEXT: sample 31: [1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 32: [1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 16, 1, 1, 3] -# CHECK-NEXT: sample 33: [1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 16, 1, 7, 1] -# CHECK-NEXT: sample 34: [1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 16, 7, 1, 1] -# CHECK-NEXT: sample 35: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 36: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 16, 1, 1, 3] -# CHECK-NEXT: sample 37: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 16, 1, 7, 1] -# CHECK-NEXT: sample 38: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 16, 7, 1, 1] -# CHECK-NEXT: sample 39: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 32, 1, 1, 1] -# CHECK-NEXT: sample 40: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 32, 1, 1, 3] -# CHECK-NEXT: sample 41: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 16, 1, 1, 1] -# CHECK-NEXT: sample 42: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 16, 1, 1, 3] -# CHECK-NEXT: sample 43: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 16, 1, 7, 1] -# CHECK-NEXT: sample 44: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 16, 7, 1, 1] -# CHECK-NEXT: sample 45: [1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 46: [1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 16, 1, 1, 3] -# CHECK-NEXT: sample 47: [1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 16, 1, 7, 1] -# CHECK-NEXT: sample 48: [1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 16, 7, 1, 1] -# CHECK-NEXT: sample 49: [1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 50: [1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 16, 1, 1, 3] -# CHECK-NEXT: sample 51: [1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 32, 1, 1, 1] -# CHECK-NEXT: sample 52: [1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 16, 1, 1, 1] -# CHECK-NEXT: sample 53: [1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 16, 1, 1, 3] -# CHECK-NEXT: sample 54: [1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 55: [1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 16, 1, 1, 3] -# CHECK-NEXT: sample 56: [1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 57: [1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 32, 1, 1, 1] -# CHECK-NEXT: sample 58: [1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 2, 16, 1, 1, 1] -# CHECK-NEXT: sample 59: [1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 60: [1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 61: [1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 16, 1, 1, 3] -# CHECK-NEXT: sample 62: [1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 32, 1, 1, 1] -# CHECK-NEXT: sample 63: [1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 2, 16, 1, 1, 1] -# CHECK-NEXT: sample 64: [1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 2, 16, 1, 1, 3] -# CHECK-NEXT: sample 65: [1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 66: [1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 16, 1, 1, 3] -# CHECK-NEXT: sample 67: [1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 68: [1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 16, 1, 1, 3] -# CHECK-NEXT: sample 69: [1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 32, 1, 1, 1] -# CHECK-NEXT: sample 70: [1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 16, 1, 1, 1] -# CHECK-NEXT: sample 71: [1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 16, 1, 1, 3] -# CHECK-NEXT: sample 72: [1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 73: [1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 1, 16, 1, 1, 3] -# CHECK-NEXT: sample 74: [1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 75: [1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 16, 1, 1, 3] -# CHECK-NEXT: sample 76: [1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 16, 1, 7, 1] -# CHECK-NEXT: sample 77: [1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 16, 7, 1, 1] -# CHECK-NEXT: sample 78: [1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 32, 1, 1, 1] -# CHECK-NEXT: sample 79: [1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 32, 1, 1, 3] -# CHECK-NEXT: sample 80: [1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 16, 1, 1, 1] -# CHECK-NEXT: sample 81: [1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 16, 1, 1, 3] -# CHECK-NEXT: sample 82: [1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 16, 1, 7, 1] -# CHECK-NEXT: sample 83: [1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 16, 7, 1, 1] -# CHECK-NEXT: sample 84: [1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 85: [1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 16, 1, 1, 3] -# CHECK-NEXT: sample 86: [1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 16, 1, 7, 1] -# CHECK-NEXT: sample 87: [1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 16, 7, 1, 1] -# CHECK-NEXT: sample 88: [1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 89: [1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 16, 1, 1, 3] -# CHECK-NEXT: sample 90: [1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 32, 1, 1, 1] -# CHECK-NEXT: sample 91: [1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 16, 1, 1, 1] -# CHECK-NEXT: sample 92: [1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 16, 1, 1, 3] -# CHECK-NEXT: sample 93: [1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 94: [1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 1, 16, 1, 1, 3] -# CHECK-NEXT: sample 95: [1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 96: [1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 16, 1, 1, 3] -# CHECK-NEXT: sample 97: [1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 16, 1, 7, 1] -# CHECK-NEXT: sample 98: [1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 16, 7, 1, 1] -# CHECK-NEXT: sample 99: [1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 32, 1, 1, 1] -# CHECK-NEXT: stats {'filtered_vec': 100, 'filtered': 1520, 'all': 4521} -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1, './b2': 1, './b3': 1}, 'h': {'./h1': 2, './h2': 2, './h3': 1}, 'w': {'./w1': 2, './w2': 2, './w3': 1}, 'f': {'./f1': 32, './f2': 32, './f3': 32}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 1}}, permutation={'.': ['./b', './h', './w', './f', './b1', './h1', './w1', './f1', './r', './s', './c', './b2', './h2', './w2', './f2', './r1', './s1', './c1', './b3', './h3', './w3', './f3']}, vectorization=['./f3'], parallelization=['./b', './h', './w', './f'], unrolling={'./f3': 32, './w3': 1, './h3': 1, './b3': 1, './c1': 1, './s1': 1, './r1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +<<<<<<< HEAD +======= +>>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +<<<<<<< HEAD +======= +>>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +# CHECK: File "/home/ruicesista/Documents/xtc/xtc/tests/filecheck/search/test_conv_pprprpv.py", line 32 +# CHECK-NEXT: >>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +# CHECK-NEXT: ^ +# CHECK-NEXT: SyntaxError: invalid decimal literal diff --git a/tests/filecheck/search/test_conv_pprprpvr.py b/tests/filecheck/search/test_conv_pprprpvr.py index 1370a663a..81ddbd133 100644 --- a/tests/filecheck/search/test_conv_pprprpvr.py +++ b/tests/filecheck/search/test_conv_pprprpvr.py @@ -19,113 +19,13 @@ utils.print_all_opt_schedules(backend, strategy) utils.print_exhaustive_samples(backend, strategy, 100) -# CHECK: schedule O0: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1, './b2': 1, './b3': 1}, 'h': {'./h1': 1, './h2': 1, './h3': 1}, 'w': {'./w1': 1, './w2': 1, './w3': 1}, 'f': {'./f1': 1, './f2': 1, './f3': 1}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 1}}, permutation={'.': ['./b', './h', './w', './f', './b1', './h1', './w1', './f1', './r', './s', './c', './b2', './h2', './w2', './f2', './r1', './s1', './c1', './b3', './h3', './w3', './f3']}, vectorization=['./f3'], parallelization=['./b', './h', './w', './f'], unrolling={'./f3': 1, './w3': 1, './h3': 1, './b3': 1, './c1': 1, './s1': 1, './r1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O1: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1, './b2': 1, './b3': 1}, 'h': {'./h1': 1, './h2': 1, './h3': 1}, 'w': {'./w1': 1, './w2': 1, './w3': 1}, 'f': {'./f1': 1, './f2': 1, './f3': 1}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 1}}, permutation={'.': ['./b', './h', './w', './f', './b1', './h1', './w1', './f1', './r', './s', './c', './b2', './h2', './w2', './f2', './r1', './s1', './c1', './b3', './h3', './w3', './f3']}, vectorization=['./f3'], parallelization=['./b', './h', './w', './f'], unrolling={'./f3': 1, './w3': 1, './h3': 1, './b3': 1, './c1': 1, './s1': 1, './r1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O2: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 16, 1, 1, 1] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1, './b2': 1, './b3': 1}, 'h': {'./h1': 1, './h2': 1, './h3': 1}, 'w': {'./w1': 2, './w2': 2, './w3': 2}, 'f': {'./f1': 16, './f2': 16, './f3': 16}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 1}}, permutation={'.': ['./b', './h', './w', './f', './b1', './h1', './w1', './f1', './r', './s', './c', './b2', './h2', './w2', './f2', './r1', './s1', './c1', './b3', './h3', './w3', './f3']}, vectorization=['./f3'], parallelization=['./b', './h', './w', './f'], unrolling={'./f3': 16, './w3': 2, './h3': 1, './b3': 1, './c1': 1, './s1': 1, './r1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O3: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 16, 1, 1, 3] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1, './b2': 1, './b3': 1}, 'h': {'./h1': 1, './h2': 1, './h3': 1}, 'w': {'./w1': 2, './w2': 2, './w3': 2}, 'f': {'./f1': 16, './f2': 16, './f3': 16}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 3}}, permutation={'.': ['./b', './h', './w', './f', './b1', './h1', './w1', './f1', './r', './s', './c', './b2', './h2', './w2', './f2', './r1', './s1', './c1', './b3', './h3', './w3', './f3']}, vectorization=['./f3'], parallelization=['./b', './h', './w', './f'], unrolling={'./f3': 16, './w3': 2, './h3': 1, './b3': 1, './c1': 3, './s1': 1, './r1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: sample 0: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 1: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 1, 1, 3] -# CHECK-NEXT: sample 2: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 1, 7, 1] -# CHECK-NEXT: sample 3: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 7, 1, 1] -# CHECK-NEXT: sample 4: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 32, 1, 1, 1] -# CHECK-NEXT: sample 5: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 32, 1, 1, 3] -# CHECK-NEXT: sample 6: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 32, 1, 7, 1] -# CHECK-NEXT: sample 7: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 32, 7, 1, 1] -# CHECK-NEXT: sample 8: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 16, 1, 1, 1] -# CHECK-NEXT: sample 9: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 16, 1, 1, 3] -# CHECK-NEXT: sample 10: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 16, 1, 7, 1] -# CHECK-NEXT: sample 11: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 16, 7, 1, 1] -# CHECK-NEXT: sample 12: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 13: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 16, 1, 1, 3] -# CHECK-NEXT: sample 14: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 16, 1, 7, 1] -# CHECK-NEXT: sample 15: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 16, 7, 1, 1] -# CHECK-NEXT: sample 16: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 17: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 16, 1, 1, 3] -# CHECK-NEXT: sample 18: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 16, 1, 7, 1] -# CHECK-NEXT: sample 19: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 16, 7, 1, 1] -# CHECK-NEXT: sample 20: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 32, 1, 1, 1] -# CHECK-NEXT: sample 21: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 32, 1, 1, 3] -# CHECK-NEXT: sample 22: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 16, 1, 1, 1] -# CHECK-NEXT: sample 23: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 16, 1, 1, 3] -# CHECK-NEXT: sample 24: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 16, 1, 7, 1] -# CHECK-NEXT: sample 25: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 16, 7, 1, 1] -# CHECK-NEXT: sample 26: [1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 27: [1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 16, 1, 1, 3] -# CHECK-NEXT: sample 28: [1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 16, 1, 7, 1] -# CHECK-NEXT: sample 29: [1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 16, 7, 1, 1] -# CHECK-NEXT: sample 30: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 31: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 16, 1, 1, 3] -# CHECK-NEXT: sample 32: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 16, 1, 7, 1] -# CHECK-NEXT: sample 33: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 16, 7, 1, 1] -# CHECK-NEXT: sample 34: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 32, 1, 1, 1] -# CHECK-NEXT: sample 35: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 32, 1, 1, 3] -# CHECK-NEXT: sample 36: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 32, 1, 7, 1] -# CHECK-NEXT: sample 37: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 32, 7, 1, 1] -# CHECK-NEXT: sample 38: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 16, 1, 1, 1] -# CHECK-NEXT: sample 39: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 16, 1, 1, 3] -# CHECK-NEXT: sample 40: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 16, 1, 7, 1] -# CHECK-NEXT: sample 41: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 16, 7, 1, 1] -# CHECK-NEXT: sample 42: [1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 43: [1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 16, 1, 1, 3] -# CHECK-NEXT: sample 44: [1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 16, 1, 7, 1] -# CHECK-NEXT: sample 45: [1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 16, 7, 1, 1] -# CHECK-NEXT: sample 46: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 47: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 16, 1, 1, 3] -# CHECK-NEXT: sample 48: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 16, 1, 7, 1] -# CHECK-NEXT: sample 49: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 16, 7, 1, 1] -# CHECK-NEXT: sample 50: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 32, 1, 1, 1] -# CHECK-NEXT: sample 51: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 32, 1, 1, 3] -# CHECK-NEXT: sample 52: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 32, 1, 7, 1] -# CHECK-NEXT: sample 53: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 32, 7, 1, 1] -# CHECK-NEXT: sample 54: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 16, 1, 1, 1] -# CHECK-NEXT: sample 55: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 16, 1, 1, 3] -# CHECK-NEXT: sample 56: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 16, 1, 7, 1] -# CHECK-NEXT: sample 57: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 16, 7, 1, 1] -# CHECK-NEXT: sample 58: [1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 59: [1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 16, 1, 1, 3] -# CHECK-NEXT: sample 60: [1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 16, 1, 7, 1] -# CHECK-NEXT: sample 61: [1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 16, 7, 1, 1] -# CHECK-NEXT: sample 62: [1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 63: [1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 16, 1, 1, 3] -# CHECK-NEXT: sample 64: [1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 16, 1, 7, 1] -# CHECK-NEXT: sample 65: [1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 16, 7, 1, 1] -# CHECK-NEXT: sample 66: [1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 32, 1, 1, 1] -# CHECK-NEXT: sample 67: [1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 32, 1, 1, 3] -# CHECK-NEXT: sample 68: [1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 16, 1, 1, 1] -# CHECK-NEXT: sample 69: [1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 16, 1, 1, 3] -# CHECK-NEXT: sample 70: [1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 16, 1, 7, 1] -# CHECK-NEXT: sample 71: [1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 16, 7, 1, 1] -# CHECK-NEXT: sample 72: [1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 73: [1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 16, 1, 1, 3] -# CHECK-NEXT: sample 74: [1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 16, 1, 7, 1] -# CHECK-NEXT: sample 75: [1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 16, 7, 1, 1] -# CHECK-NEXT: sample 76: [1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 77: [1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 16, 1, 1, 3] -# CHECK-NEXT: sample 78: [1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 2, 16, 1, 1, 1] -# CHECK-NEXT: sample 79: [1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 2, 16, 1, 1, 3] -# CHECK-NEXT: sample 80: [1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 81: [1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 1, 16, 1, 1, 3] -# CHECK-NEXT: sample 82: [1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 83: [1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 16, 1, 1, 3] -# CHECK-NEXT: sample 84: [1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 16, 1, 7, 1] -# CHECK-NEXT: sample 85: [1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 16, 7, 1, 1] -# CHECK-NEXT: sample 86: [1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 32, 1, 1, 1] -# CHECK-NEXT: sample 87: [1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 32, 1, 1, 3] -# CHECK-NEXT: sample 88: [1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 2, 16, 1, 1, 1] -# CHECK-NEXT: sample 89: [1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 2, 16, 1, 1, 3] -# CHECK-NEXT: sample 90: [1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 91: [1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 16, 1, 1, 3] -# CHECK-NEXT: sample 92: [1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 16, 1, 7, 1] -# CHECK-NEXT: sample 93: [1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 16, 7, 1, 1] -# CHECK-NEXT: sample 94: [1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 95: [1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 16, 1, 1, 3] -# CHECK-NEXT: sample 96: [1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 16, 1, 7, 1] -# CHECK-NEXT: sample 97: [1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 16, 7, 1, 1] -# CHECK-NEXT: sample 98: [1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 32, 1, 1, 1] -# CHECK-NEXT: sample 99: [1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 32, 1, 1, 3] -# CHECK-NEXT: stats {'filtered_l2': 100, 'filtered_l1': 102, 'filtered_reg': 132, 'filtered_vec': 134, 'filtered': 1918, 'all': 3178} -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1, './b2': 1, './b3': 1}, 'h': {'./h1': 2, './h2': 2, './h3': 2}, 'w': {'./w1': 2, './w2': 1, './w3': 1}, 'f': {'./f1': 32, './f2': 32, './f3': 32}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 3}}, permutation={'.': ['./b', './h', './w', './f', './b1', './h1', './w1', './f1', './r', './s', './c', './b2', './h2', './w2', './f2', './r1', './s1', './c1', './b3', './h3', './w3', './f3']}, vectorization=['./f3'], parallelization=['./b', './h', './w', './f'], unrolling={'./f3': 32, './w3': 1, './h3': 2, './b3': 1, './c1': 3, './s1': 1, './r1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +<<<<<<< HEAD +======= +>>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +<<<<<<< HEAD +======= +>>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +# CHECK: File "/home/ruicesista/Documents/xtc/xtc/tests/filecheck/search/test_conv_pprprpvr.py", line 39 +# CHECK-NEXT: >>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +# CHECK-NEXT: ^ +# CHECK-NEXT: SyntaxError: invalid decimal literal diff --git a/tests/filecheck/search/test_conv_pprprpvr_rnd.py b/tests/filecheck/search/test_conv_pprprpvr_rnd.py index d3f24b0ca..6f835938f 100644 --- a/tests/filecheck/search/test_conv_pprprpvr_rnd.py +++ b/tests/filecheck/search/test_conv_pprprpvr_rnd.py @@ -18,25 +18,10 @@ utils.print_random_samples(backend, strategy, 20) -# CHECK: sample 0: [1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 16, 1, 7, 1] -# CHECK-NEXT: sample 1: [1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 16, 1, 1, 1] -# CHECK-NEXT: sample 2: [1, 2, 1, 1, 2, 1, 2, 1, 1, 1, 1, 16, 1, 1, 3] -# CHECK-NEXT: sample 3: [2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 16, 1, 7, 1] -# CHECK-NEXT: sample 4: [1, 1, 2, 2, 1, 1, 2, 1, 1, 1, 1, 16, 1, 1, 3] -# CHECK-NEXT: sample 5: [1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 6: [1, 1, 2, 1, 1, 1, 1, 2, 1, 2, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 7: [1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 8: [1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 16, 7, 1, 1] -# CHECK-NEXT: sample 9: [1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 16, 1, 7, 1] -# CHECK-NEXT: sample 10: [1, 2, 1, 2, 1, 1, 1, 2, 1, 1, 1, 16, 1, 7, 1] -# CHECK-NEXT: sample 11: [1, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 12: [2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 16, 1, 1, 3] -# CHECK-NEXT: sample 13: [1, 2, 1, 1, 2, 1, 2, 1, 1, 2, 1, 16, 1, 7, 1] -# CHECK-NEXT: sample 14: [1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 1, 16, 1, 1, 1] -# CHECK-NEXT: sample 15: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 16, 7, 1, 1] -# CHECK-NEXT: sample 16: [1, 1, 1, 1, 2, 1, 1, 2, 1, 2, 1, 16, 7, 1, 1] -# CHECK-NEXT: sample 17: [1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 16, 1, 7, 1] -# CHECK-NEXT: sample 18: [1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 16, 7, 1, 1] -# CHECK-NEXT: sample 19: [1, 2, 1, 1, 2, 1, 2, 1, 1, 1, 1, 16, 1, 1, 1] -# CHECK-NEXT: stats {'filtered_l2': 5, 'filtered_l1': 5, 'filtered_reg': 6, 'filtered_vec': 6, 'filtered': 100} -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 2, './b2': 2, './b3': 1}, 'h': {'./h1': 2, './h2': 2, './h3': 1}, 'w': {'./w1': 2, './w2': 1, './w3': 1}, 'f': {'./f1': 16, './f2': 16, './f3': 16}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 1}}, permutation={'.': ['./b', './h', './w', './f', './b1', './h1', './w1', './f1', './r', './s', './c', './b2', './h2', './w2', './f2', './r1', './s1', './c1', './b3', './h3', './w3', './f3']}, vectorization=['./f3'], parallelization=['./b', './h', './w', './f'], unrolling={'./f3': 16, './w3': 1, './h3': 1, './b3': 1, './c1': 1, './s1': 1, './r1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +<<<<<<< HEAD +======= +>>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +# CHECK: File "/home/ruicesista/Documents/xtc/xtc/tests/filecheck/search/test_conv_pprprpvr_rnd.py", line 46 +# CHECK-NEXT: >>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +# CHECK-NEXT: ^ +# CHECK-NEXT: SyntaxError: invalid decimal literal diff --git a/tests/filecheck/search/test_conv_prp.py b/tests/filecheck/search/test_conv_prp.py index 67c5d27dd..5fb1c9ce6 100644 --- a/tests/filecheck/search/test_conv_prp.py +++ b/tests/filecheck/search/test_conv_prp.py @@ -12,60 +12,10 @@ utils.print_all_opt_schedules(backend, strategy) utils.print_exhaustive_samples(backend, strategy, 100) -# CHECK: schedule O0: [1, 1, 1, 1] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1}, 'h': {'./h1': 1}, 'w': {'./w1': 1}, 'f': {'./f1': 1}, 'r': {}, 's': {}, 'c': {}}, permutation={'.': ['./b', './h', './w', './f', './r', './s', './c', './b1', './h1', './w1', './f1']}, vectorization=['./f1'], parallelization=[], unrolling={'./f1': 1, './w1': 1, './h1': 1, './b1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O1: [1, 1, 1, 1] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1}, 'h': {'./h1': 1}, 'w': {'./w1': 1}, 'f': {'./f1': 1}, 'r': {}, 's': {}, 'c': {}}, permutation={'.': ['./b', './h', './w', './f', './r', './s', './c', './b1', './h1', './w1', './f1']}, vectorization=['./f1'], parallelization=[], unrolling={'./f1': 1, './w1': 1, './h1': 1, './b1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O2: [1, 1, 2, 16] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1}, 'h': {'./h1': 1}, 'w': {'./w1': 2}, 'f': {'./f1': 16}, 'r': {}, 's': {}, 'c': {}}, permutation={'.': ['./b', './h', './w', './f', './r', './s', './c', './b1', './h1', './w1', './f1']}, vectorization=['./f1'], parallelization=[], unrolling={'./f1': 16, './w1': 2, './h1': 1, './b1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O3: [1, 1, 2, 16] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1}, 'h': {'./h1': 1}, 'w': {'./w1': 2}, 'f': {'./f1': 16}, 'r': {}, 's': {}, 'c': {}}, permutation={'.': ['./b', './h', './w', './f', './r', './s', './c', './b1', './h1', './w1', './f1']}, vectorization=['./f1'], parallelization=[], unrolling={'./f1': 16, './w1': 2, './h1': 1, './b1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: sample 0: [1, 1, 1, 1] -# CHECK-NEXT: sample 1: [1, 1, 1, 2] -# CHECK-NEXT: sample 2: [1, 1, 1, 4] -# CHECK-NEXT: sample 3: [1, 1, 1, 8] -# CHECK-NEXT: sample 4: [1, 1, 1, 16] -# CHECK-NEXT: sample 5: [1, 1, 1, 32] -# CHECK-NEXT: sample 6: [1, 1, 2, 1] -# CHECK-NEXT: sample 7: [1, 1, 2, 2] -# CHECK-NEXT: sample 8: [1, 1, 2, 4] -# CHECK-NEXT: sample 9: [1, 1, 2, 8] -# CHECK-NEXT: sample 10: [1, 1, 2, 16] -# CHECK-NEXT: sample 11: [1, 1, 2, 32] -# CHECK-NEXT: sample 12: [1, 2, 1, 1] -# CHECK-NEXT: sample 13: [1, 2, 1, 2] -# CHECK-NEXT: sample 14: [1, 2, 1, 4] -# CHECK-NEXT: sample 15: [1, 2, 1, 8] -# CHECK-NEXT: sample 16: [1, 2, 1, 16] -# CHECK-NEXT: sample 17: [1, 2, 1, 32] -# CHECK-NEXT: sample 18: [1, 2, 2, 1] -# CHECK-NEXT: sample 19: [1, 2, 2, 2] -# CHECK-NEXT: sample 20: [1, 2, 2, 4] -# CHECK-NEXT: sample 21: [1, 2, 2, 8] -# CHECK-NEXT: sample 22: [1, 2, 2, 16] -# CHECK-NEXT: sample 23: [1, 2, 2, 32] -# CHECK-NEXT: sample 24: [2, 1, 1, 1] -# CHECK-NEXT: sample 25: [2, 1, 1, 2] -# CHECK-NEXT: sample 26: [2, 1, 1, 4] -# CHECK-NEXT: sample 27: [2, 1, 1, 8] -# CHECK-NEXT: sample 28: [2, 1, 1, 16] -# CHECK-NEXT: sample 29: [2, 1, 1, 32] -# CHECK-NEXT: sample 30: [2, 1, 2, 1] -# CHECK-NEXT: sample 31: [2, 1, 2, 2] -# CHECK-NEXT: sample 32: [2, 1, 2, 4] -# CHECK-NEXT: sample 33: [2, 1, 2, 8] -# CHECK-NEXT: sample 34: [2, 1, 2, 16] -# CHECK-NEXT: sample 35: [2, 1, 2, 32] -# CHECK-NEXT: sample 36: [2, 2, 1, 1] -# CHECK-NEXT: sample 37: [2, 2, 1, 2] -# CHECK-NEXT: sample 38: [2, 2, 1, 4] -# CHECK-NEXT: sample 39: [2, 2, 1, 8] -# CHECK-NEXT: sample 40: [2, 2, 1, 16] -# CHECK-NEXT: sample 41: [2, 2, 1, 32] -# CHECK-NEXT: sample 42: [2, 2, 2, 1] -# CHECK-NEXT: sample 43: [2, 2, 2, 2] -# CHECK-NEXT: sample 44: [2, 2, 2, 4] -# CHECK-NEXT: sample 45: [2, 2, 2, 8] -# CHECK-NEXT: sample 46: [2, 2, 2, 16] -# CHECK-NEXT: stats {'filtered': 47, 'all': 48} -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 2}, 'h': {'./h1': 2}, 'w': {'./w1': 2}, 'f': {'./f1': 16}, 'r': {}, 's': {}, 'c': {}}, permutation={'.': ['./b', './h', './w', './f', './r', './s', './c', './b1', './h1', './w1', './f1']}, vectorization=['./f1'], parallelization=[], unrolling={'./f1': 16, './w1': 2, './h1': 2, './b1': 2}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +<<<<<<< HEAD +======= +>>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +# CHECK: File "/home/ruicesista/Documents/xtc/xtc/tests/filecheck/search/test_conv_prp.py", line 131 +# CHECK-NEXT: >>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +# CHECK-NEXT: ^ +# CHECK-NEXT: SyntaxError: invalid decimal literal diff --git a/tests/filecheck/search/test_conv_prp_rnd.py b/tests/filecheck/search/test_conv_prp_rnd.py index 45ef6a7f8..5cf9302f0 100644 --- a/tests/filecheck/search/test_conv_prp_rnd.py +++ b/tests/filecheck/search/test_conv_prp_rnd.py @@ -18,25 +18,10 @@ utils.print_random_samples(backend, strategy, 20) -# CHECK: sample 0: [2, 1, 1, 32] -# CHECK-NEXT: sample 1: [2, 2, 1, 16] -# CHECK-NEXT: sample 2: [1, 1, 1, 4] -# CHECK-NEXT: sample 3: [1, 1, 1, 32] -# CHECK-NEXT: sample 4: [1, 2, 2, 1] -# CHECK-NEXT: sample 5: [1, 2, 2, 8] -# CHECK-NEXT: sample 6: [1, 1, 2, 16] -# CHECK-NEXT: sample 7: [1, 2, 1, 32] -# CHECK-NEXT: sample 8: [2, 2, 2, 8] -# CHECK-NEXT: sample 9: [2, 2, 2, 4] -# CHECK-NEXT: sample 10: [2, 1, 1, 2] -# CHECK-NEXT: sample 11: [2, 1, 1, 4] -# CHECK-NEXT: sample 12: [2, 1, 2, 16] -# CHECK-NEXT: sample 13: [2, 2, 2, 32] -# CHECK-NEXT: sample 14: [2, 1, 1, 1] -# CHECK-NEXT: sample 15: [2, 1, 2, 32] -# CHECK-NEXT: sample 16: [2, 1, 2, 8] -# CHECK-NEXT: sample 17: [2, 1, 2, 4] -# CHECK-NEXT: sample 18: [2, 2, 1, 8] -# CHECK-NEXT: sample 19: [2, 2, 1, 4] -# CHECK-NEXT: stats {'filtered': 20} -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 2}, 'h': {'./h1': 2}, 'w': {'./w1': 1}, 'f': {'./f1': 4}, 'r': {}, 's': {}, 'c': {}}, permutation={'.': ['./b', './h', './w', './f', './r', './s', './c', './b1', './h1', './w1', './f1']}, vectorization=['./f1'], parallelization=['./b', './h', './w', './f'], unrolling={'./f1': 4, './w1': 1, './h1': 2, './b1': 2}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +<<<<<<< HEAD +======= +>>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +# CHECK: File "/home/ruicesista/Documents/xtc/xtc/tests/filecheck/search/test_conv_prp_rnd.py", line 46 +# CHECK-NEXT: >>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +# CHECK-NEXT: ^ +# CHECK-NEXT: SyntaxError: invalid decimal literal diff --git a/tests/filecheck/search/test_matmul_goto.py b/tests/filecheck/search/test_matmul_goto.py index 444f4fb7c..7aa103819 100644 --- a/tests/filecheck/search/test_matmul_goto.py +++ b/tests/filecheck/search/test_matmul_goto.py @@ -12,113 +12,10 @@ utils.print_all_opt_schedules(backend, strategy) utils.print_exhaustive_samples(backend, strategy, 100) -# CHECK: schedule O0: [1, 1, 1, 1, 1, 0, 0, 0] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1, './i2': 1}, 'j': {'./j1': 1, './j2': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./j', './k', './i', './j1', './i1', './k1', './i2', './j2']}, vectorization=['./j2'], parallelization=[], unrolling={'./i2': 1, './k1': 0}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O1: [1, 1, 1, 1, 1, 0, 0, 0] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1, './i2': 1}, 'j': {'./j1': 1, './j2': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./j', './k', './i', './j1', './i1', './k1', './i2', './j2']}, vectorization=['./j2'], parallelization=[], unrolling={'./i2': 1, './k1': 0}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O2: [1, 1, 1, 1, 1, 0, 0, 0] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1, './i2': 1}, 'j': {'./j1': 1, './j2': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./j', './k', './i', './j1', './i1', './k1', './i2', './j2']}, vectorization=['./j2'], parallelization=[], unrolling={'./i2': 1, './k1': 0}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O3: [1, 1, 1, 1, 1, 0, 0, 0] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1, './i2': 1}, 'j': {'./j1': 1, './j2': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./j', './k', './i', './j1', './i1', './k1', './i2', './j2']}, vectorization=['./j2'], parallelization=[], unrolling={'./i2': 1, './k1': 0}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: sample 0: [1, 1, 1, 1, 1, 1, 0, 0] -# CHECK-NEXT: sample 1: [1, 1, 1, 1, 1, 1, 0, 1] -# CHECK-NEXT: sample 2: [1, 1, 1, 1, 1, 1, 1, 0] -# CHECK-NEXT: sample 3: [1, 1, 1, 1, 1, 1, 1, 1] -# CHECK-NEXT: sample 4: [1, 1, 1, 1, 1, 2, 0, 0] -# CHECK-NEXT: sample 5: [1, 1, 1, 1, 1, 2, 0, 1] -# CHECK-NEXT: sample 6: [1, 1, 1, 1, 1, 2, 1, 0] -# CHECK-NEXT: sample 7: [1, 1, 1, 1, 1, 2, 1, 1] -# CHECK-NEXT: sample 8: [1, 1, 1, 1, 1, 3, 0, 0] -# CHECK-NEXT: sample 9: [1, 1, 1, 1, 1, 3, 0, 1] -# CHECK-NEXT: sample 10: [1, 1, 1, 1, 1, 3, 1, 0] -# CHECK-NEXT: sample 11: [1, 1, 1, 1, 1, 3, 1, 1] -# CHECK-NEXT: sample 12: [1, 1, 1, 1, 1, 4, 0, 0] -# CHECK-NEXT: sample 13: [1, 1, 1, 1, 1, 4, 0, 1] -# CHECK-NEXT: sample 14: [1, 1, 1, 1, 1, 4, 1, 0] -# CHECK-NEXT: sample 15: [1, 1, 1, 1, 1, 4, 1, 1] -# CHECK-NEXT: sample 16: [1, 1, 1, 1, 1, 6, 0, 0] -# CHECK-NEXT: sample 17: [1, 1, 1, 1, 1, 6, 0, 1] -# CHECK-NEXT: sample 18: [1, 1, 1, 1, 1, 6, 1, 0] -# CHECK-NEXT: sample 19: [1, 1, 1, 1, 1, 6, 1, 1] -# CHECK-NEXT: sample 20: [1, 1, 1, 1, 2, 1, 0, 0] -# CHECK-NEXT: sample 21: [1, 1, 1, 1, 2, 1, 0, 1] -# CHECK-NEXT: sample 22: [1, 1, 1, 1, 2, 1, 1, 0] -# CHECK-NEXT: sample 23: [1, 1, 1, 1, 2, 1, 1, 1] -# CHECK-NEXT: sample 24: [1, 1, 1, 1, 2, 2, 0, 0] -# CHECK-NEXT: sample 25: [1, 1, 1, 1, 2, 2, 0, 1] -# CHECK-NEXT: sample 26: [1, 1, 1, 1, 2, 2, 1, 0] -# CHECK-NEXT: sample 27: [1, 1, 1, 1, 2, 2, 1, 1] -# CHECK-NEXT: sample 28: [1, 1, 1, 1, 2, 3, 0, 0] -# CHECK-NEXT: sample 29: [1, 1, 1, 1, 2, 3, 0, 1] -# CHECK-NEXT: sample 30: [1, 1, 1, 1, 2, 3, 1, 0] -# CHECK-NEXT: sample 31: [1, 1, 1, 1, 2, 3, 1, 1] -# CHECK-NEXT: sample 32: [1, 1, 1, 1, 2, 6, 0, 0] -# CHECK-NEXT: sample 33: [1, 1, 1, 1, 2, 6, 0, 1] -# CHECK-NEXT: sample 34: [1, 1, 1, 1, 2, 6, 1, 0] -# CHECK-NEXT: sample 35: [1, 1, 1, 1, 2, 6, 1, 1] -# CHECK-NEXT: sample 36: [1, 1, 1, 1, 3, 1, 0, 0] -# CHECK-NEXT: sample 37: [1, 1, 1, 1, 3, 1, 0, 1] -# CHECK-NEXT: sample 38: [1, 1, 1, 1, 3, 1, 1, 0] -# CHECK-NEXT: sample 39: [1, 1, 1, 1, 3, 1, 1, 1] -# CHECK-NEXT: sample 40: [1, 1, 1, 1, 3, 2, 0, 0] -# CHECK-NEXT: sample 41: [1, 1, 1, 1, 3, 2, 0, 1] -# CHECK-NEXT: sample 42: [1, 1, 1, 1, 3, 2, 1, 0] -# CHECK-NEXT: sample 43: [1, 1, 1, 1, 3, 2, 1, 1] -# CHECK-NEXT: sample 44: [1, 1, 1, 1, 3, 4, 0, 0] -# CHECK-NEXT: sample 45: [1, 1, 1, 1, 3, 4, 0, 1] -# CHECK-NEXT: sample 46: [1, 1, 1, 1, 3, 4, 1, 0] -# CHECK-NEXT: sample 47: [1, 1, 1, 1, 3, 4, 1, 1] -# CHECK-NEXT: sample 48: [1, 1, 1, 1, 4, 1, 0, 0] -# CHECK-NEXT: sample 49: [1, 1, 1, 1, 4, 1, 0, 1] -# CHECK-NEXT: sample 50: [1, 1, 1, 1, 4, 1, 1, 0] -# CHECK-NEXT: sample 51: [1, 1, 1, 1, 4, 1, 1, 1] -# CHECK-NEXT: sample 52: [1, 1, 1, 1, 4, 3, 0, 0] -# CHECK-NEXT: sample 53: [1, 1, 1, 1, 4, 3, 0, 1] -# CHECK-NEXT: sample 54: [1, 1, 1, 1, 4, 3, 1, 0] -# CHECK-NEXT: sample 55: [1, 1, 1, 1, 4, 3, 1, 1] -# CHECK-NEXT: sample 56: [1, 1, 1, 1, 6, 1, 0, 0] -# CHECK-NEXT: sample 57: [1, 1, 1, 1, 6, 1, 0, 1] -# CHECK-NEXT: sample 58: [1, 1, 1, 1, 6, 1, 1, 0] -# CHECK-NEXT: sample 59: [1, 1, 1, 1, 6, 1, 1, 1] -# CHECK-NEXT: sample 60: [1, 1, 1, 1, 6, 2, 0, 0] -# CHECK-NEXT: sample 61: [1, 1, 1, 1, 6, 2, 0, 1] -# CHECK-NEXT: sample 62: [1, 1, 1, 1, 6, 2, 1, 0] -# CHECK-NEXT: sample 63: [1, 1, 1, 1, 6, 2, 1, 1] -# CHECK-NEXT: sample 64: [1, 1, 1, 1, 12, 1, 0, 0] -# CHECK-NEXT: sample 65: [1, 1, 1, 1, 12, 1, 0, 1] -# CHECK-NEXT: sample 66: [1, 1, 1, 1, 12, 1, 1, 0] -# CHECK-NEXT: sample 67: [1, 1, 1, 1, 12, 1, 1, 1] -# CHECK-NEXT: sample 68: [1, 1, 1, 2, 1, 1, 0, 0] -# CHECK-NEXT: sample 69: [1, 1, 1, 2, 1, 1, 0, 1] -# CHECK-NEXT: sample 70: [1, 1, 1, 2, 1, 1, 1, 0] -# CHECK-NEXT: sample 71: [1, 1, 1, 2, 1, 1, 1, 1] -# CHECK-NEXT: sample 72: [1, 1, 1, 2, 1, 2, 0, 0] -# CHECK-NEXT: sample 73: [1, 1, 1, 2, 1, 2, 0, 1] -# CHECK-NEXT: sample 74: [1, 1, 1, 2, 1, 2, 1, 0] -# CHECK-NEXT: sample 75: [1, 1, 1, 2, 1, 2, 1, 1] -# CHECK-NEXT: sample 76: [1, 1, 1, 2, 1, 3, 0, 0] -# CHECK-NEXT: sample 77: [1, 1, 1, 2, 1, 3, 0, 1] -# CHECK-NEXT: sample 78: [1, 1, 1, 2, 1, 3, 1, 0] -# CHECK-NEXT: sample 79: [1, 1, 1, 2, 1, 3, 1, 1] -# CHECK-NEXT: sample 80: [1, 1, 1, 2, 1, 4, 0, 0] -# CHECK-NEXT: sample 81: [1, 1, 1, 2, 1, 4, 0, 1] -# CHECK-NEXT: sample 82: [1, 1, 1, 2, 1, 4, 1, 0] -# CHECK-NEXT: sample 83: [1, 1, 1, 2, 1, 4, 1, 1] -# CHECK-NEXT: sample 84: [1, 1, 1, 2, 1, 6, 0, 0] -# CHECK-NEXT: sample 85: [1, 1, 1, 2, 1, 6, 0, 1] -# CHECK-NEXT: sample 86: [1, 1, 1, 2, 1, 6, 1, 0] -# CHECK-NEXT: sample 87: [1, 1, 1, 2, 1, 6, 1, 1] -# CHECK-NEXT: sample 88: [1, 1, 1, 2, 2, 1, 0, 0] -# CHECK-NEXT: sample 89: [1, 1, 1, 2, 2, 1, 0, 1] -# CHECK-NEXT: sample 90: [1, 1, 1, 2, 2, 1, 1, 0] -# CHECK-NEXT: sample 91: [1, 1, 1, 2, 2, 1, 1, 1] -# CHECK-NEXT: sample 92: [1, 1, 1, 2, 2, 2, 0, 0] -# CHECK-NEXT: sample 93: [1, 1, 1, 2, 2, 2, 0, 1] -# CHECK-NEXT: sample 94: [1, 1, 1, 2, 2, 2, 1, 0] -# CHECK-NEXT: sample 95: [1, 1, 1, 2, 2, 2, 1, 1] -# CHECK-NEXT: sample 96: [1, 1, 1, 2, 2, 3, 0, 0] -# CHECK-NEXT: sample 97: [1, 1, 1, 2, 2, 3, 0, 1] -# CHECK-NEXT: sample 98: [1, 1, 1, 2, 2, 3, 1, 0] -# CHECK-NEXT: sample 99: [1, 1, 1, 2, 2, 3, 1, 1] -# CHECK-NEXT: stats {'filtered': 100, 'all': 108} -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1, './i2': 1}, 'j': {'./j1': 2, './j2': 2}, 'k': {'./k1': 2}}, permutation={'.': ['./j', './k', './i', './j1', './i1', './k1', './i2', './j2']}, vectorization=['./j2'], parallelization=[], unrolling={'./i2': 1, './k1': 3}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +<<<<<<< HEAD +======= +>>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +# CHECK: File "/home/ruicesista/Documents/xtc/xtc/tests/filecheck/search/test_matmul_goto.py", line 237 +# CHECK-NEXT: >>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +# CHECK-NEXT: ^ +# CHECK-NEXT: SyntaxError: invalid decimal literal diff --git a/tests/filecheck/search/test_matmul_goto_r.py b/tests/filecheck/search/test_matmul_goto_r.py index e46f7319f..47471b145 100644 --- a/tests/filecheck/search/test_matmul_goto_r.py +++ b/tests/filecheck/search/test_matmul_goto_r.py @@ -12,113 +12,10 @@ utils.print_all_opt_schedules(backend, strategy) utils.print_exhaustive_samples(backend, strategy, 100) -# CHECK: schedule O0: [1, 1, 1, 1, 1, 0, 0, 0] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1, './i2': 1}, 'j': {'./j1': 1, './j2': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./j', './k', './i', './j1', './i1', './k1', './i2', './j2']}, vectorization=['./j2'], parallelization=[], unrolling={'./i2': 1, './k1': 0}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O1: [1, 1, 1, 1, 1, 0, 0, 0] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1, './i2': 1}, 'j': {'./j1': 1, './j2': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./j', './k', './i', './j1', './i1', './k1', './i2', './j2']}, vectorization=['./j2'], parallelization=[], unrolling={'./i2': 1, './k1': 0}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O2: [1, 1, 1, 1, 1, 0, 0, 0] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1, './i2': 1}, 'j': {'./j1': 1, './j2': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./j', './k', './i', './j1', './i1', './k1', './i2', './j2']}, vectorization=['./j2'], parallelization=[], unrolling={'./i2': 1, './k1': 0}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O3: [1, 1, 1, 1, 1, 0, 0, 0] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1, './i2': 1}, 'j': {'./j1': 1, './j2': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./j', './k', './i', './j1', './i1', './k1', './i2', './j2']}, vectorization=['./j2'], parallelization=[], unrolling={'./i2': 1, './k1': 0}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: sample 0: [3, 1, 2, 1, 1, 1, 0, 0] -# CHECK-NEXT: sample 1: [3, 1, 2, 1, 1, 1, 0, 1] -# CHECK-NEXT: sample 2: [3, 1, 2, 1, 1, 1, 1, 0] -# CHECK-NEXT: sample 3: [3, 1, 2, 1, 1, 1, 1, 1] -# CHECK-NEXT: sample 4: [3, 1, 2, 1, 1, 2, 0, 0] -# CHECK-NEXT: sample 5: [3, 1, 2, 1, 1, 2, 0, 1] -# CHECK-NEXT: sample 6: [3, 1, 2, 1, 1, 2, 1, 0] -# CHECK-NEXT: sample 7: [3, 1, 2, 1, 1, 2, 1, 1] -# CHECK-NEXT: sample 8: [3, 1, 2, 1, 1, 3, 0, 0] -# CHECK-NEXT: sample 9: [3, 1, 2, 1, 1, 3, 0, 1] -# CHECK-NEXT: sample 10: [3, 1, 2, 1, 1, 3, 1, 0] -# CHECK-NEXT: sample 11: [3, 1, 2, 1, 1, 3, 1, 1] -# CHECK-NEXT: sample 12: [3, 1, 2, 1, 2, 1, 0, 0] -# CHECK-NEXT: sample 13: [3, 1, 2, 1, 2, 1, 0, 1] -# CHECK-NEXT: sample 14: [3, 1, 2, 1, 2, 1, 1, 0] -# CHECK-NEXT: sample 15: [3, 1, 2, 1, 2, 1, 1, 1] -# CHECK-NEXT: sample 16: [3, 1, 2, 1, 2, 2, 0, 0] -# CHECK-NEXT: sample 17: [3, 1, 2, 1, 2, 2, 0, 1] -# CHECK-NEXT: sample 18: [3, 1, 2, 1, 2, 2, 1, 0] -# CHECK-NEXT: sample 19: [3, 1, 2, 1, 2, 2, 1, 1] -# CHECK-NEXT: sample 20: [3, 1, 2, 1, 2, 3, 0, 0] -# CHECK-NEXT: sample 21: [3, 1, 2, 1, 2, 3, 0, 1] -# CHECK-NEXT: sample 22: [3, 1, 2, 1, 2, 3, 1, 0] -# CHECK-NEXT: sample 23: [3, 1, 2, 1, 2, 3, 1, 1] -# CHECK-NEXT: sample 24: [3, 1, 2, 1, 3, 1, 0, 0] -# CHECK-NEXT: sample 25: [3, 1, 2, 1, 3, 1, 0, 1] -# CHECK-NEXT: sample 26: [3, 1, 2, 1, 3, 1, 1, 0] -# CHECK-NEXT: sample 27: [3, 1, 2, 1, 3, 1, 1, 1] -# CHECK-NEXT: sample 28: [3, 1, 2, 1, 3, 2, 0, 0] -# CHECK-NEXT: sample 29: [3, 1, 2, 1, 3, 2, 0, 1] -# CHECK-NEXT: sample 30: [3, 1, 2, 1, 3, 2, 1, 0] -# CHECK-NEXT: sample 31: [3, 1, 2, 1, 3, 2, 1, 1] -# CHECK-NEXT: sample 32: [3, 1, 2, 1, 4, 1, 0, 0] -# CHECK-NEXT: sample 33: [3, 1, 2, 1, 4, 1, 0, 1] -# CHECK-NEXT: sample 34: [3, 1, 2, 1, 4, 1, 1, 0] -# CHECK-NEXT: sample 35: [3, 1, 2, 1, 4, 1, 1, 1] -# CHECK-NEXT: sample 36: [3, 1, 2, 1, 4, 3, 0, 0] -# CHECK-NEXT: sample 37: [3, 1, 2, 1, 4, 3, 0, 1] -# CHECK-NEXT: sample 38: [3, 1, 2, 1, 4, 3, 1, 0] -# CHECK-NEXT: sample 39: [3, 1, 2, 1, 4, 3, 1, 1] -# CHECK-NEXT: sample 40: [3, 1, 2, 1, 6, 1, 0, 0] -# CHECK-NEXT: sample 41: [3, 1, 2, 1, 6, 1, 0, 1] -# CHECK-NEXT: sample 42: [3, 1, 2, 1, 6, 1, 1, 0] -# CHECK-NEXT: sample 43: [3, 1, 2, 1, 6, 1, 1, 1] -# CHECK-NEXT: sample 44: [3, 1, 2, 1, 6, 2, 0, 0] -# CHECK-NEXT: sample 45: [3, 1, 2, 1, 6, 2, 0, 1] -# CHECK-NEXT: sample 46: [3, 1, 2, 1, 6, 2, 1, 0] -# CHECK-NEXT: sample 47: [3, 1, 2, 1, 6, 2, 1, 1] -# CHECK-NEXT: sample 48: [3, 1, 2, 1, 12, 1, 0, 0] -# CHECK-NEXT: sample 49: [3, 1, 2, 1, 12, 1, 0, 1] -# CHECK-NEXT: sample 50: [3, 1, 2, 1, 12, 1, 1, 0] -# CHECK-NEXT: sample 51: [3, 1, 2, 1, 12, 1, 1, 1] -# CHECK-NEXT: sample 52: [3, 1, 2, 2, 1, 1, 0, 0] -# CHECK-NEXT: sample 53: [3, 1, 2, 2, 1, 1, 0, 1] -# CHECK-NEXT: sample 54: [3, 1, 2, 2, 1, 1, 1, 0] -# CHECK-NEXT: sample 55: [3, 1, 2, 2, 1, 1, 1, 1] -# CHECK-NEXT: sample 56: [3, 1, 2, 2, 1, 2, 0, 0] -# CHECK-NEXT: sample 57: [3, 1, 2, 2, 1, 2, 0, 1] -# CHECK-NEXT: sample 58: [3, 1, 2, 2, 1, 2, 1, 0] -# CHECK-NEXT: sample 59: [3, 1, 2, 2, 1, 2, 1, 1] -# CHECK-NEXT: sample 60: [3, 1, 2, 2, 1, 3, 0, 0] -# CHECK-NEXT: sample 61: [3, 1, 2, 2, 1, 3, 0, 1] -# CHECK-NEXT: sample 62: [3, 1, 2, 2, 1, 3, 1, 0] -# CHECK-NEXT: sample 63: [3, 1, 2, 2, 1, 3, 1, 1] -# CHECK-NEXT: sample 64: [3, 1, 2, 2, 2, 1, 0, 0] -# CHECK-NEXT: sample 65: [3, 1, 2, 2, 2, 1, 0, 1] -# CHECK-NEXT: sample 66: [3, 1, 2, 2, 2, 1, 1, 0] -# CHECK-NEXT: sample 67: [3, 1, 2, 2, 2, 1, 1, 1] -# CHECK-NEXT: sample 68: [3, 1, 2, 2, 2, 2, 0, 0] -# CHECK-NEXT: sample 69: [3, 1, 2, 2, 2, 2, 0, 1] -# CHECK-NEXT: sample 70: [3, 1, 2, 2, 2, 2, 1, 0] -# CHECK-NEXT: sample 71: [3, 1, 2, 2, 2, 2, 1, 1] -# CHECK-NEXT: sample 72: [3, 1, 2, 2, 2, 3, 0, 0] -# CHECK-NEXT: sample 73: [3, 1, 2, 2, 2, 3, 0, 1] -# CHECK-NEXT: sample 74: [3, 1, 2, 2, 2, 3, 1, 0] -# CHECK-NEXT: sample 75: [3, 1, 2, 2, 2, 3, 1, 1] -# CHECK-NEXT: sample 76: [3, 1, 2, 2, 3, 1, 0, 0] -# CHECK-NEXT: sample 77: [3, 1, 2, 2, 3, 1, 0, 1] -# CHECK-NEXT: sample 78: [3, 1, 2, 2, 3, 1, 1, 0] -# CHECK-NEXT: sample 79: [3, 1, 2, 2, 3, 1, 1, 1] -# CHECK-NEXT: sample 80: [3, 1, 2, 2, 3, 2, 0, 0] -# CHECK-NEXT: sample 81: [3, 1, 2, 2, 3, 2, 0, 1] -# CHECK-NEXT: sample 82: [3, 1, 2, 2, 3, 2, 1, 0] -# CHECK-NEXT: sample 83: [3, 1, 2, 2, 3, 2, 1, 1] -# CHECK-NEXT: sample 84: [3, 1, 2, 2, 4, 1, 0, 0] -# CHECK-NEXT: sample 85: [3, 1, 2, 2, 4, 1, 0, 1] -# CHECK-NEXT: sample 86: [3, 1, 2, 2, 4, 1, 1, 0] -# CHECK-NEXT: sample 87: [3, 1, 2, 2, 4, 1, 1, 1] -# CHECK-NEXT: sample 88: [3, 1, 2, 2, 4, 3, 0, 0] -# CHECK-NEXT: sample 89: [3, 1, 2, 2, 4, 3, 0, 1] -# CHECK-NEXT: sample 90: [3, 1, 2, 2, 4, 3, 1, 0] -# CHECK-NEXT: sample 91: [3, 1, 2, 2, 4, 3, 1, 1] -# CHECK-NEXT: sample 92: [3, 1, 2, 2, 6, 1, 0, 0] -# CHECK-NEXT: sample 93: [3, 1, 2, 2, 6, 1, 0, 1] -# CHECK-NEXT: sample 94: [3, 1, 2, 2, 6, 1, 1, 0] -# CHECK-NEXT: sample 95: [3, 1, 2, 2, 6, 1, 1, 1] -# CHECK-NEXT: sample 96: [3, 1, 2, 2, 6, 2, 0, 0] -# CHECK-NEXT: sample 97: [3, 1, 2, 2, 6, 2, 0, 1] -# CHECK-NEXT: sample 98: [3, 1, 2, 2, 6, 2, 1, 0] -# CHECK-NEXT: sample 99: [3, 1, 2, 2, 6, 2, 1, 1] -# CHECK-NEXT: stats {'filtered': 3256, 'all': 6620} -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 3, './i2': 1}, 'j': {'./j1': 4, './j2': 2}, 'k': {'./k1': 6}}, permutation={'.': ['./j', './k', './i', './j1', './i1', './k1', './i2', './j2']}, vectorization=['./j2'], parallelization=[], unrolling={'./i2': 1, './k1': 2}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +<<<<<<< HEAD +======= +>>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +# CHECK: File "/home/ruicesista/Documents/xtc/xtc/tests/filecheck/search/test_matmul_goto_r.py", line 237 +# CHECK-NEXT: >>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +# CHECK-NEXT: ^ +# CHECK-NEXT: SyntaxError: invalid decimal literal diff --git a/tests/filecheck/search/test_matmul_oo.py b/tests/filecheck/search/test_matmul_oo.py index 084cd50c4..60d5d132e 100644 --- a/tests/filecheck/search/test_matmul_oo.py +++ b/tests/filecheck/search/test_matmul_oo.py @@ -12,58 +12,10 @@ utils.print_all_opt_schedules(backend, strategy) utils.print_exhaustive_samples(backend, strategy, 100) -# CHECK: schedule O0: [1, 1, 1] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1}, 'j': {'./j1': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './k', './j', './i1', './k1', './j1']}, vectorization=['./j1'], parallelization=[], unrolling={'./j1': 1, './k1': 1, './i1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O1: [1, 1, 1] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1}, 'j': {'./j1': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './k', './j', './i1', './k1', './j1']}, vectorization=['./j1'], parallelization=[], unrolling={'./j1': 1, './k1': 1, './i1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O2: [1, 16, 1] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1}, 'j': {'./j1': 16}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './k', './j', './i1', './k1', './j1']}, vectorization=['./j1'], parallelization=[], unrolling={'./j1': 16, './k1': 1, './i1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O3: [3, 16, 12] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 3}, 'j': {'./j1': 16}, 'k': {'./k1': 12}}, permutation={'.': ['./i', './k', './j', './i1', './k1', './j1']}, vectorization=['./j1'], parallelization=[], unrolling={'./j1': 16, './k1': 12, './i1': 3}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: sample 0: [1, 1, 1] -# CHECK-NEXT: sample 1: [1, 1, 2] -# CHECK-NEXT: sample 2: [1, 1, 3] -# CHECK-NEXT: sample 3: [1, 1, 4] -# CHECK-NEXT: sample 4: [1, 1, 6] -# CHECK-NEXT: sample 5: [1, 2, 1] -# CHECK-NEXT: sample 6: [1, 2, 2] -# CHECK-NEXT: sample 7: [1, 2, 3] -# CHECK-NEXT: sample 8: [1, 2, 4] -# CHECK-NEXT: sample 9: [1, 2, 6] -# CHECK-NEXT: sample 10: [1, 4, 1] -# CHECK-NEXT: sample 11: [1, 4, 2] -# CHECK-NEXT: sample 12: [1, 4, 3] -# CHECK-NEXT: sample 13: [1, 4, 4] -# CHECK-NEXT: sample 14: [1, 4, 6] -# CHECK-NEXT: sample 15: [1, 8, 1] -# CHECK-NEXT: sample 16: [1, 8, 2] -# CHECK-NEXT: sample 17: [1, 8, 3] -# CHECK-NEXT: sample 18: [1, 8, 4] -# CHECK-NEXT: sample 19: [1, 8, 6] -# CHECK-NEXT: sample 20: [1, 16, 1] -# CHECK-NEXT: sample 21: [1, 16, 2] -# CHECK-NEXT: sample 22: [1, 16, 3] -# CHECK-NEXT: sample 23: [1, 16, 4] -# CHECK-NEXT: sample 24: [1, 16, 6] -# CHECK-NEXT: sample 25: [1, 32, 1] -# CHECK-NEXT: sample 26: [1, 32, 2] -# CHECK-NEXT: sample 27: [1, 32, 3] -# CHECK-NEXT: sample 28: [1, 32, 4] -# CHECK-NEXT: sample 29: [3, 1, 1] -# CHECK-NEXT: sample 30: [3, 1, 2] -# CHECK-NEXT: sample 31: [3, 2, 1] -# CHECK-NEXT: sample 32: [3, 2, 2] -# CHECK-NEXT: sample 33: [3, 4, 1] -# CHECK-NEXT: sample 34: [3, 4, 2] -# CHECK-NEXT: sample 35: [3, 8, 1] -# CHECK-NEXT: sample 36: [3, 8, 2] -# CHECK-NEXT: sample 37: [3, 16, 1] -# CHECK-NEXT: sample 38: [3, 16, 2] -# CHECK-NEXT: sample 39: [3, 32, 1] -# CHECK-NEXT: sample 40: [7, 1, 1] -# CHECK-NEXT: sample 41: [7, 2, 1] -# CHECK-NEXT: sample 42: [7, 4, 1] -# CHECK-NEXT: sample 43: [7, 8, 1] -# CHECK-NEXT: sample 44: [7, 16, 1] -# CHECK-NEXT: stats {'filtered': 45, 'all': 144} -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 7}, 'j': {'./j1': 16}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './k', './j', './i1', './k1', './j1']}, vectorization=['./j1'], parallelization=[], unrolling={'./j1': 16, './k1': 1, './i1': 7}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +<<<<<<< HEAD +======= +>>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +# CHECK: File "/home/ruicesista/Documents/xtc/xtc/tests/filecheck/search/test_matmul_oo.py", line 127 +# CHECK-NEXT: >>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +# CHECK-NEXT: ^ +# CHECK-NEXT: SyntaxError: invalid decimal literal diff --git a/tests/filecheck/search/test_matmul_p1.py b/tests/filecheck/search/test_matmul_p1.py index df637d084..a53cd2752 100644 --- a/tests/filecheck/search/test_matmul_p1.py +++ b/tests/filecheck/search/test_matmul_p1.py @@ -12,113 +12,10 @@ utils.print_all_opt_schedules(backend, strategy) utils.print_exhaustive_samples(backend, strategy, 100) -# CHECK: schedule O0: [1, 1, 1, 0] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1}, 'j': {'./j1': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './k', './i1', './j1', './k1']}, vectorization=[], parallelization=[], unrolling={'./k1': 1, './j1': 1, './i1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O1: [1, 1, 1, 0] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1}, 'j': {'./j1': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './k', './i1', './j1', './k1']}, vectorization=[], parallelization=[], unrolling={'./k1': 1, './j1': 1, './i1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O2: [1, 1, 1, 1] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1}, 'j': {'./j1': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './k', './i1', './k1', './j1']}, vectorization=['./j1'], parallelization=[], unrolling={'./j1': 1, './k1': 1, './i1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O3: [1, 1, 1, 1] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1}, 'j': {'./j1': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './k', './i1', './k1', './j1']}, vectorization=['./j1'], parallelization=[], unrolling={'./j1': 1, './k1': 1, './i1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: sample 0: [1, 1, 1, 0] -# CHECK-NEXT: sample 1: [1, 1, 1, 1] -# CHECK-NEXT: sample 2: [1, 1, 1, 2] -# CHECK-NEXT: sample 3: [1, 1, 1, 3] -# CHECK-NEXT: sample 4: [1, 1, 1, 4] -# CHECK-NEXT: sample 5: [1, 1, 1, 5] -# CHECK-NEXT: sample 6: [1, 1, 2, 0] -# CHECK-NEXT: sample 7: [1, 1, 2, 1] -# CHECK-NEXT: sample 8: [1, 1, 2, 2] -# CHECK-NEXT: sample 9: [1, 1, 2, 3] -# CHECK-NEXT: sample 10: [1, 1, 2, 4] -# CHECK-NEXT: sample 11: [1, 1, 2, 5] -# CHECK-NEXT: sample 12: [1, 1, 3, 0] -# CHECK-NEXT: sample 13: [1, 1, 3, 1] -# CHECK-NEXT: sample 14: [1, 1, 3, 2] -# CHECK-NEXT: sample 15: [1, 1, 3, 3] -# CHECK-NEXT: sample 16: [1, 1, 3, 4] -# CHECK-NEXT: sample 17: [1, 1, 3, 5] -# CHECK-NEXT: sample 18: [1, 1, 4, 0] -# CHECK-NEXT: sample 19: [1, 1, 4, 1] -# CHECK-NEXT: sample 20: [1, 1, 4, 2] -# CHECK-NEXT: sample 21: [1, 1, 4, 3] -# CHECK-NEXT: sample 22: [1, 1, 4, 4] -# CHECK-NEXT: sample 23: [1, 1, 4, 5] -# CHECK-NEXT: sample 24: [1, 1, 6, 0] -# CHECK-NEXT: sample 25: [1, 1, 6, 1] -# CHECK-NEXT: sample 26: [1, 1, 6, 2] -# CHECK-NEXT: sample 27: [1, 1, 6, 3] -# CHECK-NEXT: sample 28: [1, 1, 6, 4] -# CHECK-NEXT: sample 29: [1, 1, 6, 5] -# CHECK-NEXT: sample 30: [1, 2, 1, 0] -# CHECK-NEXT: sample 31: [1, 2, 1, 1] -# CHECK-NEXT: sample 32: [1, 2, 1, 2] -# CHECK-NEXT: sample 33: [1, 2, 1, 3] -# CHECK-NEXT: sample 34: [1, 2, 1, 4] -# CHECK-NEXT: sample 35: [1, 2, 1, 5] -# CHECK-NEXT: sample 36: [1, 2, 2, 0] -# CHECK-NEXT: sample 37: [1, 2, 2, 1] -# CHECK-NEXT: sample 38: [1, 2, 2, 2] -# CHECK-NEXT: sample 39: [1, 2, 2, 3] -# CHECK-NEXT: sample 40: [1, 2, 2, 4] -# CHECK-NEXT: sample 41: [1, 2, 2, 5] -# CHECK-NEXT: sample 42: [1, 2, 3, 0] -# CHECK-NEXT: sample 43: [1, 2, 3, 1] -# CHECK-NEXT: sample 44: [1, 2, 3, 2] -# CHECK-NEXT: sample 45: [1, 2, 3, 3] -# CHECK-NEXT: sample 46: [1, 2, 3, 4] -# CHECK-NEXT: sample 47: [1, 2, 3, 5] -# CHECK-NEXT: sample 48: [1, 2, 4, 0] -# CHECK-NEXT: sample 49: [1, 2, 4, 1] -# CHECK-NEXT: sample 50: [1, 2, 4, 2] -# CHECK-NEXT: sample 51: [1, 2, 4, 3] -# CHECK-NEXT: sample 52: [1, 2, 4, 4] -# CHECK-NEXT: sample 53: [1, 2, 4, 5] -# CHECK-NEXT: sample 54: [1, 2, 6, 1] -# CHECK-NEXT: sample 55: [1, 2, 6, 4] -# CHECK-NEXT: sample 56: [1, 4, 1, 0] -# CHECK-NEXT: sample 57: [1, 4, 1, 1] -# CHECK-NEXT: sample 58: [1, 4, 1, 2] -# CHECK-NEXT: sample 59: [1, 4, 1, 3] -# CHECK-NEXT: sample 60: [1, 4, 1, 4] -# CHECK-NEXT: sample 61: [1, 4, 1, 5] -# CHECK-NEXT: sample 62: [1, 4, 2, 0] -# CHECK-NEXT: sample 63: [1, 4, 2, 1] -# CHECK-NEXT: sample 64: [1, 4, 2, 2] -# CHECK-NEXT: sample 65: [1, 4, 2, 3] -# CHECK-NEXT: sample 66: [1, 4, 2, 4] -# CHECK-NEXT: sample 67: [1, 4, 2, 5] -# CHECK-NEXT: sample 68: [1, 4, 3, 1] -# CHECK-NEXT: sample 69: [1, 4, 3, 4] -# CHECK-NEXT: sample 70: [1, 4, 4, 1] -# CHECK-NEXT: sample 71: [1, 4, 4, 4] -# CHECK-NEXT: sample 72: [1, 4, 6, 1] -# CHECK-NEXT: sample 73: [1, 4, 6, 4] -# CHECK-NEXT: sample 74: [1, 8, 1, 0] -# CHECK-NEXT: sample 75: [1, 8, 1, 1] -# CHECK-NEXT: sample 76: [1, 8, 1, 2] -# CHECK-NEXT: sample 77: [1, 8, 1, 3] -# CHECK-NEXT: sample 78: [1, 8, 1, 4] -# CHECK-NEXT: sample 79: [1, 8, 1, 5] -# CHECK-NEXT: sample 80: [1, 8, 2, 1] -# CHECK-NEXT: sample 81: [1, 8, 2, 4] -# CHECK-NEXT: sample 82: [1, 8, 3, 1] -# CHECK-NEXT: sample 83: [1, 8, 3, 4] -# CHECK-NEXT: sample 84: [1, 8, 4, 1] -# CHECK-NEXT: sample 85: [1, 8, 4, 4] -# CHECK-NEXT: sample 86: [1, 8, 6, 1] -# CHECK-NEXT: sample 87: [1, 8, 6, 4] -# CHECK-NEXT: sample 88: [1, 16, 1, 1] -# CHECK-NEXT: sample 89: [1, 16, 1, 4] -# CHECK-NEXT: sample 90: [1, 16, 2, 1] -# CHECK-NEXT: sample 91: [1, 16, 2, 4] -# CHECK-NEXT: sample 92: [1, 16, 3, 1] -# CHECK-NEXT: sample 93: [1, 16, 3, 4] -# CHECK-NEXT: sample 94: [1, 16, 4, 1] -# CHECK-NEXT: sample 95: [1, 16, 4, 4] -# CHECK-NEXT: sample 96: [1, 16, 6, 1] -# CHECK-NEXT: sample 97: [1, 16, 6, 4] -# CHECK-NEXT: sample 98: [1, 32, 1, 1] -# CHECK-NEXT: sample 99: [1, 32, 1, 4] -# CHECK-NEXT: stats {'filtered': 100, 'all': 185} -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1}, 'j': {'./j1': 32}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './k', './k1', './i1', './j1']}, vectorization=['./j1'], parallelization=[], unrolling={'./j1': 32, './i1': 1, './k1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +<<<<<<< HEAD +======= +>>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +# CHECK: File "/home/ruicesista/Documents/xtc/xtc/tests/filecheck/search/test_matmul_p1.py", line 237 +# CHECK-NEXT: >>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +# CHECK-NEXT: ^ +# CHECK-NEXT: SyntaxError: invalid decimal literal diff --git a/tests/filecheck/search/test_matmul_p1v.py b/tests/filecheck/search/test_matmul_p1v.py index 9d20ea9d2..f8e9c77e2 100644 --- a/tests/filecheck/search/test_matmul_p1v.py +++ b/tests/filecheck/search/test_matmul_p1v.py @@ -12,39 +12,10 @@ utils.print_all_opt_schedules(backend, strategy) utils.print_exhaustive_samples(backend, strategy, 100) -# CHECK: schedule O0: [1, 1, 1, 0] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1}, 'j': {'./j1': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './k', './i1', './j1', './k1']}, vectorization=[], parallelization=[], unrolling={'./k1': 1, './j1': 1, './i1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O1: [1, 1, 1, 0] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1}, 'j': {'./j1': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './k', './i1', './j1', './k1']}, vectorization=[], parallelization=[], unrolling={'./k1': 1, './j1': 1, './i1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O2: [1, 1, 1, 1] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1}, 'j': {'./j1': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './k', './i1', './k1', './j1']}, vectorization=['./j1'], parallelization=[], unrolling={'./j1': 1, './k1': 1, './i1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O3: [1, 1, 1, 1] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1}, 'j': {'./j1': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './k', './i1', './k1', './j1']}, vectorization=['./j1'], parallelization=[], unrolling={'./j1': 1, './k1': 1, './i1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: sample 0: [1, 16, 1, 1] -# CHECK-NEXT: sample 1: [1, 16, 1, 4] -# CHECK-NEXT: sample 2: [1, 16, 2, 1] -# CHECK-NEXT: sample 3: [1, 16, 2, 4] -# CHECK-NEXT: sample 4: [1, 16, 3, 1] -# CHECK-NEXT: sample 5: [1, 16, 3, 4] -# CHECK-NEXT: sample 6: [1, 16, 4, 1] -# CHECK-NEXT: sample 7: [1, 16, 4, 4] -# CHECK-NEXT: sample 8: [1, 16, 6, 1] -# CHECK-NEXT: sample 9: [1, 16, 6, 4] -# CHECK-NEXT: sample 10: [1, 32, 1, 1] -# CHECK-NEXT: sample 11: [1, 32, 1, 4] -# CHECK-NEXT: sample 12: [1, 32, 2, 1] -# CHECK-NEXT: sample 13: [1, 32, 2, 4] -# CHECK-NEXT: sample 14: [1, 32, 3, 1] -# CHECK-NEXT: sample 15: [1, 32, 3, 4] -# CHECK-NEXT: sample 16: [1, 32, 4, 1] -# CHECK-NEXT: sample 17: [1, 32, 4, 4] -# CHECK-NEXT: sample 18: [3, 16, 1, 1] -# CHECK-NEXT: sample 19: [3, 16, 1, 4] -# CHECK-NEXT: sample 20: [3, 16, 2, 1] -# CHECK-NEXT: sample 21: [3, 16, 2, 4] -# CHECK-NEXT: sample 22: [3, 32, 1, 1] -# CHECK-NEXT: sample 23: [3, 32, 1, 4] -# CHECK-NEXT: sample 24: [7, 16, 1, 1] -# CHECK-NEXT: sample 25: [7, 16, 1, 4] -# CHECK-NEXT: stats {'filtered': 154, 'all': 864} -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 7}, 'j': {'./j1': 16}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './k', './k1', './i1', './j1']}, vectorization=['./j1'], parallelization=[], unrolling={'./j1': 16, './i1': 7, './k1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +<<<<<<< HEAD +======= +>>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +# CHECK: File "/home/ruicesista/Documents/xtc/xtc/tests/filecheck/search/test_matmul_p1v.py", line 89 +# CHECK-NEXT: >>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +# CHECK-NEXT: ^ +# CHECK-NEXT: SyntaxError: invalid decimal literal diff --git a/tests/filecheck/search/test_matmul_pprprp.py b/tests/filecheck/search/test_matmul_pprprp.py index ef8fc0d42..7f5c0df40 100644 --- a/tests/filecheck/search/test_matmul_pprprp.py +++ b/tests/filecheck/search/test_matmul_pprprp.py @@ -12,113 +12,13 @@ utils.print_all_opt_schedules(backend, strategy) utils.print_exhaustive_samples(backend, strategy,100) -# CHECK: schedule O0: [1, 1, 1, 1, 1, 1, 1] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1, './i2': 1, './i3': 1}, 'j': {'./j1': 1, './j2': 1, './j3': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './i1', './j1', './k', './i2', './j2', './k1', './i3', './j3']}, vectorization=['./j3'], parallelization=['./i', './j'], unrolling={'./j3': 1, './i3': 1, './k1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O1: [1, 1, 1, 1, 1, 1, 1] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1, './i2': 1, './i3': 1}, 'j': {'./j1': 1, './j2': 1, './j3': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './i1', './j1', './k', './i2', './j2', './k1', './i3', './j3']}, vectorization=['./j3'], parallelization=['./i', './j'], unrolling={'./j3': 1, './i3': 1, './k1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O2: [1, 1, 1, 1, 1, 16, 1] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1, './i2': 1, './i3': 1}, 'j': {'./j1': 16, './j2': 16, './j3': 16}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './i1', './j1', './k', './i2', './j2', './k1', './i3', './j3']}, vectorization=['./j3'], parallelization=['./i', './j'], unrolling={'./j3': 16, './i3': 1, './k1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O3: [1, 1, 3, 1, 1, 16, 12] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 3, './i2': 3, './i3': 3}, 'j': {'./j1': 16, './j2': 16, './j3': 16}, 'k': {'./k1': 12}}, permutation={'.': ['./i', './j', './i1', './j1', './k', './i2', './j2', './k1', './i3', './j3']}, vectorization=['./j3'], parallelization=['./i', './j'], unrolling={'./j3': 16, './i3': 3, './k1': 12}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: sample 0: [1, 1, 1, 1, 1, 1, 1] -# CHECK-NEXT: sample 1: [1, 1, 1, 1, 1, 1, 2] -# CHECK-NEXT: sample 2: [1, 1, 1, 1, 1, 1, 3] -# CHECK-NEXT: sample 3: [1, 1, 1, 1, 1, 1, 4] -# CHECK-NEXT: sample 4: [1, 1, 1, 1, 1, 1, 6] -# CHECK-NEXT: sample 5: [1, 1, 1, 1, 1, 2, 1] -# CHECK-NEXT: sample 6: [1, 1, 1, 1, 1, 2, 2] -# CHECK-NEXT: sample 7: [1, 1, 1, 1, 1, 2, 3] -# CHECK-NEXT: sample 8: [1, 1, 1, 1, 1, 2, 4] -# CHECK-NEXT: sample 9: [1, 1, 1, 1, 1, 2, 6] -# CHECK-NEXT: sample 10: [1, 1, 1, 1, 1, 4, 1] -# CHECK-NEXT: sample 11: [1, 1, 1, 1, 1, 4, 2] -# CHECK-NEXT: sample 12: [1, 1, 1, 1, 1, 4, 3] -# CHECK-NEXT: sample 13: [1, 1, 1, 1, 1, 4, 4] -# CHECK-NEXT: sample 14: [1, 1, 1, 1, 1, 4, 6] -# CHECK-NEXT: sample 15: [1, 1, 1, 1, 1, 8, 1] -# CHECK-NEXT: sample 16: [1, 1, 1, 1, 1, 8, 2] -# CHECK-NEXT: sample 17: [1, 1, 1, 1, 1, 8, 3] -# CHECK-NEXT: sample 18: [1, 1, 1, 1, 1, 8, 4] -# CHECK-NEXT: sample 19: [1, 1, 1, 1, 1, 8, 6] -# CHECK-NEXT: sample 20: [1, 1, 1, 1, 1, 16, 1] -# CHECK-NEXT: sample 21: [1, 1, 1, 1, 1, 16, 2] -# CHECK-NEXT: sample 22: [1, 1, 1, 1, 1, 16, 3] -# CHECK-NEXT: sample 23: [1, 1, 1, 1, 1, 16, 4] -# CHECK-NEXT: sample 24: [1, 1, 1, 1, 1, 16, 6] -# CHECK-NEXT: sample 25: [1, 1, 1, 1, 1, 32, 1] -# CHECK-NEXT: sample 26: [1, 1, 1, 1, 1, 32, 2] -# CHECK-NEXT: sample 27: [1, 1, 1, 1, 1, 32, 3] -# CHECK-NEXT: sample 28: [1, 1, 1, 1, 1, 32, 4] -# CHECK-NEXT: sample 29: [1, 1, 1, 1, 2, 1, 1] -# CHECK-NEXT: sample 30: [1, 1, 1, 1, 2, 1, 2] -# CHECK-NEXT: sample 31: [1, 1, 1, 1, 2, 1, 3] -# CHECK-NEXT: sample 32: [1, 1, 1, 1, 2, 1, 4] -# CHECK-NEXT: sample 33: [1, 1, 1, 1, 2, 1, 6] -# CHECK-NEXT: sample 34: [1, 1, 1, 1, 2, 2, 1] -# CHECK-NEXT: sample 35: [1, 1, 1, 1, 2, 2, 2] -# CHECK-NEXT: sample 36: [1, 1, 1, 1, 2, 2, 3] -# CHECK-NEXT: sample 37: [1, 1, 1, 1, 2, 2, 4] -# CHECK-NEXT: sample 38: [1, 1, 1, 1, 2, 2, 6] -# CHECK-NEXT: sample 39: [1, 1, 1, 1, 2, 4, 1] -# CHECK-NEXT: sample 40: [1, 1, 1, 1, 2, 4, 2] -# CHECK-NEXT: sample 41: [1, 1, 1, 1, 2, 4, 3] -# CHECK-NEXT: sample 42: [1, 1, 1, 1, 2, 4, 4] -# CHECK-NEXT: sample 43: [1, 1, 1, 1, 2, 4, 6] -# CHECK-NEXT: sample 44: [1, 1, 1, 1, 2, 8, 1] -# CHECK-NEXT: sample 45: [1, 1, 1, 1, 2, 8, 2] -# CHECK-NEXT: sample 46: [1, 1, 1, 1, 2, 8, 3] -# CHECK-NEXT: sample 47: [1, 1, 1, 1, 2, 8, 4] -# CHECK-NEXT: sample 48: [1, 1, 1, 1, 2, 8, 6] -# CHECK-NEXT: sample 49: [1, 1, 1, 1, 2, 16, 1] -# CHECK-NEXT: sample 50: [1, 1, 1, 1, 2, 16, 2] -# CHECK-NEXT: sample 51: [1, 1, 1, 1, 2, 16, 3] -# CHECK-NEXT: sample 52: [1, 1, 1, 1, 2, 16, 4] -# CHECK-NEXT: sample 53: [1, 1, 1, 1, 2, 16, 6] -# CHECK-NEXT: sample 54: [1, 1, 1, 1, 4, 1, 1] -# CHECK-NEXT: sample 55: [1, 1, 1, 1, 4, 1, 2] -# CHECK-NEXT: sample 56: [1, 1, 1, 1, 4, 1, 3] -# CHECK-NEXT: sample 57: [1, 1, 1, 1, 4, 1, 4] -# CHECK-NEXT: sample 58: [1, 1, 1, 1, 4, 1, 6] -# CHECK-NEXT: sample 59: [1, 1, 1, 1, 4, 2, 1] -# CHECK-NEXT: sample 60: [1, 1, 1, 1, 4, 2, 2] -# CHECK-NEXT: sample 61: [1, 1, 1, 1, 4, 2, 3] -# CHECK-NEXT: sample 62: [1, 1, 1, 1, 4, 2, 4] -# CHECK-NEXT: sample 63: [1, 1, 1, 1, 4, 2, 6] -# CHECK-NEXT: sample 64: [1, 1, 1, 1, 4, 4, 1] -# CHECK-NEXT: sample 65: [1, 1, 1, 1, 4, 4, 2] -# CHECK-NEXT: sample 66: [1, 1, 1, 1, 4, 4, 3] -# CHECK-NEXT: sample 67: [1, 1, 1, 1, 4, 4, 4] -# CHECK-NEXT: sample 68: [1, 1, 1, 1, 4, 4, 6] -# CHECK-NEXT: sample 69: [1, 1, 1, 1, 4, 8, 1] -# CHECK-NEXT: sample 70: [1, 1, 1, 1, 4, 8, 2] -# CHECK-NEXT: sample 71: [1, 1, 1, 1, 4, 8, 3] -# CHECK-NEXT: sample 72: [1, 1, 1, 1, 4, 8, 4] -# CHECK-NEXT: sample 73: [1, 1, 1, 1, 4, 8, 6] -# CHECK-NEXT: sample 74: [1, 1, 1, 1, 8, 1, 1] -# CHECK-NEXT: sample 75: [1, 1, 1, 1, 8, 1, 2] -# CHECK-NEXT: sample 76: [1, 1, 1, 1, 8, 1, 3] -# CHECK-NEXT: sample 77: [1, 1, 1, 1, 8, 1, 4] -# CHECK-NEXT: sample 78: [1, 1, 1, 1, 8, 1, 6] -# CHECK-NEXT: sample 79: [1, 1, 1, 1, 8, 2, 1] -# CHECK-NEXT: sample 80: [1, 1, 1, 1, 8, 2, 2] -# CHECK-NEXT: sample 81: [1, 1, 1, 1, 8, 2, 3] -# CHECK-NEXT: sample 82: [1, 1, 1, 1, 8, 2, 4] -# CHECK-NEXT: sample 83: [1, 1, 1, 1, 8, 2, 6] -# CHECK-NEXT: sample 84: [1, 1, 1, 1, 8, 4, 1] -# CHECK-NEXT: sample 85: [1, 1, 1, 1, 8, 4, 2] -# CHECK-NEXT: sample 86: [1, 1, 1, 1, 8, 4, 3] -# CHECK-NEXT: sample 87: [1, 1, 1, 1, 8, 4, 4] -# CHECK-NEXT: sample 88: [1, 1, 1, 1, 8, 4, 6] -# CHECK-NEXT: sample 89: [1, 1, 1, 1, 16, 1, 1] -# CHECK-NEXT: sample 90: [1, 1, 1, 1, 16, 1, 2] -# CHECK-NEXT: sample 91: [1, 1, 1, 1, 16, 1, 3] -# CHECK-NEXT: sample 92: [1, 1, 1, 1, 16, 1, 4] -# CHECK-NEXT: sample 93: [1, 1, 1, 1, 16, 1, 6] -# CHECK-NEXT: sample 94: [1, 1, 1, 1, 16, 2, 1] -# CHECK-NEXT: sample 95: [1, 1, 1, 1, 16, 2, 2] -# CHECK-NEXT: sample 96: [1, 1, 1, 1, 16, 2, 3] -# CHECK-NEXT: sample 97: [1, 1, 1, 1, 16, 2, 4] -# CHECK-NEXT: sample 98: [1, 1, 1, 1, 16, 2, 6] -# CHECK-NEXT: sample 99: [1, 1, 1, 1, 32, 1, 1] -# CHECK-NEXT: stats {'filtered': 100, 'all': 121} -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1, './i2': 1, './i3': 1}, 'j': {'./j1': 32, './j2': 32, './j3': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './i1', './j1', './k', './i2', './j2', './k1', './i3', './j3']}, vectorization=['./j3'], parallelization=['./i', './j'], unrolling={'./j3': 1, './i3': 1, './k1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +<<<<<<< HEAD +======= +>>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +<<<<<<< HEAD +======= +>>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +# CHECK: File "/home/ruicesista/Documents/xtc/xtc/tests/filecheck/search/test_matmul_pprprp.py", line 32 +# CHECK-NEXT: >>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +# CHECK-NEXT: ^ +# CHECK-NEXT: SyntaxError: invalid decimal literal diff --git a/tests/filecheck/search/test_matmul_pprprpv.py b/tests/filecheck/search/test_matmul_pprprpv.py index 822e546ca..d81d70d1d 100644 --- a/tests/filecheck/search/test_matmul_pprprpv.py +++ b/tests/filecheck/search/test_matmul_pprprpv.py @@ -12,113 +12,13 @@ utils.print_all_opt_schedules(backend, strategy) utils.print_exhaustive_samples(backend, strategy,100) -# CHECK: schedule O0: [1, 1, 1, 1, 1, 1, 1] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1, './i2': 1, './i3': 1}, 'j': {'./j1': 1, './j2': 1, './j3': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './i1', './j1', './k', './i2', './j2', './k1', './i3', './j3']}, vectorization=['./j3'], parallelization=['./i', './j'], unrolling={'./j3': 1, './i3': 1, './k1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O1: [1, 1, 1, 1, 1, 1, 1] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1, './i2': 1, './i3': 1}, 'j': {'./j1': 1, './j2': 1, './j3': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './i1', './j1', './k', './i2', './j2', './k1', './i3', './j3']}, vectorization=['./j3'], parallelization=['./i', './j'], unrolling={'./j3': 1, './i3': 1, './k1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O2: [1, 1, 1, 1, 1, 16, 1] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1, './i2': 1, './i3': 1}, 'j': {'./j1': 16, './j2': 16, './j3': 16}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './i1', './j1', './k', './i2', './j2', './k1', './i3', './j3']}, vectorization=['./j3'], parallelization=['./i', './j'], unrolling={'./j3': 16, './i3': 1, './k1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O3: [1, 1, 3, 1, 1, 16, 12] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 3, './i2': 3, './i3': 3}, 'j': {'./j1': 16, './j2': 16, './j3': 16}, 'k': {'./k1': 12}}, permutation={'.': ['./i', './j', './i1', './j1', './k', './i2', './j2', './k1', './i3', './j3']}, vectorization=['./j3'], parallelization=['./i', './j'], unrolling={'./j3': 16, './i3': 3, './k1': 12}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: sample 0: [1, 1, 1, 1, 1, 16, 1] -# CHECK-NEXT: sample 1: [1, 1, 1, 1, 1, 16, 2] -# CHECK-NEXT: sample 2: [1, 1, 1, 1, 1, 16, 3] -# CHECK-NEXT: sample 3: [1, 1, 1, 1, 1, 16, 4] -# CHECK-NEXT: sample 4: [1, 1, 1, 1, 1, 16, 6] -# CHECK-NEXT: sample 5: [1, 1, 1, 1, 1, 32, 1] -# CHECK-NEXT: sample 6: [1, 1, 1, 1, 1, 32, 2] -# CHECK-NEXT: sample 7: [1, 1, 1, 1, 1, 32, 3] -# CHECK-NEXT: sample 8: [1, 1, 1, 1, 1, 32, 4] -# CHECK-NEXT: sample 9: [1, 1, 1, 1, 2, 16, 1] -# CHECK-NEXT: sample 10: [1, 1, 1, 1, 2, 16, 2] -# CHECK-NEXT: sample 11: [1, 1, 1, 1, 2, 16, 3] -# CHECK-NEXT: sample 12: [1, 1, 1, 1, 2, 16, 4] -# CHECK-NEXT: sample 13: [1, 1, 1, 1, 2, 16, 6] -# CHECK-NEXT: sample 14: [1, 1, 1, 2, 1, 16, 1] -# CHECK-NEXT: sample 15: [1, 1, 1, 2, 1, 16, 2] -# CHECK-NEXT: sample 16: [1, 1, 1, 2, 1, 16, 3] -# CHECK-NEXT: sample 17: [1, 1, 1, 2, 1, 16, 4] -# CHECK-NEXT: sample 18: [1, 1, 1, 2, 1, 16, 6] -# CHECK-NEXT: sample 19: [1, 1, 3, 1, 1, 16, 1] -# CHECK-NEXT: sample 20: [1, 1, 3, 1, 1, 16, 2] -# CHECK-NEXT: sample 21: [1, 1, 3, 1, 1, 32, 1] -# CHECK-NEXT: sample 22: [1, 1, 3, 1, 2, 16, 1] -# CHECK-NEXT: sample 23: [1, 1, 3, 1, 2, 16, 2] -# CHECK-NEXT: sample 24: [1, 1, 3, 2, 1, 16, 1] -# CHECK-NEXT: sample 25: [1, 1, 3, 2, 1, 16, 2] -# CHECK-NEXT: sample 26: [1, 1, 7, 1, 1, 16, 1] -# CHECK-NEXT: sample 27: [1, 1, 7, 1, 2, 16, 1] -# CHECK-NEXT: sample 28: [1, 1, 7, 2, 1, 16, 1] -# CHECK-NEXT: sample 29: [1, 3, 1, 1, 1, 16, 1] -# CHECK-NEXT: sample 30: [1, 3, 1, 1, 1, 16, 2] -# CHECK-NEXT: sample 31: [1, 3, 1, 1, 1, 16, 3] -# CHECK-NEXT: sample 32: [1, 3, 1, 1, 1, 16, 4] -# CHECK-NEXT: sample 33: [1, 3, 1, 1, 1, 16, 6] -# CHECK-NEXT: sample 34: [1, 3, 1, 1, 1, 32, 1] -# CHECK-NEXT: sample 35: [1, 3, 1, 1, 1, 32, 2] -# CHECK-NEXT: sample 36: [1, 3, 1, 1, 1, 32, 3] -# CHECK-NEXT: sample 37: [1, 3, 1, 1, 1, 32, 4] -# CHECK-NEXT: sample 38: [1, 3, 1, 1, 2, 16, 1] -# CHECK-NEXT: sample 39: [1, 3, 1, 1, 2, 16, 2] -# CHECK-NEXT: sample 40: [1, 3, 1, 1, 2, 16, 3] -# CHECK-NEXT: sample 41: [1, 3, 1, 1, 2, 16, 4] -# CHECK-NEXT: sample 42: [1, 3, 1, 1, 2, 16, 6] -# CHECK-NEXT: sample 43: [1, 3, 1, 2, 1, 16, 1] -# CHECK-NEXT: sample 44: [1, 3, 1, 2, 1, 16, 2] -# CHECK-NEXT: sample 45: [1, 3, 1, 2, 1, 16, 3] -# CHECK-NEXT: sample 46: [1, 3, 1, 2, 1, 16, 4] -# CHECK-NEXT: sample 47: [1, 3, 1, 2, 1, 16, 6] -# CHECK-NEXT: sample 48: [1, 3, 7, 1, 1, 16, 1] -# CHECK-NEXT: sample 49: [1, 3, 7, 1, 2, 16, 1] -# CHECK-NEXT: sample 50: [1, 3, 7, 2, 1, 16, 1] -# CHECK-NEXT: sample 51: [1, 7, 1, 1, 1, 16, 1] -# CHECK-NEXT: sample 52: [1, 7, 1, 1, 1, 16, 2] -# CHECK-NEXT: sample 53: [1, 7, 1, 1, 1, 16, 3] -# CHECK-NEXT: sample 54: [1, 7, 1, 1, 1, 16, 4] -# CHECK-NEXT: sample 55: [1, 7, 1, 1, 1, 16, 6] -# CHECK-NEXT: sample 56: [1, 7, 1, 1, 1, 32, 1] -# CHECK-NEXT: sample 57: [1, 7, 1, 1, 1, 32, 2] -# CHECK-NEXT: sample 58: [1, 7, 1, 1, 1, 32, 3] -# CHECK-NEXT: sample 59: [1, 7, 1, 1, 1, 32, 4] -# CHECK-NEXT: sample 60: [1, 7, 1, 1, 2, 16, 1] -# CHECK-NEXT: sample 61: [1, 7, 1, 1, 2, 16, 2] -# CHECK-NEXT: sample 62: [1, 7, 1, 1, 2, 16, 3] -# CHECK-NEXT: sample 63: [1, 7, 1, 1, 2, 16, 4] -# CHECK-NEXT: sample 64: [1, 7, 1, 1, 2, 16, 6] -# CHECK-NEXT: sample 65: [1, 7, 1, 2, 1, 16, 1] -# CHECK-NEXT: sample 66: [1, 7, 1, 2, 1, 16, 2] -# CHECK-NEXT: sample 67: [1, 7, 1, 2, 1, 16, 3] -# CHECK-NEXT: sample 68: [1, 7, 1, 2, 1, 16, 4] -# CHECK-NEXT: sample 69: [1, 7, 1, 2, 1, 16, 6] -# CHECK-NEXT: sample 70: [1, 7, 3, 1, 1, 16, 1] -# CHECK-NEXT: sample 71: [1, 7, 3, 1, 1, 16, 2] -# CHECK-NEXT: sample 72: [1, 7, 3, 1, 1, 32, 1] -# CHECK-NEXT: sample 73: [1, 7, 3, 1, 2, 16, 1] -# CHECK-NEXT: sample 74: [1, 7, 3, 1, 2, 16, 2] -# CHECK-NEXT: sample 75: [1, 7, 3, 2, 1, 16, 1] -# CHECK-NEXT: sample 76: [1, 7, 3, 2, 1, 16, 2] -# CHECK-NEXT: sample 77: [1, 21, 1, 1, 1, 16, 1] -# CHECK-NEXT: sample 78: [1, 21, 1, 1, 1, 16, 2] -# CHECK-NEXT: sample 79: [1, 21, 1, 1, 1, 16, 3] -# CHECK-NEXT: sample 80: [1, 21, 1, 1, 1, 16, 4] -# CHECK-NEXT: sample 81: [1, 21, 1, 1, 1, 16, 6] -# CHECK-NEXT: sample 82: [1, 21, 1, 1, 1, 32, 1] -# CHECK-NEXT: sample 83: [1, 21, 1, 1, 1, 32, 2] -# CHECK-NEXT: sample 84: [1, 21, 1, 1, 1, 32, 3] -# CHECK-NEXT: sample 85: [1, 21, 1, 1, 1, 32, 4] -# CHECK-NEXT: sample 86: [1, 21, 1, 1, 2, 16, 1] -# CHECK-NEXT: sample 87: [1, 21, 1, 1, 2, 16, 2] -# CHECK-NEXT: sample 88: [1, 21, 1, 1, 2, 16, 3] -# CHECK-NEXT: sample 89: [1, 21, 1, 1, 2, 16, 4] -# CHECK-NEXT: sample 90: [1, 21, 1, 1, 2, 16, 6] -# CHECK-NEXT: sample 91: [1, 21, 1, 2, 1, 16, 1] -# CHECK-NEXT: sample 92: [1, 21, 1, 2, 1, 16, 2] -# CHECK-NEXT: sample 93: [1, 21, 1, 2, 1, 16, 3] -# CHECK-NEXT: sample 94: [1, 21, 1, 2, 1, 16, 4] -# CHECK-NEXT: sample 95: [1, 21, 1, 2, 1, 16, 6] -# CHECK-NEXT: sample 96: [3, 1, 1, 1, 1, 16, 1] -# CHECK-NEXT: sample 97: [3, 1, 1, 1, 1, 16, 2] -# CHECK-NEXT: sample 98: [3, 1, 1, 1, 1, 16, 3] -# CHECK-NEXT: sample 99: [3, 1, 1, 1, 1, 16, 4] -# CHECK-NEXT: stats {'filtered_vec': 100, 'filtered': 1472, 'all': 3052} -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 3, './i2': 1, './i3': 1}, 'j': {'./j1': 16, './j2': 16, './j3': 16}, 'k': {'./k1': 4}}, permutation={'.': ['./i', './j', './i1', './j1', './k', './i2', './j2', './k1', './i3', './j3']}, vectorization=['./j3'], parallelization=['./i', './j'], unrolling={'./j3': 16, './i3': 1, './k1': 4}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +<<<<<<< HEAD +======= +>>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +<<<<<<< HEAD +======= +>>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +# CHECK: File "/home/ruicesista/Documents/xtc/xtc/tests/filecheck/search/test_matmul_pprprpv.py", line 32 +# CHECK-NEXT: >>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +# CHECK-NEXT: ^ +# CHECK-NEXT: SyntaxError: invalid decimal literal diff --git a/tests/filecheck/search/test_matmul_pprprpvr.py b/tests/filecheck/search/test_matmul_pprprpvr.py index dfe2fb9cd..184f0f95f 100644 --- a/tests/filecheck/search/test_matmul_pprprpvr.py +++ b/tests/filecheck/search/test_matmul_pprprpvr.py @@ -19,113 +19,13 @@ utils.print_all_opt_schedules(backend, strategy) utils.print_exhaustive_samples(backend, strategy,100) -# CHECK: schedule O0: [1, 1, 1, 1, 1, 1, 1] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1, './i2': 1, './i3': 1}, 'j': {'./j1': 1, './j2': 1, './j3': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './i1', './j1', './k', './i2', './j2', './k1', './i3', './j3']}, vectorization=['./j3'], parallelization=['./i', './j'], unrolling={'./j3': 1, './i3': 1, './k1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O1: [1, 1, 1, 1, 1, 1, 1] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1, './i2': 1, './i3': 1}, 'j': {'./j1': 1, './j2': 1, './j3': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './i1', './j1', './k', './i2', './j2', './k1', './i3', './j3']}, vectorization=['./j3'], parallelization=['./i', './j'], unrolling={'./j3': 1, './i3': 1, './k1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O2: [1, 1, 1, 1, 1, 16, 1] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1, './i2': 1, './i3': 1}, 'j': {'./j1': 16, './j2': 16, './j3': 16}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './i1', './j1', './k', './i2', './j2', './k1', './i3', './j3']}, vectorization=['./j3'], parallelization=['./i', './j'], unrolling={'./j3': 16, './i3': 1, './k1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O3: [1, 1, 3, 1, 1, 16, 12] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 3, './i2': 3, './i3': 3}, 'j': {'./j1': 16, './j2': 16, './j3': 16}, 'k': {'./k1': 12}}, permutation={'.': ['./i', './j', './i1', './j1', './k', './i2', './j2', './k1', './i3', './j3']}, vectorization=['./j3'], parallelization=['./i', './j'], unrolling={'./j3': 16, './i3': 3, './k1': 12}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: sample 0: [1, 1, 1, 1, 1, 16, 1] -# CHECK-NEXT: sample 1: [1, 1, 1, 1, 1, 16, 2] -# CHECK-NEXT: sample 2: [1, 1, 1, 1, 1, 16, 3] -# CHECK-NEXT: sample 3: [1, 1, 1, 1, 1, 16, 4] -# CHECK-NEXT: sample 4: [1, 1, 1, 1, 1, 16, 6] -# CHECK-NEXT: sample 5: [1, 1, 1, 1, 1, 16, 12] -# CHECK-NEXT: sample 6: [1, 1, 1, 1, 1, 32, 1] -# CHECK-NEXT: sample 7: [1, 1, 1, 1, 1, 32, 2] -# CHECK-NEXT: sample 8: [1, 1, 1, 1, 1, 32, 3] -# CHECK-NEXT: sample 9: [1, 1, 1, 1, 1, 32, 4] -# CHECK-NEXT: sample 10: [1, 1, 1, 1, 1, 32, 6] -# CHECK-NEXT: sample 11: [1, 1, 1, 1, 2, 16, 1] -# CHECK-NEXT: sample 12: [1, 1, 1, 1, 2, 16, 2] -# CHECK-NEXT: sample 13: [1, 1, 1, 1, 2, 16, 3] -# CHECK-NEXT: sample 14: [1, 1, 1, 1, 2, 16, 4] -# CHECK-NEXT: sample 15: [1, 1, 1, 1, 2, 16, 6] -# CHECK-NEXT: sample 16: [1, 1, 1, 1, 2, 16, 12] -# CHECK-NEXT: sample 17: [1, 1, 1, 2, 1, 16, 1] -# CHECK-NEXT: sample 18: [1, 1, 1, 2, 1, 16, 2] -# CHECK-NEXT: sample 19: [1, 1, 1, 2, 1, 16, 3] -# CHECK-NEXT: sample 20: [1, 1, 1, 2, 1, 16, 4] -# CHECK-NEXT: sample 21: [1, 1, 1, 2, 1, 16, 6] -# CHECK-NEXT: sample 22: [1, 1, 1, 2, 1, 16, 12] -# CHECK-NEXT: sample 23: [1, 1, 3, 1, 1, 16, 1] -# CHECK-NEXT: sample 24: [1, 1, 3, 1, 1, 16, 2] -# CHECK-NEXT: sample 25: [1, 1, 3, 1, 1, 16, 3] -# CHECK-NEXT: sample 26: [1, 1, 3, 1, 1, 16, 4] -# CHECK-NEXT: sample 27: [1, 1, 3, 1, 2, 16, 1] -# CHECK-NEXT: sample 28: [1, 1, 3, 1, 2, 16, 2] -# CHECK-NEXT: sample 29: [1, 1, 3, 1, 2, 16, 3] -# CHECK-NEXT: sample 30: [1, 1, 3, 1, 2, 16, 4] -# CHECK-NEXT: sample 31: [1, 1, 3, 2, 1, 16, 1] -# CHECK-NEXT: sample 32: [1, 1, 3, 2, 1, 16, 2] -# CHECK-NEXT: sample 33: [1, 1, 3, 2, 1, 16, 3] -# CHECK-NEXT: sample 34: [1, 1, 3, 2, 1, 16, 4] -# CHECK-NEXT: sample 35: [1, 3, 1, 1, 1, 16, 1] -# CHECK-NEXT: sample 36: [1, 3, 1, 1, 1, 16, 2] -# CHECK-NEXT: sample 37: [1, 3, 1, 1, 1, 16, 3] -# CHECK-NEXT: sample 38: [1, 3, 1, 1, 1, 16, 4] -# CHECK-NEXT: sample 39: [1, 3, 1, 1, 1, 16, 6] -# CHECK-NEXT: sample 40: [1, 3, 1, 1, 1, 16, 12] -# CHECK-NEXT: sample 41: [1, 3, 1, 1, 1, 32, 1] -# CHECK-NEXT: sample 42: [1, 3, 1, 1, 1, 32, 2] -# CHECK-NEXT: sample 43: [1, 3, 1, 1, 1, 32, 3] -# CHECK-NEXT: sample 44: [1, 3, 1, 1, 1, 32, 4] -# CHECK-NEXT: sample 45: [1, 3, 1, 1, 1, 32, 6] -# CHECK-NEXT: sample 46: [1, 3, 1, 1, 2, 16, 1] -# CHECK-NEXT: sample 47: [1, 3, 1, 1, 2, 16, 2] -# CHECK-NEXT: sample 48: [1, 3, 1, 1, 2, 16, 3] -# CHECK-NEXT: sample 49: [1, 3, 1, 1, 2, 16, 4] -# CHECK-NEXT: sample 50: [1, 3, 1, 1, 2, 16, 6] -# CHECK-NEXT: sample 51: [1, 3, 1, 1, 2, 16, 12] -# CHECK-NEXT: sample 52: [1, 3, 1, 2, 1, 16, 1] -# CHECK-NEXT: sample 53: [1, 3, 1, 2, 1, 16, 2] -# CHECK-NEXT: sample 54: [1, 3, 1, 2, 1, 16, 3] -# CHECK-NEXT: sample 55: [1, 3, 1, 2, 1, 16, 4] -# CHECK-NEXT: sample 56: [1, 3, 1, 2, 1, 16, 6] -# CHECK-NEXT: sample 57: [1, 3, 1, 2, 1, 16, 12] -# CHECK-NEXT: sample 58: [1, 7, 1, 1, 1, 16, 1] -# CHECK-NEXT: sample 59: [1, 7, 1, 1, 1, 16, 2] -# CHECK-NEXT: sample 60: [1, 7, 1, 1, 1, 16, 3] -# CHECK-NEXT: sample 61: [1, 7, 1, 1, 1, 16, 4] -# CHECK-NEXT: sample 62: [1, 7, 1, 1, 1, 16, 6] -# CHECK-NEXT: sample 63: [1, 7, 1, 1, 1, 16, 12] -# CHECK-NEXT: sample 64: [1, 7, 1, 1, 1, 32, 1] -# CHECK-NEXT: sample 65: [1, 7, 1, 1, 1, 32, 2] -# CHECK-NEXT: sample 66: [1, 7, 1, 1, 1, 32, 3] -# CHECK-NEXT: sample 67: [1, 7, 1, 1, 1, 32, 4] -# CHECK-NEXT: sample 68: [1, 7, 1, 1, 1, 32, 6] -# CHECK-NEXT: sample 69: [1, 7, 1, 1, 2, 16, 1] -# CHECK-NEXT: sample 70: [1, 7, 1, 1, 2, 16, 2] -# CHECK-NEXT: sample 71: [1, 7, 1, 1, 2, 16, 3] -# CHECK-NEXT: sample 72: [1, 7, 1, 1, 2, 16, 4] -# CHECK-NEXT: sample 73: [1, 7, 1, 1, 2, 16, 6] -# CHECK-NEXT: sample 74: [1, 7, 1, 2, 1, 16, 1] -# CHECK-NEXT: sample 75: [1, 7, 1, 2, 1, 16, 2] -# CHECK-NEXT: sample 76: [1, 7, 1, 2, 1, 16, 3] -# CHECK-NEXT: sample 77: [1, 7, 1, 2, 1, 16, 4] -# CHECK-NEXT: sample 78: [1, 7, 1, 2, 1, 16, 6] -# CHECK-NEXT: sample 79: [1, 7, 1, 2, 1, 16, 12] -# CHECK-NEXT: sample 80: [1, 7, 3, 1, 1, 16, 1] -# CHECK-NEXT: sample 81: [1, 7, 3, 1, 1, 16, 2] -# CHECK-NEXT: sample 82: [1, 7, 3, 1, 1, 16, 3] -# CHECK-NEXT: sample 83: [1, 7, 3, 1, 1, 16, 4] -# CHECK-NEXT: sample 84: [1, 7, 3, 1, 2, 16, 1] -# CHECK-NEXT: sample 85: [1, 7, 3, 1, 2, 16, 2] -# CHECK-NEXT: sample 86: [1, 7, 3, 1, 2, 16, 3] -# CHECK-NEXT: sample 87: [1, 7, 3, 2, 1, 16, 1] -# CHECK-NEXT: sample 88: [1, 7, 3, 2, 1, 16, 2] -# CHECK-NEXT: sample 89: [1, 7, 3, 2, 1, 16, 3] -# CHECK-NEXT: sample 90: [1, 7, 3, 2, 1, 16, 4] -# CHECK-NEXT: sample 91: [1, 21, 1, 1, 1, 16, 1] -# CHECK-NEXT: sample 92: [1, 21, 1, 1, 1, 16, 2] -# CHECK-NEXT: sample 93: [1, 21, 1, 1, 1, 16, 3] -# CHECK-NEXT: sample 94: [1, 21, 1, 1, 1, 16, 4] -# CHECK-NEXT: sample 95: [1, 21, 1, 1, 1, 16, 6] -# CHECK-NEXT: sample 96: [1, 21, 1, 1, 1, 32, 1] -# CHECK-NEXT: sample 97: [1, 21, 1, 1, 1, 32, 2] -# CHECK-NEXT: sample 98: [1, 21, 1, 1, 1, 32, 3] -# CHECK-NEXT: sample 99: [1, 21, 1, 1, 2, 16, 1] -# CHECK-NEXT: stats {'filtered_l2': 100, 'filtered_l1': 105, 'filtered_reg': 115, 'filtered_vec': 154, 'filtered': 2126, 'all': 2749} -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 21, './i2': 21, './i3': 1}, 'j': {'./j1': 32, './j2': 32, './j3': 16}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './i1', './j1', './k', './i2', './j2', './k1', './i3', './j3']}, vectorization=['./j3'], parallelization=['./i', './j'], unrolling={'./j3': 16, './i3': 1, './k1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +<<<<<<< HEAD +======= +>>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +<<<<<<< HEAD +======= +>>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +# CHECK: File "/home/ruicesista/Documents/xtc/xtc/tests/filecheck/search/test_matmul_pprprpvr.py", line 39 +# CHECK-NEXT: >>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +# CHECK-NEXT: ^ +# CHECK-NEXT: SyntaxError: invalid decimal literal diff --git a/tests/filecheck/search/test_matmul_pprprpvr_rnd.py b/tests/filecheck/search/test_matmul_pprprpvr_rnd.py index ff1fa2cba..6d165210d 100644 --- a/tests/filecheck/search/test_matmul_pprprpvr_rnd.py +++ b/tests/filecheck/search/test_matmul_pprprpvr_rnd.py @@ -18,25 +18,10 @@ utils.print_random_samples(backend, strategy, 20) -# CHECK: sample 0: [1, 21, 1, 1, 1, 32, 3] -# CHECK-NEXT: sample 1: [7, 3, 1, 1, 1, 16, 2] -# CHECK-NEXT: sample 2: [7, 3, 1, 1, 2, 16, 1] -# CHECK-NEXT: sample 3: [7, 1, 1, 1, 1, 16, 2] -# CHECK-NEXT: sample 4: [7, 3, 1, 1, 1, 16, 1] -# CHECK-NEXT: sample 5: [21, 1, 1, 1, 1, 16, 1] -# CHECK-NEXT: sample 6: [3, 7, 1, 1, 1, 16, 2] -# CHECK-NEXT: sample 7: [21, 1, 1, 2, 1, 16, 12] -# CHECK-NEXT: sample 8: [7, 1, 1, 1, 1, 16, 6] -# CHECK-NEXT: sample 9: [1, 21, 1, 1, 2, 16, 3] -# CHECK-NEXT: sample 10: [3, 1, 1, 1, 1, 16, 4] -# CHECK-NEXT: sample 11: [3, 1, 1, 1, 2, 16, 4] -# CHECK-NEXT: sample 12: [7, 1, 1, 2, 1, 16, 2] -# CHECK-NEXT: sample 13: [1, 7, 3, 2, 1, 16, 4] -# CHECK-NEXT: sample 14: [3, 1, 1, 1, 2, 16, 1] -# CHECK-NEXT: sample 15: [1, 21, 1, 1, 1, 16, 1] -# CHECK-NEXT: sample 16: [3, 1, 1, 1, 1, 16, 12] -# CHECK-NEXT: sample 17: [1, 3, 1, 2, 1, 16, 2] -# CHECK-NEXT: sample 18: [1, 1, 1, 1, 2, 16, 3] -# CHECK-NEXT: sample 19: [7, 1, 3, 1, 1, 16, 2] -# CHECK-NEXT: stats {'filtered_l2': 2, 'filtered_l1': 2, 'filtered_reg': 3, 'filtered_vec': 3, 'filtered': 70} -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 21, './i2': 3, './i3': 3}, 'j': {'./j1': 16, './j2': 16, './j3': 16}, 'k': {'./k1': 2}}, permutation={'.': ['./i', './j', './i1', './j1', './k', './i2', './j2', './k1', './i3', './j3']}, vectorization=['./j3'], parallelization=['./i', './j'], unrolling={'./j3': 16, './i3': 3, './k1': 2}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +<<<<<<< HEAD +======= +>>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +# CHECK: File "/home/ruicesista/Documents/xtc/xtc/tests/filecheck/search/test_matmul_pprprpvr_rnd.py", line 46 +# CHECK-NEXT: >>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +# CHECK-NEXT: ^ +# CHECK-NEXT: SyntaxError: invalid decimal literal diff --git a/tests/filecheck/search/test_matmul_prp.py b/tests/filecheck/search/test_matmul_prp.py index 967afc2c7..cc6952bc0 100644 --- a/tests/filecheck/search/test_matmul_prp.py +++ b/tests/filecheck/search/test_matmul_prp.py @@ -12,30 +12,10 @@ utils.print_all_opt_schedules(backend, strategy) utils.print_exhaustive_samples(backend, strategy, 100) -# CHECK: schedule O0: [1, 1] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1}, 'j': {'./j1': 1}, 'k': {}}, permutation={'.': ['./i', './j', './k', './i1', './j1']}, vectorization=['./j1'], parallelization=[], unrolling={'./j1': 1, './i1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O1: [1, 1] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1}, 'j': {'./j1': 1}, 'k': {}}, permutation={'.': ['./i', './j', './k', './i1', './j1']}, vectorization=['./j1'], parallelization=[], unrolling={'./j1': 1, './i1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O2: [1, 16] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1}, 'j': {'./j1': 16}, 'k': {}}, permutation={'.': ['./i', './j', './k', './i1', './j1']}, vectorization=['./j1'], parallelization=[], unrolling={'./j1': 16, './i1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: schedule O3: [3, 16] -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 3}, 'j': {'./j1': 16}, 'k': {}}, permutation={'.': ['./i', './j', './k', './i1', './j1']}, vectorization=['./j1'], parallelization=[], unrolling={'./j1': 16, './i1': 3}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] -# CHECK-NEXT: sample 0: [1, 1] -# CHECK-NEXT: sample 1: [1, 2] -# CHECK-NEXT: sample 2: [1, 4] -# CHECK-NEXT: sample 3: [1, 8] -# CHECK-NEXT: sample 4: [1, 16] -# CHECK-NEXT: sample 5: [1, 32] -# CHECK-NEXT: sample 6: [3, 1] -# CHECK-NEXT: sample 7: [3, 2] -# CHECK-NEXT: sample 8: [3, 4] -# CHECK-NEXT: sample 9: [3, 8] -# CHECK-NEXT: sample 10: [3, 16] -# CHECK-NEXT: sample 11: [3, 32] -# CHECK-NEXT: sample 12: [7, 1] -# CHECK-NEXT: sample 13: [7, 2] -# CHECK-NEXT: sample 14: [7, 4] -# CHECK-NEXT: sample 15: [7, 8] -# CHECK-NEXT: sample 16: [7, 16] -# CHECK-NEXT: stats {'filtered': 17, 'all': 24} -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 7}, 'j': {'./j1': 16}, 'k': {}}, permutation={'.': ['./i', './j', './k', './i1', './j1']}, vectorization=['./j1'], parallelization=[], unrolling={'./j1': 16, './i1': 7}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +<<<<<<< HEAD +======= +>>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +# CHECK: File "/home/ruicesista/Documents/xtc/xtc/tests/filecheck/search/test_matmul_prp.py", line 71 +# CHECK-NEXT: >>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +# CHECK-NEXT: ^ +# CHECK-NEXT: SyntaxError: invalid decimal literal diff --git a/tests/filecheck/search/test_matmul_prp_rnd.py b/tests/filecheck/search/test_matmul_prp_rnd.py index 2e6fc5fea..98a05322d 100644 --- a/tests/filecheck/search/test_matmul_prp_rnd.py +++ b/tests/filecheck/search/test_matmul_prp_rnd.py @@ -18,25 +18,10 @@ utils.print_random_samples(backend, strategy, 20) -# CHECK: sample 0: [21, 2] -# CHECK-NEXT: sample 1: [7, 16] -# CHECK-NEXT: sample 2: [3, 1] -# CHECK-NEXT: sample 3: [3, 4] -# CHECK-NEXT: sample 4: [1, 32] -# CHECK-NEXT: sample 5: [1, 8] -# CHECK-NEXT: sample 6: [1, 1] -# CHECK-NEXT: sample 7: [1, 16] -# CHECK-NEXT: sample 8: [21, 16] -# CHECK-NEXT: sample 9: [7, 32] -# CHECK-NEXT: sample 10: [7, 1] -# CHECK-NEXT: sample 11: [21, 1] -# CHECK-NEXT: sample 12: [7, 8] -# CHECK-NEXT: sample 13: [7, 2] -# CHECK-NEXT: sample 14: [7, 4] -# CHECK-NEXT: sample 15: [21, 4] -# CHECK-NEXT: sample 16: [3, 32] -# CHECK-NEXT: sample 17: [1, 4] -# CHECK-NEXT: sample 18: [3, 2] -# CHECK-NEXT: sample 19: [21, 8] -# CHECK-NEXT: stats {'filtered': 19} -# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 21}, 'j': {'./j1': 8}, 'k': {}}, permutation={'.': ['./i', './j', './k', './i1', './j1']}, vectorization=['./j1'], parallelization=['./i', './j'], unrolling={'./j1': 8, './i1': 21}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +<<<<<<< HEAD +======= +>>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +# CHECK: File "/home/ruicesista/Documents/xtc/xtc/tests/filecheck/search/test_matmul_prp_rnd.py", line 46 +# CHECK-NEXT: >>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) +# CHECK-NEXT: ^ +# CHECK-NEXT: SyntaxError: invalid decimal literal From 6874d2c898019f1a8ef0fbf4d7fcdf21c6096da5 Mon Sep 17 00:00:00 2001 From: Rui Cesista Date: Mon, 18 May 2026 12:31:48 +0200 Subject: [PATCH 2/5] Add mapping order + use can use forall for any size of problem now --- src/xtc/backends/mlir/MlirCompilerPasses.py | 24 +++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/xtc/backends/mlir/MlirCompilerPasses.py b/src/xtc/backends/mlir/MlirCompilerPasses.py index 73b5eaf22..4c6873a4a 100644 --- a/src/xtc/backends/mlir/MlirCompilerPasses.py +++ b/src/xtc/backends/mlir/MlirCompilerPasses.py @@ -360,26 +360,40 @@ def _generate_node_scheduling( elif loop_name in tiles_sizes_by_loops: if loop_name in schedule.gpu_blocks: tile_vect = [ - max(tiles_sizes_by_loops[loop]) for loop in schedule.gpu_blocks + sum(values) + for values in zip( + *[ + tiles_sizes_by_loops[loop] + for loop in schedule.gpu_blocks + ] + ) ] tile_vect = tile_vect + [0] * (3 - len(tile_vect)) if gpu_material: - new_loop = self._strip_mine( + self._strip_mine( loop_name=loop_name, tiling_vector=tile_vect, + mapping_order=[], schedule=schedule, sched_state=sched_state, ) gpu_material = False elif loop_name in schedule.gpu_threads: tile_vect = [ - max(tiles_sizes_by_loops[loop]) for loop in schedule.gpu_threads + sum(values) + for values in zip( + *[ + tiles_sizes_by_loops[loop] + for loop in schedule.gpu_threads + ] + ) ] tile_vect = tile_vect + [0] * (3 - len(tile_vect)) if gpu_mat_thread: - new_loop = self._strip_mine( + self._strip_mine( loop_name=loop_name, tiling_vector=tile_vect, + mapping_order=[], schedule=schedule, sched_state=sched_state, ) @@ -388,6 +402,7 @@ def _generate_node_scheduling( self._strip_mine( loop_name=loop_name, tiling_vector=tiles_sizes_by_loops[loop_name], + mapping_order=[], schedule=schedule, sched_state=sched_state, ) @@ -532,6 +547,7 @@ def _strip_mine( self, loop_name: str, tiling_vector: list[int], + mapping_order: list[int], schedule: MlirNodeSchedule, sched_state: SchedulingState, ) -> OpResult: From 00b2cf59efe09a064cca3ba64c0a5df1f4d01c45 Mon Sep 17 00:00:00 2001 From: Rui Cesista Date: Mon, 18 May 2026 14:38:04 +0200 Subject: [PATCH 3/5] Add mapping order for the gpu thread and block And fix some primitive and type problem --- src/xtc/backends/jir/JIRScheduler.py | 4 +- src/xtc/backends/mlir/MlirCompilerPasses.py | 114 ++++++----- src/xtc/backends/tvm/TVMScheduler.py | 4 +- src/xtc/itf/schd/scheduler.py | 4 +- src/xtc/schedules/descript.py | 12 +- src/xtc/schedules/parameter_loop_nest.py | 5 + src/xtc/schedules/parsing.py | 3 +- .../test_matmul_mlir_offload_tensor.py | 191 ++++++++++-------- tests/filecheck/search/test_conv_oo.py | 95 ++++++++- tests/filecheck/search/test_conv_pprprp.py | 120 ++++++++++- tests/filecheck/search/test_conv_pprprpv.py | 120 ++++++++++- tests/filecheck/search/test_conv_pprprpvr.py | 120 ++++++++++- .../search/test_conv_pprprpvr_rnd.py | 29 ++- tests/filecheck/search/test_conv_prp.py | 64 +++++- tests/filecheck/search/test_conv_prp_rnd.py | 29 ++- tests/filecheck/search/test_matmul_goto.py | 117 ++++++++++- tests/filecheck/search/test_matmul_goto_r.py | 117 ++++++++++- tests/filecheck/search/test_matmul_oo.py | 62 +++++- tests/filecheck/search/test_matmul_p1.py | 117 ++++++++++- tests/filecheck/search/test_matmul_p1v.py | 43 +++- tests/filecheck/search/test_matmul_pprprp.py | 120 ++++++++++- tests/filecheck/search/test_matmul_pprprpv.py | 120 ++++++++++- .../filecheck/search/test_matmul_pprprpvr.py | 120 ++++++++++- .../search/test_matmul_pprprpvr_rnd.py | 29 ++- tests/filecheck/search/test_matmul_prp.py | 34 +++- tests/filecheck/search/test_matmul_prp_rnd.py | 29 ++- 26 files changed, 1532 insertions(+), 290 deletions(-) diff --git a/src/xtc/backends/jir/JIRScheduler.py b/src/xtc/backends/jir/JIRScheduler.py index 5b94e776d..ae6e2bca6 100644 --- a/src/xtc/backends/jir/JIRScheduler.py +++ b/src/xtc/backends/jir/JIRScheduler.py @@ -347,12 +347,12 @@ def distributed_buffer_at( pass @override - def gpu_thread(self, axes: list[str]) -> None: + def gpu_thread(self, axes: list[str], root: str = DEFAULT_ROOT) -> None: # TODO: not implemented for now pass @override - def gpu_block(self, axes: list[str]) -> None: + def gpu_block(self, axes: list[str], root: str = DEFAULT_ROOT) -> None: # TODO: not implemented for now pass diff --git a/src/xtc/backends/mlir/MlirCompilerPasses.py b/src/xtc/backends/mlir/MlirCompilerPasses.py index 4c6873a4a..465cf8f73 100644 --- a/src/xtc/backends/mlir/MlirCompilerPasses.py +++ b/src/xtc/backends/mlir/MlirCompilerPasses.py @@ -22,6 +22,7 @@ ApplyFoldUnitExtentDimsViaSlicesPatternsOp, MatchInterfaceEnum, FuseIntoContainingOp, +) from mlir.dialects.transform.gpu import ( MapForallToBlocks, MapNestedForallToThreads, @@ -240,6 +241,13 @@ def _generate_scheduling(self) -> OpResult: ) if schedule.vectorization or self._always_vectorize: self._post_vectorize(scheduling_state, schedule) + + # GPU mapping + if schedule.gpu_blocks: + self._gpu_mapping( + schedule, + scheduling_state, + ) handle = scheduling_state.handle assert handle, "At least 1 operation should have been processed" @@ -369,11 +377,18 @@ def _generate_node_scheduling( ) ] tile_vect = tile_vect + [0] * (3 - len(tile_vect)) + # TODO: Do not work with splitting + position_index = [ + permutation.index(loop) for loop in schedule.gpu_blocks + ] + mapping_order = sorted( + range(len(position_index)), key=lambda i: position_index[i] + ) if gpu_material: self._strip_mine( loop_name=loop_name, tiling_vector=tile_vect, - mapping_order=[], + mapping_order=mapping_order, schedule=schedule, sched_state=sched_state, ) @@ -389,11 +404,17 @@ def _generate_node_scheduling( ) ] tile_vect = tile_vect + [0] * (3 - len(tile_vect)) + position_index = [ + permutation.index(loop) for loop in schedule.gpu_threads + ] + mapping_order = sorted( + range(len(position_index)), key=lambda i: position_index[i] + ) if gpu_mat_thread: self._strip_mine( loop_name=loop_name, tiling_vector=tile_vect, - mapping_order=[], + mapping_order=mapping_order, schedule=schedule, sched_state=sched_state, ) @@ -422,10 +443,6 @@ def _generate_node_scheduling( if schedule.unrolling: self._unroll(permutation, schedule, sched_state) - # Gpu mapping - if schedule.gpu_blocks: - self._gpu_mapping(schedule, sched_state, tiles_sizes_by_loops) - return sched_state def _fuse_producers_into_loop( @@ -555,22 +572,13 @@ def _strip_mine( attr_array = {} if loop_name in schedule.gpu_threads: attr_array["mapping"] = ArrayAttr.get( - [ - self._get_thread_id(index) - for index in range(len(schedule.gpu_threads)) - ] + [self._get_thread_id(index) for index in mapping_order] ) - attr_array["tile_sizes"] = tiling_vector elif loop_name in schedule.gpu_blocks: attr_array["mapping"] = ArrayAttr.get( - [ - self._get_block_id(index) - for index in range(len(schedule.gpu_blocks)) - ] + [self._get_block_id(index) for index in mapping_order] ) - attr_array["tile_sizes"] = tiling_vector - else: - attr_array["tile_sizes"] = tiling_vector + attr_array["tile_sizes"] = tiling_vector tiling_command = TileUsingForallOp(sched_state.handle, **attr_array) else: tiling_command = TileUsingForOp(sched_state.handle, sizes=tiling_vector) @@ -747,30 +755,6 @@ def _collect_fused_producers(self, unscheduled_handles: set[str | None]): return fused_producers - -def find_producer_handles(module: Module, root_handle: str) -> list[str | None]: - # returns the handles for each operand of the operation specified by root_handle - producer_handles: list[str | None] = [] - root_op = None - for func_op in module.body.operations: - for op in func_op.regions[0].blocks[0].operations: - if root_handle in op.attributes: - root_op = op - break - if root_op: - break - - if not root_op: - return producer_handles - for operand in root_op.operands: - producer_op = operand.owner - producer_handles.append(None) - if producer_op and hasattr(producer_op, "attributes"): - for attr in producer_op.attributes: - if str(attr.name).startswith("__xtc_id_"): - producer_handles[-1] = attr.name - return producer_handles - def _get_thread_id(self, index: int) -> Attribute: ctx = self._mlir_program.mlir_context return Attribute.parse(f"#gpu.thread<{_GPU_DIM[index]}>", context=ctx) @@ -783,8 +767,8 @@ def _gpu_mapping( self, schedule: MlirNodeSchedule, sched_state: SchedulingState, - tiles_sizes_by_loops: dict[str, list[int]], ): + tiles_sizes_by_loops = self._generate_tiling_insns(schedule) if schedule.gpu_blocks: new_loop = next( ( @@ -795,27 +779,49 @@ def _gpu_mapping( None, ) # Since we know there only 1 non zero number - # TODO Find a way to put block id and thread id divide by the size - grid_dims = [ - max(tiles_sizes_by_loops[loop_name]) - for loop_name in schedule.gpu_blocks - ] - grid_dims = grid_dims + [1] * (3 - len(grid_dims)) + # TODO Find a way to put thread number instead of putting tile size new_loop = MapForallToBlocks( new_loop, - grid_dims=grid_dims, generate_gpu_launch=True, ).result if schedule.gpu_threads: block_dims = [ - max(tiles_sizes_by_loops[loop_name]) - for loop_name in schedule.gpu_threads + max(tiles_sizes_by_loops[loop_name_block]) + // max(tiles_sizes_by_loops[loop_name]) + for loop_name, loop_name_block in zip( + schedule.gpu_threads, schedule.gpu_blocks + ) ] block_dims = block_dims + [1] * (3 - len(block_dims)) - new_loop = MapNestedForallToThreads( + MapNestedForallToThreads( new_loop, block_dims=block_dims, - ).result + ) + + +def find_producer_handles(module: Module, root_handle: str) -> list[str | None]: + # returns the handles for each operand of the operation specified by root_handle + producer_handles: list[str | None] = [] + root_op = None + for func_op in module.body.operations: + for op in func_op.regions[0].blocks[0].operations: + if root_handle in op.attributes: + root_op = op + break + if root_op: + break + + if not root_op: + return producer_handles + for operand in root_op.operands: + producer_op = operand.owner + producer_handles.append(None) + if producer_op and hasattr(producer_op, "attributes"): + for attr in producer_op.attributes: + if str(attr.name).startswith("__xtc_id_"): + producer_handles[-1] = attr.name + return producer_handles + class MlirProgramApplyTransformPass: def __init__( diff --git a/src/xtc/backends/tvm/TVMScheduler.py b/src/xtc/backends/tvm/TVMScheduler.py index bf8df4e01..fe2bdb8bc 100644 --- a/src/xtc/backends/tvm/TVMScheduler.py +++ b/src/xtc/backends/tvm/TVMScheduler.py @@ -496,12 +496,12 @@ def distributed_buffer_at( pass @override - def gpu_thread(self, axes: list[str]) -> None: + def gpu_thread(self, axes: list[str], root: str = DEFAULT_ROOT) -> None: # TODO: not implemented for now pass @override - def gpu_block(self, axes: list[str]) -> None: + def gpu_block(self, axes: list[str], root: str = DEFAULT_ROOT) -> None: # TODO: not implemented for now pass diff --git a/src/xtc/itf/schd/scheduler.py b/src/xtc/itf/schd/scheduler.py index c9277127e..dc945c2dd 100644 --- a/src/xtc/itf/schd/scheduler.py +++ b/src/xtc/itf/schd/scheduler.py @@ -291,7 +291,7 @@ def distributed_buffer_at( ... @abstractmethod - def gpu_thread(self, axes: list[str]) -> None: + def gpu_thread(self, axes: list[str], root: str = DEFAULT_ROOT) -> None: """ Map an axis to a certain gpu thread either x, y or z. The mapped axis need to be in parallelization. @@ -300,7 +300,7 @@ def gpu_thread(self, axes: list[str]) -> None: ... @abstractmethod - def gpu_block(self, axes: list[str]) -> None: + def gpu_block(self, axes: list[str], root: str = DEFAULT_ROOT) -> None: """ Map an axis to a certain gpu block either x, y or z. The mapped axis need to be in parallelization. diff --git a/src/xtc/schedules/descript.py b/src/xtc/schedules/descript.py index 90fc1b3f0..8d0d9ba01 100644 --- a/src/xtc/schedules/descript.py +++ b/src/xtc/schedules/descript.py @@ -544,14 +544,18 @@ def _apply_node(self, node: LoopNestNode, scheduler: Scheduler) -> None: scheduler.pack_at(axis, input_idx, mtype=mtype, pad=pad, root=root) if node.gpu_block: - self.scheduler.gpu_block( - sorted(node.gpu_block, key=node.gpu_block.get), root=root + sorted_keys = sorted( + (k for k, v in node.gpu_block.items() if v is not None), + key=lambda k: node.gpu_block[k], ) + scheduler.gpu_block(sorted_keys, root=root) if node.gpu_thread: - self.scheduler.gpu_thread( - sorted(node.gpu_thread, key=node.gpu_thread.get), root=root + sorted_keys = sorted( + (k for k, v in node.gpu_thread.items() if v is not None), + key=lambda k: node.gpu_block[k], ) + scheduler.gpu_thread(sorted_keys, root=root) # Recursively apply children for child in node.children: diff --git a/src/xtc/schedules/parameter_loop_nest.py b/src/xtc/schedules/parameter_loop_nest.py index ee1eba5bf..dd1a81265 100644 --- a/src/xtc/schedules/parameter_loop_nest.py +++ b/src/xtc/schedules/parameter_loop_nest.py @@ -108,6 +108,8 @@ class ParameterLoopNestNode(Node["ParameterLoopNestNode"]): (input_idx, mtype, pad). input_idx is the input buffer index, mtype is the memory type (None for default), pad enables padding. constraints: List of generated constraints. + gpu_block: Maps loops to block id, that loop need to be parallelize + gpu_thread: Maps loops to thread id, that loop need to be parallelize """ root: str @@ -122,6 +124,9 @@ class ParameterLoopNestNode(Node["ParameterLoopNestNode"]): buffer_at: dict[str, str | None] = field(default_factory=dict) pack_at: dict[str, tuple[int, str | None, bool | str]] = field(default_factory=dict) constraints: list[str] = field(default_factory=list) + # TODO: make gpu_block and gpu_thread work for parameter loop nest + gpu_block: dict[str, int] = field(default_factory=dict) + gpu_thread: dict[str, int] = field(default_factory=dict) def apply_sample(self, sample: dict[str, int]) -> LoopNestNode: """ diff --git a/src/xtc/schedules/parsing.py b/src/xtc/schedules/parsing.py index 92c00b618..fb1fce8b4 100644 --- a/src/xtc/schedules/parsing.py +++ b/src/xtc/schedules/parsing.py @@ -270,7 +270,8 @@ def _parse_annotations(self, value: dict[str, Any], context: str) -> Annotations if partial and full: raise ScheduleParseError(f"{context} has both annotations full and partial") - + assert isinstance(gpu_block, int) or gpu_block is None + assert isinstance(gpu_thread, int) or gpu_thread is None return Annotations( unroll_factor=unroll_factor, unroll_specified=unroll_specified, diff --git a/tests/filecheck/backends/target_gpu/test_matmul_mlir_offload_tensor.py b/tests/filecheck/backends/target_gpu/test_matmul_mlir_offload_tensor.py index 9cbaeb9ac..2a02e1317 100644 --- a/tests/filecheck/backends/target_gpu/test_matmul_mlir_offload_tensor.py +++ b/tests/filecheck/backends/target_gpu/test_matmul_mlir_offload_tensor.py @@ -25,7 +25,7 @@ sch.tile("i", {"i1": 128, "i2": 32}) sch.tile("j", {"j1": 128, "j2": 32}) sch.tile("k", {"k1": 64}) -# sch.unroll({"i1": 2}) +sch.unroll({"i2": 2}) sch.parallelize(["i", "j","i1", "j1"]) sch.gpu_block(["i", "j"]) sch.gpu_thread(["i1", "j1"]) @@ -38,7 +38,6 @@ dump_file="gpu_matmul_mlir_offload_tensor", print_source_ir=True, print_transformed_ir=True, - print_lowered_ir=True, ) module = comp.compile(sched) executor = module.get_executor(validate=True) @@ -46,10 +45,10 @@ print(f"CODE: {res}") # CHECK: // -----// IR Dump Before transform //----- // # CHECK-NEXT: module attributes {transform.with_named_sequence} { -# CHECK-NEXT: func.func @matmul(%arg0: memref<4x512xf32> {llvm.noalias}, %arg1: memref<512x32xf32> {llvm.noalias, memref.on_device}, %arg2: memref<4x32xf32> {llvm.noalias, memref.on_device}) { +# CHECK-NEXT: func.func @matmul(%arg0: memref<1024x512xf32> {llvm.noalias}, %arg1: memref<512x1024xf32> {llvm.noalias, memref.on_device}, %arg2: memref<1024x1024xf32> {llvm.noalias, memref.on_device}) { # CHECK-NEXT: %cst = arith.constant 0.000000e+00 : f32 -# CHECK-NEXT: linalg.fill {__xtc_id_C_0_} ins(%cst : f32) outs(%arg2 : memref<4x32xf32>) -# CHECK-NEXT: linalg.matmul {__xtc_id_C_} ins(%arg0, %arg1 : memref<4x512xf32>, memref<512x32xf32>) outs(%arg2 : memref<4x32xf32>) +# CHECK-NEXT: linalg.fill {__xtc_id_C_0_} ins(%cst : f32) outs(%arg2 : memref<1024x1024xf32>) +# CHECK-NEXT: linalg.matmul {__xtc_id_C_} ins(%arg0, %arg1 : memref<1024x512xf32>, memref<512x1024xf32>) outs(%arg2 : memref<1024x1024xf32>) # CHECK-NEXT: return # CHECK-NEXT: } # CHECK-NEXT: transform.named_sequence @_vecto(%arg0: !transform.any_op {transform.consumed}) { @@ -63,92 +62,122 @@ # CHECK-NEXT: %tiled_linalg_op_0, %loops_1 = transform.structured.tile_using_for %tiled_linalg_op tile_sizes [0, 1] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) # CHECK-NEXT: transform.annotate %loops_1 "./j" : !transform.any_op # CHECK-NEXT: %1 = transform.structured.match attributes {__xtc_id_C_} in %arg0 : (!transform.any_op) -> !transform.any_op -# CHECK-NEXT: %tiled_op, %forall_op = transform.structured.tile_using_forall %1 tile_sizes [2, 0, 0] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: %tiled_op, %forall_op = transform.structured.tile_using_forall %1 tile_sizes [128, 128, 0](mapping = [#gpu.block, #gpu.block]) : (!transform.any_op) -> (!transform.any_op, !transform.any_op) # CHECK-NEXT: transform.annotate %forall_op "./i" : !transform.any_op -# CHECK-NEXT: %tiled_linalg_op_2, %loops_3 = transform.structured.tile_using_for %tiled_op tile_sizes [0, 16, 0] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) -# CHECK-NEXT: transform.annotate %loops_3 "./j" : !transform.any_op -# CHECK-NEXT: %tiled_linalg_op_4, %loops_5 = transform.structured.tile_using_for %tiled_linalg_op_2 tile_sizes [0, 0, 1] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: %tiled_op_2, %forall_op_3 = transform.structured.tile_using_forall %tiled_op tile_sizes [32, 32, 0](mapping = [#gpu.thread, #gpu.thread]) : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: transform.annotate %forall_op_3 "./i1" : !transform.any_op +# CHECK-NEXT: %tiled_linalg_op_4, %loops_5 = transform.structured.tile_using_for %tiled_op_2 tile_sizes [0, 0, 64] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) # CHECK-NEXT: transform.annotate %loops_5 "./k" : !transform.any_op -# CHECK-NEXT: %tiled_linalg_op_6, %loops_7 = transform.structured.tile_using_for %tiled_linalg_op_4 tile_sizes [1, 0, 0] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) -# CHECK-NEXT: transform.annotate %loops_7 "./i1" : !transform.any_op -# CHECK-NEXT: %tiled_linalg_op_8, %loops_9 = transform.structured.tile_using_for %tiled_linalg_op_6 tile_sizes [0, 1, 0] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) -# CHECK-NEXT: transform.annotate %loops_9 "./j1" : !transform.any_op -# CHECK-NEXT: transform.loop.unroll %loops_7 {factor = 2 : i64} : !transform.any_op +# CHECK-NEXT: %tiled_linalg_op_6, %loops_7 = transform.structured.tile_using_for %tiled_linalg_op_4 tile_sizes [0, 0, 1] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: transform.annotate %loops_7 "./k1" : !transform.any_op +# CHECK-NEXT: %tiled_linalg_op_8, %loops_9 = transform.structured.tile_using_for %tiled_linalg_op_6 tile_sizes [1, 0, 0] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: transform.annotate %loops_9 "./i2" : !transform.any_op +# CHECK-NEXT: %tiled_linalg_op_10, %loops_11 = transform.structured.tile_using_for %tiled_linalg_op_8 tile_sizes [0, 1, 0] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: transform.annotate %loops_11 "./j2" : !transform.any_op +# CHECK-NEXT: transform.loop.unroll %loops_9 {factor = 2 : i64} : !transform.any_op +# CHECK-NEXT: %2 = transform.gpu.map_forall_to_blocks %forall_op generate_gpu_launch : (!transform.any_op) -> !transform.any_op +# CHECK-NEXT: %3 = transform.gpu.map_nested_forall_to_threads %2 block_dims = [4, 4, 1] : (!transform.any_op) -> !transform.any_op # CHECK-NEXT: transform.yield # CHECK-NEXT: } # CHECK-NEXT: } # CHECK-NEXT: # CHECK-NEXT: // -----// IR Dump After transform //----- // -# CHECK-NEXT: #map = affine_map<(d0) -> (d0 * 2)> +# CHECK-NEXT: #map = affine_map<(d0) -> (d0 * 128)> +# CHECK-NEXT: #map1 = affine_map<(d0) -> (d0 * 32)> # CHECK-NEXT: module attributes {transform.with_named_sequence} { -# CHECK-NEXT: func.func @matmul(%arg0: memref<4x512xf32> {llvm.noalias}, %arg1: memref<512x32xf32> {llvm.noalias, memref.on_device}, %arg2: memref<4x32xf32> {llvm.noalias, memref.on_device}) { +# CHECK-NEXT: func.func @matmul(%arg0: memref<1024x512xf32> {llvm.noalias}, %arg1: memref<512x1024xf32> {llvm.noalias, memref.on_device}, %arg2: memref<1024x1024xf32> {llvm.noalias, memref.on_device}) { # CHECK-NEXT: %cst = arith.constant 0.000000e+00 : f32 # CHECK-NEXT: %c0 = arith.constant 0 : index -# CHECK-NEXT: %c4 = arith.constant 4 : index +# CHECK-NEXT: %c1024 = arith.constant 1024 : index # CHECK-NEXT: %c1 = arith.constant 1 : index -# CHECK-NEXT: scf.for %arg3 = %c0 to %c4 step %c1 { -# CHECK-NEXT: %subview = memref.subview %arg2[%arg3, 0] [1, 32] [1, 1] : memref<4x32xf32> to memref<1x32xf32, strided<[32, 1], offset: ?>> -# CHECK-NEXT: %c0_0 = arith.constant 0 : index -# CHECK-NEXT: %c32 = arith.constant 32 : index -# CHECK-NEXT: %c1_1 = arith.constant 1 : index -# CHECK-NEXT: scf.for %arg4 = %c0_0 to %c32 step %c1_1 { -# CHECK-NEXT: %subview_2 = memref.subview %subview[0, %arg4] [1, 1] [1, 1] : memref<1x32xf32, strided<[32, 1], offset: ?>> to memref<1x1xf32, strided<[32, 1], offset: ?>> -# CHECK-NEXT: linalg.fill {__xtc_id_C_0_} ins(%cst : f32) outs(%subview_2 : memref<1x1xf32, strided<[32, 1], offset: ?>>) +# CHECK-NEXT: scf.for %arg3 = %c0 to %c1024 step %c1 { +# CHECK-NEXT: %subview = memref.subview %arg2[%arg3, 0] [1, 1024] [1, 1] : memref<1024x1024xf32> to memref<1x1024xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %c0_5 = arith.constant 0 : index +# CHECK-NEXT: %c1024_6 = arith.constant 1024 : index +# CHECK-NEXT: %c1_7 = arith.constant 1 : index +# CHECK-NEXT: scf.for %arg4 = %c0_5 to %c1024_6 step %c1_7 { +# CHECK-NEXT: %subview_8 = memref.subview %subview[0, %arg4] [1, 1] [1, 1] : memref<1x1024xf32, strided<[1024, 1], offset: ?>> to memref<1x1xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: linalg.fill {__xtc_id_C_0_} ins(%cst : f32) outs(%subview_8 : memref<1x1xf32, strided<[1024, 1], offset: ?>>) # CHECK-NEXT: } {"./j"} # CHECK-NEXT: } {"./i"} -# CHECK-NEXT: scf.forall (%arg3) in (2) { -# CHECK-NEXT: %0 = affine.apply #map(%arg3) -# CHECK-NEXT: %subview = memref.subview %arg0[%0, 0] [2, 512] [1, 1] : memref<4x512xf32> to memref<2x512xf32, strided<[512, 1], offset: ?>> -# CHECK-NEXT: %subview_0 = memref.subview %arg1[0, 0] [512, 32] [1, 1] : memref<512x32xf32> to memref<512x32xf32, strided<[32, 1]>> -# CHECK-NEXT: %subview_1 = memref.subview %arg2[%0, 0] [2, 32] [1, 1] : memref<4x32xf32> to memref<2x32xf32, strided<[32, 1], offset: ?>> -# CHECK-NEXT: %c0_2 = arith.constant 0 : index -# CHECK-NEXT: %c32 = arith.constant 32 : index -# CHECK-NEXT: %c16 = arith.constant 16 : index -# CHECK-NEXT: scf.for %arg4 = %c0_2 to %c32 step %c16 { -# CHECK-NEXT: %subview_3 = memref.subview %subview[0, 0] [2, 512] [1, 1] : memref<2x512xf32, strided<[512, 1], offset: ?>> to memref<2x512xf32, strided<[512, 1], offset: ?>> -# CHECK-NEXT: %subview_4 = memref.subview %subview_0[0, %arg4] [512, 16] [1, 1] : memref<512x32xf32, strided<[32, 1]>> to memref<512x16xf32, strided<[32, 1], offset: ?>> -# CHECK-NEXT: %subview_5 = memref.subview %subview_1[0, %arg4] [2, 16] [1, 1] : memref<2x32xf32, strided<[32, 1], offset: ?>> to memref<2x16xf32, strided<[32, 1], offset: ?>> -# CHECK-NEXT: %c0_6 = arith.constant 0 : index -# CHECK-NEXT: %c512 = arith.constant 512 : index -# CHECK-NEXT: %c1_7 = arith.constant 1 : index -# CHECK-NEXT: scf.for %arg5 = %c0_6 to %c512 step %c1_7 { -# CHECK-NEXT: %subview_8 = memref.subview %subview_3[0, %arg5] [2, 1] [1, 1] : memref<2x512xf32, strided<[512, 1], offset: ?>> to memref<2x1xf32, strided<[512, 1], offset: ?>> -# CHECK-NEXT: %subview_9 = memref.subview %subview_4[%arg5, 0] [1, 16] [1, 1] : memref<512x16xf32, strided<[32, 1], offset: ?>> to memref<1x16xf32, strided<[32, 1], offset: ?>> -# CHECK-NEXT: %subview_10 = memref.subview %subview_5[0, 0] [2, 16] [1, 1] : memref<2x16xf32, strided<[32, 1], offset: ?>> to memref<2x16xf32, strided<[32, 1], offset: ?>> -# CHECK-NEXT: %c0_11 = arith.constant 0 : index +# CHECK-NEXT: %c1_0 = arith.constant 1 : index +# CHECK-NEXT: %c4 = arith.constant 4 : index +# CHECK-NEXT: %c4_1 = arith.constant 4 : index +# CHECK-NEXT: %c1_2 = arith.constant 1 : index +# CHECK-NEXT: %c8 = arith.constant 8 : index +# CHECK-NEXT: %c8_3 = arith.constant 8 : index +# CHECK-NEXT: %c1_4 = arith.constant 1 : index +# CHECK-NEXT: gpu.launch blocks(%arg3, %arg4, %arg5) in (%arg9 = %c8, %arg10 = %c8_3, %arg11 = %c1_4) threads(%arg6, %arg7, %arg8) in (%arg12 = %c4, %arg13 = %c4_1, %arg14 = %c1_2) { +# CHECK-NEXT: %c0_5 = arith.constant 0 : index +# CHECK-NEXT: %c0_6 = arith.constant 0 : index +# CHECK-NEXT: %block_id_x = gpu.block_id x +# CHECK-NEXT: %block_id_y = gpu.block_id y +# CHECK-NEXT: %block_id_z = gpu.block_id z +# CHECK-NEXT: %0 = affine.apply #map(%block_id_x) +# CHECK-NEXT: %1 = affine.apply #map(%block_id_y) +# CHECK-NEXT: %subview = memref.subview %arg0[%0, 0] [128, 512] [1, 1] : memref<1024x512xf32> to memref<128x512xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_7 = memref.subview %arg1[0, %1] [512, 128] [1, 1] : memref<512x1024xf32> to memref<512x128xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %subview_8 = memref.subview %arg2[%0, %1] [128, 128] [1, 1] : memref<1024x1024xf32> to memref<128x128xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %thread_id_x = gpu.thread_id x +# CHECK-NEXT: %thread_id_y = gpu.thread_id y +# CHECK-NEXT: %thread_id_z = gpu.thread_id z +# CHECK-NEXT: %2 = affine.apply #map1(%thread_id_x) +# CHECK-NEXT: %3 = affine.apply #map1(%thread_id_y) +# CHECK-NEXT: %subview_9 = memref.subview %subview[%2, 0] [32, 512] [1, 1] : memref<128x512xf32, strided<[512, 1], offset: ?>> to memref<32x512xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_10 = memref.subview %subview_7[0, %3] [512, 32] [1, 1] : memref<512x128xf32, strided<[1024, 1], offset: ?>> to memref<512x32xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %subview_11 = memref.subview %subview_8[%2, %3] [32, 32] [1, 1] : memref<128x128xf32, strided<[1024, 1], offset: ?>> to memref<32x32xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %c0_12 = arith.constant 0 : index +# CHECK-NEXT: %c512 = arith.constant 512 : index +# CHECK-NEXT: %c64 = arith.constant 64 : index +# CHECK-NEXT: scf.for %arg15 = %c0_12 to %c512 step %c64 { +# CHECK-NEXT: %subview_13 = memref.subview %subview_9[0, %arg15] [32, 64] [1, 1] : memref<32x512xf32, strided<[512, 1], offset: ?>> to memref<32x64xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_14 = memref.subview %subview_10[%arg15, 0] [64, 32] [1, 1] : memref<512x32xf32, strided<[1024, 1], offset: ?>> to memref<64x32xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %subview_15 = memref.subview %subview_11[0, 0] [32, 32] [1, 1] : memref<32x32xf32, strided<[1024, 1], offset: ?>> to memref<32x32xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %c0_16 = arith.constant 0 : index +# CHECK-NEXT: %c64_17 = arith.constant 64 : index +# CHECK-NEXT: %c1_18 = arith.constant 1 : index +# CHECK-NEXT: scf.for %arg16 = %c0_16 to %c64_17 step %c1_18 { +# CHECK-NEXT: %subview_19 = memref.subview %subview_13[0, %arg16] [32, 1] [1, 1] : memref<32x64xf32, strided<[512, 1], offset: ?>> to memref<32x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_20 = memref.subview %subview_14[%arg16, 0] [1, 32] [1, 1] : memref<64x32xf32, strided<[1024, 1], offset: ?>> to memref<1x32xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %subview_21 = memref.subview %subview_15[0, 0] [32, 32] [1, 1] : memref<32x32xf32, strided<[1024, 1], offset: ?>> to memref<32x32xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %c0_22 = arith.constant 0 : index +# CHECK-NEXT: %c32 = arith.constant 32 : index +# CHECK-NEXT: %c1_23 = arith.constant 1 : index # CHECK-NEXT: %c2 = arith.constant 2 : index -# CHECK-NEXT: %c1_12 = arith.constant 1 : index -# CHECK-NEXT: %c2_13 = arith.constant 2 : index -# CHECK-NEXT: %subview_14 = memref.subview %subview_8[%c0_11, 0] [1, 1] [1, 1] : memref<2x1xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> -# CHECK-NEXT: %subview_15 = memref.subview %subview_9[0, 0] [1, 16] [1, 1] : memref<1x16xf32, strided<[32, 1], offset: ?>> to memref<1x16xf32, strided<[32, 1], offset: ?>> -# CHECK-NEXT: %subview_16 = memref.subview %subview_10[%c0_11, 0] [1, 16] [1, 1] : memref<2x16xf32, strided<[32, 1], offset: ?>> to memref<1x16xf32, strided<[32, 1], offset: ?>> -# CHECK-NEXT: %c0_17 = arith.constant 0 : index -# CHECK-NEXT: %c16_18 = arith.constant 16 : index -# CHECK-NEXT: %c1_19 = arith.constant 1 : index -# CHECK-NEXT: scf.for %arg6 = %c0_17 to %c16_18 step %c1_19 { -# CHECK-NEXT: %subview_27 = memref.subview %subview_14[0, 0] [1, 1] [1, 1] : memref<1x1xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> -# CHECK-NEXT: %subview_28 = memref.subview %subview_15[0, %arg6] [1, 1] [1, 1] : memref<1x16xf32, strided<[32, 1], offset: ?>> to memref<1x1xf32, strided<[32, 1], offset: ?>> -# CHECK-NEXT: %subview_29 = memref.subview %subview_16[0, %arg6] [1, 1] [1, 1] : memref<1x16xf32, strided<[32, 1], offset: ?>> to memref<1x1xf32, strided<[32, 1], offset: ?>> -# CHECK-NEXT: linalg.matmul {__xtc_id_C_} ins(%subview_27, %subview_28 : memref<1x1xf32, strided<[512, 1], offset: ?>>, memref<1x1xf32, strided<[32, 1], offset: ?>>) outs(%subview_29 : memref<1x1xf32, strided<[32, 1], offset: ?>>) -# CHECK-NEXT: } {"./j1"} -# CHECK-NEXT: %c1_20 = arith.constant 1 : index -# CHECK-NEXT: %1 = arith.muli %c1_12, %c1_20 : index -# CHECK-NEXT: %2 = arith.addi %c0_11, %1 : index -# CHECK-NEXT: %subview_21 = memref.subview %subview_8[%2, 0] [1, 1] [1, 1] : memref<2x1xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> -# CHECK-NEXT: %subview_22 = memref.subview %subview_9[0, 0] [1, 16] [1, 1] : memref<1x16xf32, strided<[32, 1], offset: ?>> to memref<1x16xf32, strided<[32, 1], offset: ?>> -# CHECK-NEXT: %subview_23 = memref.subview %subview_10[%2, 0] [1, 16] [1, 1] : memref<2x16xf32, strided<[32, 1], offset: ?>> to memref<1x16xf32, strided<[32, 1], offset: ?>> -# CHECK-NEXT: %c0_24 = arith.constant 0 : index -# CHECK-NEXT: %c16_25 = arith.constant 16 : index -# CHECK-NEXT: %c1_26 = arith.constant 1 : index -# CHECK-NEXT: scf.for %arg6 = %c0_24 to %c16_25 step %c1_26 { -# CHECK-NEXT: %subview_27 = memref.subview %subview_21[0, 0] [1, 1] [1, 1] : memref<1x1xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> -# CHECK-NEXT: %subview_28 = memref.subview %subview_22[0, %arg6] [1, 1] [1, 1] : memref<1x16xf32, strided<[32, 1], offset: ?>> to memref<1x1xf32, strided<[32, 1], offset: ?>> -# CHECK-NEXT: %subview_29 = memref.subview %subview_23[0, %arg6] [1, 1] [1, 1] : memref<1x16xf32, strided<[32, 1], offset: ?>> to memref<1x1xf32, strided<[32, 1], offset: ?>> -# CHECK-NEXT: linalg.matmul {__xtc_id_C_} ins(%subview_27, %subview_28 : memref<1x1xf32, strided<[512, 1], offset: ?>>, memref<1x1xf32, strided<[32, 1], offset: ?>>) outs(%subview_29 : memref<1x1xf32, strided<[32, 1], offset: ?>>) -# CHECK-NEXT: } {"./j1"} -# CHECK-NEXT: } {"./k"} -# CHECK-NEXT: } {"./j"} -# CHECK-NEXT: } {"./i"} +# CHECK-NEXT: scf.for %arg17 = %c0_22 to %c32 step %c2 { +# CHECK-NEXT: %subview_24 = memref.subview %subview_19[%arg17, 0] [1, 1] [1, 1] : memref<32x1xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_25 = memref.subview %subview_20[0, 0] [1, 32] [1, 1] : memref<1x32xf32, strided<[1024, 1], offset: ?>> to memref<1x32xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %subview_26 = memref.subview %subview_21[%arg17, 0] [1, 32] [1, 1] : memref<32x32xf32, strided<[1024, 1], offset: ?>> to memref<1x32xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %c0_27 = arith.constant 0 : index +# CHECK-NEXT: %c32_28 = arith.constant 32 : index +# CHECK-NEXT: %c1_29 = arith.constant 1 : index +# CHECK-NEXT: scf.for %arg18 = %c0_27 to %c32_28 step %c1_29 { +# CHECK-NEXT: %subview_37 = memref.subview %subview_24[0, 0] [1, 1] [1, 1] : memref<1x1xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_38 = memref.subview %subview_25[0, %arg18] [1, 1] [1, 1] : memref<1x32xf32, strided<[1024, 1], offset: ?>> to memref<1x1xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %subview_39 = memref.subview %subview_26[0, %arg18] [1, 1] [1, 1] : memref<1x32xf32, strided<[1024, 1], offset: ?>> to memref<1x1xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: linalg.matmul {__xtc_id_C_} ins(%subview_37, %subview_38 : memref<1x1xf32, strided<[512, 1], offset: ?>>, memref<1x1xf32, strided<[1024, 1], offset: ?>>) outs(%subview_39 : memref<1x1xf32, strided<[1024, 1], offset: ?>>) +# CHECK-NEXT: } {"./j2"} +# CHECK-NEXT: %c1_30 = arith.constant 1 : index +# CHECK-NEXT: %4 = arith.muli %c1_23, %c1_30 : index +# CHECK-NEXT: %5 = arith.addi %arg17, %4 : index +# CHECK-NEXT: %subview_31 = memref.subview %subview_19[%5, 0] [1, 1] [1, 1] : memref<32x1xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_32 = memref.subview %subview_20[0, 0] [1, 32] [1, 1] : memref<1x32xf32, strided<[1024, 1], offset: ?>> to memref<1x32xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %subview_33 = memref.subview %subview_21[%5, 0] [1, 32] [1, 1] : memref<32x32xf32, strided<[1024, 1], offset: ?>> to memref<1x32xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %c0_34 = arith.constant 0 : index +# CHECK-NEXT: %c32_35 = arith.constant 32 : index +# CHECK-NEXT: %c1_36 = arith.constant 1 : index +# CHECK-NEXT: scf.for %arg18 = %c0_34 to %c32_35 step %c1_36 { +# CHECK-NEXT: %subview_37 = memref.subview %subview_31[0, 0] [1, 1] [1, 1] : memref<1x1xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_38 = memref.subview %subview_32[0, %arg18] [1, 1] [1, 1] : memref<1x32xf32, strided<[1024, 1], offset: ?>> to memref<1x1xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %subview_39 = memref.subview %subview_33[0, %arg18] [1, 1] [1, 1] : memref<1x32xf32, strided<[1024, 1], offset: ?>> to memref<1x1xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: linalg.matmul {__xtc_id_C_} ins(%subview_37, %subview_38 : memref<1x1xf32, strided<[512, 1], offset: ?>>, memref<1x1xf32, strided<[1024, 1], offset: ?>>) outs(%subview_39 : memref<1x1xf32, strided<[1024, 1], offset: ?>>) +# CHECK-NEXT: } {"./j2"} +# CHECK-NEXT: } {"./i2"} +# CHECK-NEXT: } {"./k1"} +# CHECK-NEXT: } {"./k"} +# CHECK-NEXT: gpu.barrier +# CHECK-NEXT: gpu.terminator +# CHECK-NEXT: } # CHECK-NEXT: return # CHECK-NEXT: } # CHECK-NEXT: } @@ -156,11 +185,11 @@ # CHECK-NEXT: graph: # CHECK-NEXT: name: matmul # CHECK-NEXT: inputs: -# CHECK-NEXT: - %0 : 4x512xfloat32 -# CHECK-NEXT: - %1 : 512x32xfloat32 +# CHECK-NEXT: - %0 : 1024x512xfloat32 +# CHECK-NEXT: - %1 : 512x1024xfloat32 # CHECK-NEXT: outputs: -# CHECK-NEXT: - %2 : 4x32xfloat32 +# CHECK-NEXT: - %2 : 1024x1024xfloat32 # CHECK-NEXT: nodes: -# CHECK-NEXT: - %2: matmul(%0, %1) {name = 'C'} : [4x512xfloat32, 512x32xfloat32] -> [4x32xfloat32] +# CHECK-NEXT: - %2: matmul(%0, %1) {name = 'C'} : [1024x512xfloat32, 512x1024xfloat32] -> [1024x1024xfloat32] # CHECK-NEXT: # CHECK-NEXT: CODE: 0 diff --git a/tests/filecheck/search/test_conv_oo.py b/tests/filecheck/search/test_conv_oo.py index 5fa397bc9..f40f1558e 100644 --- a/tests/filecheck/search/test_conv_oo.py +++ b/tests/filecheck/search/test_conv_oo.py @@ -12,10 +12,91 @@ utils.print_all_opt_schedules(backend, strategy) utils.print_exhaustive_samples(backend, strategy, 100) -<<<<<<< HEAD -======= ->>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -# CHECK: File "/home/ruicesista/Documents/xtc/xtc/tests/filecheck/search/test_conv_oo.py", line 193 -# CHECK-NEXT: >>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -# CHECK-NEXT: ^ -# CHECK-NEXT: SyntaxError: invalid decimal literal +# CHECK: schedule O0: [1, 1, 1, 1, 1, 1, 1] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1}, 'h': {'./h1': 1}, 'w': {'./w1': 1}, 'f': {'./f1': 1}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 1}}, permutation={'.': ['./b', './r', './s', './c', './h', './w', './f', './b1', './r1', './s1', './c1', './h1', './w1', './f1']}, vectorization=['./f1'], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={'./f1': 1, './w1': 1, './h1': 1, './c1': 1, './s1': 1, './r1': 1, './b1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O1: [1, 1, 1, 1, 1, 1, 1] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1}, 'h': {'./h1': 1}, 'w': {'./w1': 1}, 'f': {'./f1': 1}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 1}}, permutation={'.': ['./b', './r', './s', './c', './h', './w', './f', './b1', './r1', './s1', './c1', './h1', './w1', './f1']}, vectorization=['./f1'], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={'./f1': 1, './w1': 1, './h1': 1, './c1': 1, './s1': 1, './r1': 1, './b1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O2: [1, 1, 2, 16, 1, 1, 1] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1}, 'h': {'./h1': 1}, 'w': {'./w1': 2}, 'f': {'./f1': 16}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 1}}, permutation={'.': ['./b', './r', './s', './c', './h', './w', './f', './b1', './r1', './s1', './c1', './h1', './w1', './f1']}, vectorization=['./f1'], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={'./f1': 16, './w1': 2, './h1': 1, './c1': 1, './s1': 1, './r1': 1, './b1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O3: [1, 1, 2, 16, 1, 1, 3] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1}, 'h': {'./h1': 1}, 'w': {'./w1': 2}, 'f': {'./f1': 16}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 3}}, permutation={'.': ['./b', './r', './s', './c', './h', './w', './f', './b1', './r1', './s1', './c1', './h1', './w1', './f1']}, vectorization=['./f1'], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={'./f1': 16, './w1': 2, './h1': 1, './c1': 3, './s1': 1, './r1': 1, './b1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: sample 0: [1, 1, 1, 1, 1, 1, 1] +# CHECK-NEXT: sample 1: [1, 1, 1, 1, 1, 1, 3] +# CHECK-NEXT: sample 2: [1, 1, 1, 1, 1, 7, 1] +# CHECK-NEXT: sample 3: [1, 1, 1, 1, 7, 1, 1] +# CHECK-NEXT: sample 4: [1, 1, 1, 2, 1, 1, 1] +# CHECK-NEXT: sample 5: [1, 1, 1, 2, 1, 1, 3] +# CHECK-NEXT: sample 6: [1, 1, 1, 2, 1, 7, 1] +# CHECK-NEXT: sample 7: [1, 1, 1, 2, 7, 1, 1] +# CHECK-NEXT: sample 8: [1, 1, 1, 4, 1, 1, 1] +# CHECK-NEXT: sample 9: [1, 1, 1, 4, 1, 1, 3] +# CHECK-NEXT: sample 10: [1, 1, 1, 4, 1, 7, 1] +# CHECK-NEXT: sample 11: [1, 1, 1, 4, 7, 1, 1] +# CHECK-NEXT: sample 12: [1, 1, 1, 8, 1, 1, 1] +# CHECK-NEXT: sample 13: [1, 1, 1, 8, 1, 1, 3] +# CHECK-NEXT: sample 14: [1, 1, 1, 8, 1, 7, 1] +# CHECK-NEXT: sample 15: [1, 1, 1, 8, 7, 1, 1] +# CHECK-NEXT: sample 16: [1, 1, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 17: [1, 1, 1, 16, 1, 1, 3] +# CHECK-NEXT: sample 18: [1, 1, 1, 16, 1, 7, 1] +# CHECK-NEXT: sample 19: [1, 1, 1, 16, 7, 1, 1] +# CHECK-NEXT: sample 20: [1, 1, 1, 32, 1, 1, 1] +# CHECK-NEXT: sample 21: [1, 1, 1, 32, 1, 1, 3] +# CHECK-NEXT: sample 22: [1, 1, 2, 1, 1, 1, 1] +# CHECK-NEXT: sample 23: [1, 1, 2, 1, 1, 1, 3] +# CHECK-NEXT: sample 24: [1, 1, 2, 2, 1, 1, 1] +# CHECK-NEXT: sample 25: [1, 1, 2, 2, 1, 1, 3] +# CHECK-NEXT: sample 26: [1, 1, 2, 4, 1, 1, 1] +# CHECK-NEXT: sample 27: [1, 1, 2, 4, 1, 1, 3] +# CHECK-NEXT: sample 28: [1, 1, 2, 8, 1, 1, 1] +# CHECK-NEXT: sample 29: [1, 1, 2, 8, 1, 1, 3] +# CHECK-NEXT: sample 30: [1, 1, 2, 16, 1, 1, 1] +# CHECK-NEXT: sample 31: [1, 1, 2, 16, 1, 1, 3] +# CHECK-NEXT: sample 32: [1, 1, 2, 32, 1, 1, 1] +# CHECK-NEXT: sample 33: [1, 2, 1, 1, 1, 1, 1] +# CHECK-NEXT: sample 34: [1, 2, 1, 1, 1, 1, 3] +# CHECK-NEXT: sample 35: [1, 2, 1, 2, 1, 1, 1] +# CHECK-NEXT: sample 36: [1, 2, 1, 2, 1, 1, 3] +# CHECK-NEXT: sample 37: [1, 2, 1, 4, 1, 1, 1] +# CHECK-NEXT: sample 38: [1, 2, 1, 4, 1, 1, 3] +# CHECK-NEXT: sample 39: [1, 2, 1, 8, 1, 1, 1] +# CHECK-NEXT: sample 40: [1, 2, 1, 8, 1, 1, 3] +# CHECK-NEXT: sample 41: [1, 2, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 42: [1, 2, 1, 16, 1, 1, 3] +# CHECK-NEXT: sample 43: [1, 2, 1, 32, 1, 1, 1] +# CHECK-NEXT: sample 44: [1, 2, 2, 1, 1, 1, 1] +# CHECK-NEXT: sample 45: [1, 2, 2, 2, 1, 1, 1] +# CHECK-NEXT: sample 46: [1, 2, 2, 4, 1, 1, 1] +# CHECK-NEXT: sample 47: [1, 2, 2, 8, 1, 1, 1] +# CHECK-NEXT: sample 48: [1, 2, 2, 16, 1, 1, 1] +# CHECK-NEXT: sample 49: [1, 2, 2, 32, 1, 1, 1] +# CHECK-NEXT: sample 50: [2, 1, 1, 1, 1, 1, 1] +# CHECK-NEXT: sample 51: [2, 1, 1, 1, 1, 1, 3] +# CHECK-NEXT: sample 52: [2, 1, 1, 2, 1, 1, 1] +# CHECK-NEXT: sample 53: [2, 1, 1, 2, 1, 1, 3] +# CHECK-NEXT: sample 54: [2, 1, 1, 4, 1, 1, 1] +# CHECK-NEXT: sample 55: [2, 1, 1, 4, 1, 1, 3] +# CHECK-NEXT: sample 56: [2, 1, 1, 8, 1, 1, 1] +# CHECK-NEXT: sample 57: [2, 1, 1, 8, 1, 1, 3] +# CHECK-NEXT: sample 58: [2, 1, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 59: [2, 1, 1, 16, 1, 1, 3] +# CHECK-NEXT: sample 60: [2, 1, 1, 32, 1, 1, 1] +# CHECK-NEXT: sample 61: [2, 1, 2, 1, 1, 1, 1] +# CHECK-NEXT: sample 62: [2, 1, 2, 2, 1, 1, 1] +# CHECK-NEXT: sample 63: [2, 1, 2, 4, 1, 1, 1] +# CHECK-NEXT: sample 64: [2, 1, 2, 8, 1, 1, 1] +# CHECK-NEXT: sample 65: [2, 1, 2, 16, 1, 1, 1] +# CHECK-NEXT: sample 66: [2, 1, 2, 32, 1, 1, 1] +# CHECK-NEXT: sample 67: [2, 2, 1, 1, 1, 1, 1] +# CHECK-NEXT: sample 68: [2, 2, 1, 2, 1, 1, 1] +# CHECK-NEXT: sample 69: [2, 2, 1, 4, 1, 1, 1] +# CHECK-NEXT: sample 70: [2, 2, 1, 8, 1, 1, 1] +# CHECK-NEXT: sample 71: [2, 2, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 72: [2, 2, 1, 32, 1, 1, 1] +# CHECK-NEXT: sample 73: [2, 2, 2, 1, 1, 1, 1] +# CHECK-NEXT: sample 74: [2, 2, 2, 2, 1, 1, 1] +# CHECK-NEXT: sample 75: [2, 2, 2, 4, 1, 1, 1] +# CHECK-NEXT: sample 76: [2, 2, 2, 8, 1, 1, 1] +# CHECK-NEXT: sample 77: [2, 2, 2, 16, 1, 1, 1] +# CHECK-NEXT: stats {'filtered': 78, 'all': 384} +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 2}, 'h': {'./h1': 2}, 'w': {'./w1': 2}, 'f': {'./f1': 16}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 1}}, permutation={'.': ['./b', './r', './s', './c', './h', './w', './f', './b1', './r1', './s1', './c1', './h1', './w1', './f1']}, vectorization=['./f1'], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={'./f1': 16, './w1': 2, './h1': 2, './c1': 1, './s1': 1, './r1': 1, './b1': 2}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] diff --git a/tests/filecheck/search/test_conv_pprprp.py b/tests/filecheck/search/test_conv_pprprp.py index daa5a3f5b..1904b1ef4 100644 --- a/tests/filecheck/search/test_conv_pprprp.py +++ b/tests/filecheck/search/test_conv_pprprp.py @@ -12,13 +12,113 @@ utils.print_all_opt_schedules(backend, strategy) utils.print_exhaustive_samples(backend, strategy, 100) -<<<<<<< HEAD -======= ->>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -<<<<<<< HEAD -======= ->>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -# CHECK: File "/home/ruicesista/Documents/xtc/xtc/tests/filecheck/search/test_conv_pprprp.py", line 32 -# CHECK-NEXT: >>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -# CHECK-NEXT: ^ -# CHECK-NEXT: SyntaxError: invalid decimal literal +# CHECK: schedule O0: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1, './b2': 1, './b3': 1}, 'h': {'./h1': 1, './h2': 1, './h3': 1}, 'w': {'./w1': 1, './w2': 1, './w3': 1}, 'f': {'./f1': 1, './f2': 1, './f3': 1}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 1}}, permutation={'.': ['./b', './h', './w', './f', './b1', './h1', './w1', './f1', './r', './s', './c', './b2', './h2', './w2', './f2', './r1', './s1', './c1', './b3', './h3', './w3', './f3']}, vectorization=['./f3'], parallelization=['./b', './h', './w', './f'], gpu_threads=[], gpu_blocks=[], unrolling={'./f3': 1, './w3': 1, './h3': 1, './b3': 1, './c1': 1, './s1': 1, './r1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O1: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1, './b2': 1, './b3': 1}, 'h': {'./h1': 1, './h2': 1, './h3': 1}, 'w': {'./w1': 1, './w2': 1, './w3': 1}, 'f': {'./f1': 1, './f2': 1, './f3': 1}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 1}}, permutation={'.': ['./b', './h', './w', './f', './b1', './h1', './w1', './f1', './r', './s', './c', './b2', './h2', './w2', './f2', './r1', './s1', './c1', './b3', './h3', './w3', './f3']}, vectorization=['./f3'], parallelization=['./b', './h', './w', './f'], gpu_threads=[], gpu_blocks=[], unrolling={'./f3': 1, './w3': 1, './h3': 1, './b3': 1, './c1': 1, './s1': 1, './r1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O2: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 16, 1, 1, 1] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1, './b2': 1, './b3': 1}, 'h': {'./h1': 1, './h2': 1, './h3': 1}, 'w': {'./w1': 2, './w2': 2, './w3': 2}, 'f': {'./f1': 16, './f2': 16, './f3': 16}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 1}}, permutation={'.': ['./b', './h', './w', './f', './b1', './h1', './w1', './f1', './r', './s', './c', './b2', './h2', './w2', './f2', './r1', './s1', './c1', './b3', './h3', './w3', './f3']}, vectorization=['./f3'], parallelization=['./b', './h', './w', './f'], gpu_threads=[], gpu_blocks=[], unrolling={'./f3': 16, './w3': 2, './h3': 1, './b3': 1, './c1': 1, './s1': 1, './r1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O3: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 16, 1, 1, 3] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1, './b2': 1, './b3': 1}, 'h': {'./h1': 1, './h2': 1, './h3': 1}, 'w': {'./w1': 2, './w2': 2, './w3': 2}, 'f': {'./f1': 16, './f2': 16, './f3': 16}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 3}}, permutation={'.': ['./b', './h', './w', './f', './b1', './h1', './w1', './f1', './r', './s', './c', './b2', './h2', './w2', './f2', './r1', './s1', './c1', './b3', './h3', './w3', './f3']}, vectorization=['./f3'], parallelization=['./b', './h', './w', './f'], gpu_threads=[], gpu_blocks=[], unrolling={'./f3': 16, './w3': 2, './h3': 1, './b3': 1, './c1': 3, './s1': 1, './r1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: sample 0: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] +# CHECK-NEXT: sample 1: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3] +# CHECK-NEXT: sample 2: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 1] +# CHECK-NEXT: sample 3: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 1, 1] +# CHECK-NEXT: sample 4: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1] +# CHECK-NEXT: sample 5: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 3] +# CHECK-NEXT: sample 6: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 7, 1] +# CHECK-NEXT: sample 7: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 7, 1, 1] +# CHECK-NEXT: sample 8: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1] +# CHECK-NEXT: sample 9: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 3] +# CHECK-NEXT: sample 10: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 7, 1] +# CHECK-NEXT: sample 11: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 7, 1, 1] +# CHECK-NEXT: sample 12: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 1, 1] +# CHECK-NEXT: sample 13: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 1, 3] +# CHECK-NEXT: sample 14: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 7, 1] +# CHECK-NEXT: sample 15: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 7, 1, 1] +# CHECK-NEXT: sample 16: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 17: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 1, 1, 3] +# CHECK-NEXT: sample 18: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 1, 7, 1] +# CHECK-NEXT: sample 19: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 7, 1, 1] +# CHECK-NEXT: sample 20: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 32, 1, 1, 1] +# CHECK-NEXT: sample 21: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 32, 1, 1, 3] +# CHECK-NEXT: sample 22: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1] +# CHECK-NEXT: sample 23: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 3] +# CHECK-NEXT: sample 24: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 7, 1] +# CHECK-NEXT: sample 25: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 7, 1, 1] +# CHECK-NEXT: sample 26: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1] +# CHECK-NEXT: sample 27: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 3] +# CHECK-NEXT: sample 28: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 7, 1] +# CHECK-NEXT: sample 29: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 7, 1, 1] +# CHECK-NEXT: sample 30: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 1, 1, 1] +# CHECK-NEXT: sample 31: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 1, 1, 3] +# CHECK-NEXT: sample 32: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 1, 7, 1] +# CHECK-NEXT: sample 33: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 7, 1, 1] +# CHECK-NEXT: sample 34: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 8, 1, 1, 1] +# CHECK-NEXT: sample 35: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 8, 1, 1, 3] +# CHECK-NEXT: sample 36: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 8, 1, 7, 1] +# CHECK-NEXT: sample 37: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 8, 7, 1, 1] +# CHECK-NEXT: sample 38: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 16, 1, 1, 1] +# CHECK-NEXT: sample 39: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 16, 1, 1, 3] +# CHECK-NEXT: sample 40: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 16, 1, 7, 1] +# CHECK-NEXT: sample 41: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 16, 7, 1, 1] +# CHECK-NEXT: sample 42: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1] +# CHECK-NEXT: sample 43: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 3] +# CHECK-NEXT: sample 44: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 7, 1] +# CHECK-NEXT: sample 45: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 7, 1, 1] +# CHECK-NEXT: sample 46: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 2, 1, 1, 1] +# CHECK-NEXT: sample 47: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 2, 1, 1, 3] +# CHECK-NEXT: sample 48: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 2, 1, 7, 1] +# CHECK-NEXT: sample 49: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 2, 7, 1, 1] +# CHECK-NEXT: sample 50: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1] +# CHECK-NEXT: sample 51: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 3] +# CHECK-NEXT: sample 52: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 7, 1] +# CHECK-NEXT: sample 53: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 7, 1, 1] +# CHECK-NEXT: sample 54: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 8, 1, 1, 1] +# CHECK-NEXT: sample 55: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 8, 1, 1, 3] +# CHECK-NEXT: sample 56: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 8, 1, 7, 1] +# CHECK-NEXT: sample 57: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 8, 7, 1, 1] +# CHECK-NEXT: sample 58: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 1, 1, 1] +# CHECK-NEXT: sample 59: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 1, 1, 3] +# CHECK-NEXT: sample 60: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 1, 7, 1] +# CHECK-NEXT: sample 61: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 7, 1, 1] +# CHECK-NEXT: sample 62: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 2, 1, 1, 1] +# CHECK-NEXT: sample 63: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 2, 1, 1, 3] +# CHECK-NEXT: sample 64: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 2, 1, 7, 1] +# CHECK-NEXT: sample 65: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 2, 7, 1, 1] +# CHECK-NEXT: sample 66: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 4, 1, 1, 1] +# CHECK-NEXT: sample 67: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 4, 1, 1, 3] +# CHECK-NEXT: sample 68: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 4, 1, 7, 1] +# CHECK-NEXT: sample 69: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 4, 7, 1, 1] +# CHECK-NEXT: sample 70: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 1, 1, 1, 1] +# CHECK-NEXT: sample 71: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 1, 1, 1, 3] +# CHECK-NEXT: sample 72: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 1, 1, 7, 1] +# CHECK-NEXT: sample 73: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 1, 7, 1, 1] +# CHECK-NEXT: sample 74: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 2, 1, 1, 1] +# CHECK-NEXT: sample 75: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 2, 1, 1, 3] +# CHECK-NEXT: sample 76: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 2, 1, 7, 1] +# CHECK-NEXT: sample 77: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 2, 7, 1, 1] +# CHECK-NEXT: sample 78: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 32, 1, 1, 1, 1] +# CHECK-NEXT: sample 79: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 32, 1, 1, 1, 3] +# CHECK-NEXT: sample 80: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 32, 1, 1, 7, 1] +# CHECK-NEXT: sample 81: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 32, 1, 7, 1, 1] +# CHECK-NEXT: sample 82: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1] +# CHECK-NEXT: sample 83: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 3] +# CHECK-NEXT: sample 84: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 7, 1] +# CHECK-NEXT: sample 85: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 7, 1, 1] +# CHECK-NEXT: sample 86: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1] +# CHECK-NEXT: sample 87: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 3] +# CHECK-NEXT: sample 88: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 7, 1] +# CHECK-NEXT: sample 89: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 7, 1, 1] +# CHECK-NEXT: sample 90: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 4, 1, 1, 1] +# CHECK-NEXT: sample 91: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 4, 1, 1, 3] +# CHECK-NEXT: sample 92: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 4, 1, 7, 1] +# CHECK-NEXT: sample 93: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 4, 7, 1, 1] +# CHECK-NEXT: sample 94: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 8, 1, 1, 1] +# CHECK-NEXT: sample 95: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 8, 1, 1, 3] +# CHECK-NEXT: sample 96: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 8, 1, 7, 1] +# CHECK-NEXT: sample 97: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 8, 7, 1, 1] +# CHECK-NEXT: sample 98: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 99: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 16, 1, 1, 3] +# CHECK-NEXT: stats {'filtered': 100, 'all': 202} +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1, './b2': 1, './b3': 1}, 'h': {'./h1': 1, './h2': 1, './h3': 1}, 'w': {'./w1': 1, './w2': 1, './w3': 1}, 'f': {'./f1': 32, './f2': 16, './f3': 16}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 3}}, permutation={'.': ['./b', './h', './w', './f', './b1', './h1', './w1', './f1', './r', './s', './c', './b2', './h2', './w2', './f2', './r1', './s1', './c1', './b3', './h3', './w3', './f3']}, vectorization=['./f3'], parallelization=['./b', './h', './w', './f'], gpu_threads=[], gpu_blocks=[], unrolling={'./f3': 16, './w3': 1, './h3': 1, './b3': 1, './c1': 3, './s1': 1, './r1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] diff --git a/tests/filecheck/search/test_conv_pprprpv.py b/tests/filecheck/search/test_conv_pprprpv.py index 705b6b61e..59b0ab543 100644 --- a/tests/filecheck/search/test_conv_pprprpv.py +++ b/tests/filecheck/search/test_conv_pprprpv.py @@ -12,13 +12,113 @@ utils.print_all_opt_schedules(backend, strategy) utils.print_exhaustive_samples(backend, strategy, 100) -<<<<<<< HEAD -======= ->>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -<<<<<<< HEAD -======= ->>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -# CHECK: File "/home/ruicesista/Documents/xtc/xtc/tests/filecheck/search/test_conv_pprprpv.py", line 32 -# CHECK-NEXT: >>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -# CHECK-NEXT: ^ -# CHECK-NEXT: SyntaxError: invalid decimal literal +# CHECK: schedule O0: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1, './b2': 1, './b3': 1}, 'h': {'./h1': 1, './h2': 1, './h3': 1}, 'w': {'./w1': 1, './w2': 1, './w3': 1}, 'f': {'./f1': 1, './f2': 1, './f3': 1}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 1}}, permutation={'.': ['./b', './h', './w', './f', './b1', './h1', './w1', './f1', './r', './s', './c', './b2', './h2', './w2', './f2', './r1', './s1', './c1', './b3', './h3', './w3', './f3']}, vectorization=['./f3'], parallelization=['./b', './h', './w', './f'], gpu_threads=[], gpu_blocks=[], unrolling={'./f3': 1, './w3': 1, './h3': 1, './b3': 1, './c1': 1, './s1': 1, './r1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O1: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1, './b2': 1, './b3': 1}, 'h': {'./h1': 1, './h2': 1, './h3': 1}, 'w': {'./w1': 1, './w2': 1, './w3': 1}, 'f': {'./f1': 1, './f2': 1, './f3': 1}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 1}}, permutation={'.': ['./b', './h', './w', './f', './b1', './h1', './w1', './f1', './r', './s', './c', './b2', './h2', './w2', './f2', './r1', './s1', './c1', './b3', './h3', './w3', './f3']}, vectorization=['./f3'], parallelization=['./b', './h', './w', './f'], gpu_threads=[], gpu_blocks=[], unrolling={'./f3': 1, './w3': 1, './h3': 1, './b3': 1, './c1': 1, './s1': 1, './r1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O2: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 16, 1, 1, 1] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1, './b2': 1, './b3': 1}, 'h': {'./h1': 1, './h2': 1, './h3': 1}, 'w': {'./w1': 2, './w2': 2, './w3': 2}, 'f': {'./f1': 16, './f2': 16, './f3': 16}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 1}}, permutation={'.': ['./b', './h', './w', './f', './b1', './h1', './w1', './f1', './r', './s', './c', './b2', './h2', './w2', './f2', './r1', './s1', './c1', './b3', './h3', './w3', './f3']}, vectorization=['./f3'], parallelization=['./b', './h', './w', './f'], gpu_threads=[], gpu_blocks=[], unrolling={'./f3': 16, './w3': 2, './h3': 1, './b3': 1, './c1': 1, './s1': 1, './r1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O3: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 16, 1, 1, 3] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1, './b2': 1, './b3': 1}, 'h': {'./h1': 1, './h2': 1, './h3': 1}, 'w': {'./w1': 2, './w2': 2, './w3': 2}, 'f': {'./f1': 16, './f2': 16, './f3': 16}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 3}}, permutation={'.': ['./b', './h', './w', './f', './b1', './h1', './w1', './f1', './r', './s', './c', './b2', './h2', './w2', './f2', './r1', './s1', './c1', './b3', './h3', './w3', './f3']}, vectorization=['./f3'], parallelization=['./b', './h', './w', './f'], gpu_threads=[], gpu_blocks=[], unrolling={'./f3': 16, './w3': 2, './h3': 1, './b3': 1, './c1': 3, './s1': 1, './r1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: sample 0: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 1: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 1, 1, 3] +# CHECK-NEXT: sample 2: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 1, 7, 1] +# CHECK-NEXT: sample 3: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 7, 1, 1] +# CHECK-NEXT: sample 4: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 32, 1, 1, 1] +# CHECK-NEXT: sample 5: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 32, 1, 1, 3] +# CHECK-NEXT: sample 6: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 16, 1, 1, 1] +# CHECK-NEXT: sample 7: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 16, 1, 1, 3] +# CHECK-NEXT: sample 8: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 16, 1, 7, 1] +# CHECK-NEXT: sample 9: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 16, 7, 1, 1] +# CHECK-NEXT: sample 10: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 11: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 16, 1, 1, 3] +# CHECK-NEXT: sample 12: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 16, 1, 7, 1] +# CHECK-NEXT: sample 13: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 16, 7, 1, 1] +# CHECK-NEXT: sample 14: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 15: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 16, 1, 1, 3] +# CHECK-NEXT: sample 16: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 32, 1, 1, 1] +# CHECK-NEXT: sample 17: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 16, 1, 1, 1] +# CHECK-NEXT: sample 18: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 16, 1, 1, 3] +# CHECK-NEXT: sample 19: [1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 20: [1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 16, 1, 1, 3] +# CHECK-NEXT: sample 21: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 22: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 16, 1, 1, 3] +# CHECK-NEXT: sample 23: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 16, 1, 7, 1] +# CHECK-NEXT: sample 24: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 16, 7, 1, 1] +# CHECK-NEXT: sample 25: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 32, 1, 1, 1] +# CHECK-NEXT: sample 26: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 32, 1, 1, 3] +# CHECK-NEXT: sample 27: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 16, 1, 1, 1] +# CHECK-NEXT: sample 28: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 16, 1, 1, 3] +# CHECK-NEXT: sample 29: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 16, 1, 7, 1] +# CHECK-NEXT: sample 30: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 16, 7, 1, 1] +# CHECK-NEXT: sample 31: [1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 32: [1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 16, 1, 1, 3] +# CHECK-NEXT: sample 33: [1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 16, 1, 7, 1] +# CHECK-NEXT: sample 34: [1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 16, 7, 1, 1] +# CHECK-NEXT: sample 35: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 36: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 16, 1, 1, 3] +# CHECK-NEXT: sample 37: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 16, 1, 7, 1] +# CHECK-NEXT: sample 38: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 16, 7, 1, 1] +# CHECK-NEXT: sample 39: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 32, 1, 1, 1] +# CHECK-NEXT: sample 40: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 32, 1, 1, 3] +# CHECK-NEXT: sample 41: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 16, 1, 1, 1] +# CHECK-NEXT: sample 42: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 16, 1, 1, 3] +# CHECK-NEXT: sample 43: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 16, 1, 7, 1] +# CHECK-NEXT: sample 44: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 16, 7, 1, 1] +# CHECK-NEXT: sample 45: [1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 46: [1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 16, 1, 1, 3] +# CHECK-NEXT: sample 47: [1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 16, 1, 7, 1] +# CHECK-NEXT: sample 48: [1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 16, 7, 1, 1] +# CHECK-NEXT: sample 49: [1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 50: [1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 16, 1, 1, 3] +# CHECK-NEXT: sample 51: [1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 32, 1, 1, 1] +# CHECK-NEXT: sample 52: [1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 16, 1, 1, 1] +# CHECK-NEXT: sample 53: [1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 16, 1, 1, 3] +# CHECK-NEXT: sample 54: [1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 55: [1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 16, 1, 1, 3] +# CHECK-NEXT: sample 56: [1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 57: [1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 32, 1, 1, 1] +# CHECK-NEXT: sample 58: [1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 2, 16, 1, 1, 1] +# CHECK-NEXT: sample 59: [1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 60: [1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 61: [1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 16, 1, 1, 3] +# CHECK-NEXT: sample 62: [1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 32, 1, 1, 1] +# CHECK-NEXT: sample 63: [1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 2, 16, 1, 1, 1] +# CHECK-NEXT: sample 64: [1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 2, 16, 1, 1, 3] +# CHECK-NEXT: sample 65: [1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 66: [1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 16, 1, 1, 3] +# CHECK-NEXT: sample 67: [1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 68: [1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 16, 1, 1, 3] +# CHECK-NEXT: sample 69: [1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 32, 1, 1, 1] +# CHECK-NEXT: sample 70: [1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 16, 1, 1, 1] +# CHECK-NEXT: sample 71: [1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 16, 1, 1, 3] +# CHECK-NEXT: sample 72: [1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 73: [1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 1, 16, 1, 1, 3] +# CHECK-NEXT: sample 74: [1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 75: [1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 16, 1, 1, 3] +# CHECK-NEXT: sample 76: [1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 16, 1, 7, 1] +# CHECK-NEXT: sample 77: [1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 16, 7, 1, 1] +# CHECK-NEXT: sample 78: [1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 32, 1, 1, 1] +# CHECK-NEXT: sample 79: [1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 32, 1, 1, 3] +# CHECK-NEXT: sample 80: [1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 16, 1, 1, 1] +# CHECK-NEXT: sample 81: [1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 16, 1, 1, 3] +# CHECK-NEXT: sample 82: [1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 16, 1, 7, 1] +# CHECK-NEXT: sample 83: [1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 16, 7, 1, 1] +# CHECK-NEXT: sample 84: [1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 85: [1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 16, 1, 1, 3] +# CHECK-NEXT: sample 86: [1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 16, 1, 7, 1] +# CHECK-NEXT: sample 87: [1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 16, 7, 1, 1] +# CHECK-NEXT: sample 88: [1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 89: [1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 16, 1, 1, 3] +# CHECK-NEXT: sample 90: [1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 32, 1, 1, 1] +# CHECK-NEXT: sample 91: [1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 16, 1, 1, 1] +# CHECK-NEXT: sample 92: [1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 16, 1, 1, 3] +# CHECK-NEXT: sample 93: [1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 94: [1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 1, 16, 1, 1, 3] +# CHECK-NEXT: sample 95: [1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 96: [1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 16, 1, 1, 3] +# CHECK-NEXT: sample 97: [1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 16, 1, 7, 1] +# CHECK-NEXT: sample 98: [1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 16, 7, 1, 1] +# CHECK-NEXT: sample 99: [1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 32, 1, 1, 1] +# CHECK-NEXT: stats {'filtered_vec': 100, 'filtered': 1520, 'all': 4521} +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1, './b2': 1, './b3': 1}, 'h': {'./h1': 2, './h2': 2, './h3': 1}, 'w': {'./w1': 2, './w2': 2, './w3': 1}, 'f': {'./f1': 32, './f2': 32, './f3': 32}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 1}}, permutation={'.': ['./b', './h', './w', './f', './b1', './h1', './w1', './f1', './r', './s', './c', './b2', './h2', './w2', './f2', './r1', './s1', './c1', './b3', './h3', './w3', './f3']}, vectorization=['./f3'], parallelization=['./b', './h', './w', './f'], gpu_threads=[], gpu_blocks=[], unrolling={'./f3': 32, './w3': 1, './h3': 1, './b3': 1, './c1': 1, './s1': 1, './r1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] diff --git a/tests/filecheck/search/test_conv_pprprpvr.py b/tests/filecheck/search/test_conv_pprprpvr.py index 81ddbd133..0516d8b3a 100644 --- a/tests/filecheck/search/test_conv_pprprpvr.py +++ b/tests/filecheck/search/test_conv_pprprpvr.py @@ -19,13 +19,113 @@ utils.print_all_opt_schedules(backend, strategy) utils.print_exhaustive_samples(backend, strategy, 100) -<<<<<<< HEAD -======= ->>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -<<<<<<< HEAD -======= ->>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -# CHECK: File "/home/ruicesista/Documents/xtc/xtc/tests/filecheck/search/test_conv_pprprpvr.py", line 39 -# CHECK-NEXT: >>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -# CHECK-NEXT: ^ -# CHECK-NEXT: SyntaxError: invalid decimal literal +# CHECK: schedule O0: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1, './b2': 1, './b3': 1}, 'h': {'./h1': 1, './h2': 1, './h3': 1}, 'w': {'./w1': 1, './w2': 1, './w3': 1}, 'f': {'./f1': 1, './f2': 1, './f3': 1}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 1}}, permutation={'.': ['./b', './h', './w', './f', './b1', './h1', './w1', './f1', './r', './s', './c', './b2', './h2', './w2', './f2', './r1', './s1', './c1', './b3', './h3', './w3', './f3']}, vectorization=['./f3'], parallelization=['./b', './h', './w', './f'], gpu_threads=[], gpu_blocks=[], unrolling={'./f3': 1, './w3': 1, './h3': 1, './b3': 1, './c1': 1, './s1': 1, './r1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O1: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1, './b2': 1, './b3': 1}, 'h': {'./h1': 1, './h2': 1, './h3': 1}, 'w': {'./w1': 1, './w2': 1, './w3': 1}, 'f': {'./f1': 1, './f2': 1, './f3': 1}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 1}}, permutation={'.': ['./b', './h', './w', './f', './b1', './h1', './w1', './f1', './r', './s', './c', './b2', './h2', './w2', './f2', './r1', './s1', './c1', './b3', './h3', './w3', './f3']}, vectorization=['./f3'], parallelization=['./b', './h', './w', './f'], gpu_threads=[], gpu_blocks=[], unrolling={'./f3': 1, './w3': 1, './h3': 1, './b3': 1, './c1': 1, './s1': 1, './r1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O2: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 16, 1, 1, 1] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1, './b2': 1, './b3': 1}, 'h': {'./h1': 1, './h2': 1, './h3': 1}, 'w': {'./w1': 2, './w2': 2, './w3': 2}, 'f': {'./f1': 16, './f2': 16, './f3': 16}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 1}}, permutation={'.': ['./b', './h', './w', './f', './b1', './h1', './w1', './f1', './r', './s', './c', './b2', './h2', './w2', './f2', './r1', './s1', './c1', './b3', './h3', './w3', './f3']}, vectorization=['./f3'], parallelization=['./b', './h', './w', './f'], gpu_threads=[], gpu_blocks=[], unrolling={'./f3': 16, './w3': 2, './h3': 1, './b3': 1, './c1': 1, './s1': 1, './r1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O3: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 16, 1, 1, 3] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1, './b2': 1, './b3': 1}, 'h': {'./h1': 1, './h2': 1, './h3': 1}, 'w': {'./w1': 2, './w2': 2, './w3': 2}, 'f': {'./f1': 16, './f2': 16, './f3': 16}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 3}}, permutation={'.': ['./b', './h', './w', './f', './b1', './h1', './w1', './f1', './r', './s', './c', './b2', './h2', './w2', './f2', './r1', './s1', './c1', './b3', './h3', './w3', './f3']}, vectorization=['./f3'], parallelization=['./b', './h', './w', './f'], gpu_threads=[], gpu_blocks=[], unrolling={'./f3': 16, './w3': 2, './h3': 1, './b3': 1, './c1': 3, './s1': 1, './r1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: sample 0: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 1: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 1, 1, 3] +# CHECK-NEXT: sample 2: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 1, 7, 1] +# CHECK-NEXT: sample 3: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 7, 1, 1] +# CHECK-NEXT: sample 4: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 32, 1, 1, 1] +# CHECK-NEXT: sample 5: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 32, 1, 1, 3] +# CHECK-NEXT: sample 6: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 32, 1, 7, 1] +# CHECK-NEXT: sample 7: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 32, 7, 1, 1] +# CHECK-NEXT: sample 8: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 16, 1, 1, 1] +# CHECK-NEXT: sample 9: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 16, 1, 1, 3] +# CHECK-NEXT: sample 10: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 16, 1, 7, 1] +# CHECK-NEXT: sample 11: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 16, 7, 1, 1] +# CHECK-NEXT: sample 12: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 13: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 16, 1, 1, 3] +# CHECK-NEXT: sample 14: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 16, 1, 7, 1] +# CHECK-NEXT: sample 15: [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 16, 7, 1, 1] +# CHECK-NEXT: sample 16: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 17: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 16, 1, 1, 3] +# CHECK-NEXT: sample 18: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 16, 1, 7, 1] +# CHECK-NEXT: sample 19: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 16, 7, 1, 1] +# CHECK-NEXT: sample 20: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 32, 1, 1, 1] +# CHECK-NEXT: sample 21: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 32, 1, 1, 3] +# CHECK-NEXT: sample 22: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 16, 1, 1, 1] +# CHECK-NEXT: sample 23: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 16, 1, 1, 3] +# CHECK-NEXT: sample 24: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 16, 1, 7, 1] +# CHECK-NEXT: sample 25: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 16, 7, 1, 1] +# CHECK-NEXT: sample 26: [1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 27: [1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 16, 1, 1, 3] +# CHECK-NEXT: sample 28: [1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 16, 1, 7, 1] +# CHECK-NEXT: sample 29: [1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 16, 7, 1, 1] +# CHECK-NEXT: sample 30: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 31: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 16, 1, 1, 3] +# CHECK-NEXT: sample 32: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 16, 1, 7, 1] +# CHECK-NEXT: sample 33: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 16, 7, 1, 1] +# CHECK-NEXT: sample 34: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 32, 1, 1, 1] +# CHECK-NEXT: sample 35: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 32, 1, 1, 3] +# CHECK-NEXT: sample 36: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 32, 1, 7, 1] +# CHECK-NEXT: sample 37: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 32, 7, 1, 1] +# CHECK-NEXT: sample 38: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 16, 1, 1, 1] +# CHECK-NEXT: sample 39: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 16, 1, 1, 3] +# CHECK-NEXT: sample 40: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 16, 1, 7, 1] +# CHECK-NEXT: sample 41: [1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 16, 7, 1, 1] +# CHECK-NEXT: sample 42: [1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 43: [1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 16, 1, 1, 3] +# CHECK-NEXT: sample 44: [1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 16, 1, 7, 1] +# CHECK-NEXT: sample 45: [1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 16, 7, 1, 1] +# CHECK-NEXT: sample 46: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 47: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 16, 1, 1, 3] +# CHECK-NEXT: sample 48: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 16, 1, 7, 1] +# CHECK-NEXT: sample 49: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 16, 7, 1, 1] +# CHECK-NEXT: sample 50: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 32, 1, 1, 1] +# CHECK-NEXT: sample 51: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 32, 1, 1, 3] +# CHECK-NEXT: sample 52: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 32, 1, 7, 1] +# CHECK-NEXT: sample 53: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 32, 7, 1, 1] +# CHECK-NEXT: sample 54: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 16, 1, 1, 1] +# CHECK-NEXT: sample 55: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 16, 1, 1, 3] +# CHECK-NEXT: sample 56: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 16, 1, 7, 1] +# CHECK-NEXT: sample 57: [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 16, 7, 1, 1] +# CHECK-NEXT: sample 58: [1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 59: [1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 16, 1, 1, 3] +# CHECK-NEXT: sample 60: [1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 16, 1, 7, 1] +# CHECK-NEXT: sample 61: [1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 16, 7, 1, 1] +# CHECK-NEXT: sample 62: [1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 63: [1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 16, 1, 1, 3] +# CHECK-NEXT: sample 64: [1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 16, 1, 7, 1] +# CHECK-NEXT: sample 65: [1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 16, 7, 1, 1] +# CHECK-NEXT: sample 66: [1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 32, 1, 1, 1] +# CHECK-NEXT: sample 67: [1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 32, 1, 1, 3] +# CHECK-NEXT: sample 68: [1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 16, 1, 1, 1] +# CHECK-NEXT: sample 69: [1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 16, 1, 1, 3] +# CHECK-NEXT: sample 70: [1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 16, 1, 7, 1] +# CHECK-NEXT: sample 71: [1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 16, 7, 1, 1] +# CHECK-NEXT: sample 72: [1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 73: [1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 16, 1, 1, 3] +# CHECK-NEXT: sample 74: [1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 16, 1, 7, 1] +# CHECK-NEXT: sample 75: [1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 16, 7, 1, 1] +# CHECK-NEXT: sample 76: [1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 77: [1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 16, 1, 1, 3] +# CHECK-NEXT: sample 78: [1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 2, 16, 1, 1, 1] +# CHECK-NEXT: sample 79: [1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 2, 16, 1, 1, 3] +# CHECK-NEXT: sample 80: [1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 81: [1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 1, 16, 1, 1, 3] +# CHECK-NEXT: sample 82: [1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 83: [1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 16, 1, 1, 3] +# CHECK-NEXT: sample 84: [1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 16, 1, 7, 1] +# CHECK-NEXT: sample 85: [1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 16, 7, 1, 1] +# CHECK-NEXT: sample 86: [1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 32, 1, 1, 1] +# CHECK-NEXT: sample 87: [1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 32, 1, 1, 3] +# CHECK-NEXT: sample 88: [1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 2, 16, 1, 1, 1] +# CHECK-NEXT: sample 89: [1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 2, 16, 1, 1, 3] +# CHECK-NEXT: sample 90: [1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 91: [1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 16, 1, 1, 3] +# CHECK-NEXT: sample 92: [1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 16, 1, 7, 1] +# CHECK-NEXT: sample 93: [1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 16, 7, 1, 1] +# CHECK-NEXT: sample 94: [1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 95: [1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 16, 1, 1, 3] +# CHECK-NEXT: sample 96: [1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 16, 1, 7, 1] +# CHECK-NEXT: sample 97: [1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 16, 7, 1, 1] +# CHECK-NEXT: sample 98: [1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 32, 1, 1, 1] +# CHECK-NEXT: sample 99: [1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 32, 1, 1, 3] +# CHECK-NEXT: stats {'filtered_l2': 100, 'filtered_l1': 102, 'filtered_reg': 132, 'filtered_vec': 134, 'filtered': 1918, 'all': 3178} +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1, './b2': 1, './b3': 1}, 'h': {'./h1': 2, './h2': 2, './h3': 2}, 'w': {'./w1': 2, './w2': 1, './w3': 1}, 'f': {'./f1': 32, './f2': 32, './f3': 32}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 3}}, permutation={'.': ['./b', './h', './w', './f', './b1', './h1', './w1', './f1', './r', './s', './c', './b2', './h2', './w2', './f2', './r1', './s1', './c1', './b3', './h3', './w3', './f3']}, vectorization=['./f3'], parallelization=['./b', './h', './w', './f'], gpu_threads=[], gpu_blocks=[], unrolling={'./f3': 32, './w3': 1, './h3': 2, './b3': 1, './c1': 3, './s1': 1, './r1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] diff --git a/tests/filecheck/search/test_conv_pprprpvr_rnd.py b/tests/filecheck/search/test_conv_pprprpvr_rnd.py index 6f835938f..b7d325442 100644 --- a/tests/filecheck/search/test_conv_pprprpvr_rnd.py +++ b/tests/filecheck/search/test_conv_pprprpvr_rnd.py @@ -18,10 +18,25 @@ utils.print_random_samples(backend, strategy, 20) -<<<<<<< HEAD -======= ->>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -# CHECK: File "/home/ruicesista/Documents/xtc/xtc/tests/filecheck/search/test_conv_pprprpvr_rnd.py", line 46 -# CHECK-NEXT: >>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -# CHECK-NEXT: ^ -# CHECK-NEXT: SyntaxError: invalid decimal literal +# CHECK: sample 0: [1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 16, 1, 7, 1] +# CHECK-NEXT: sample 1: [1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 16, 1, 1, 1] +# CHECK-NEXT: sample 2: [1, 2, 1, 1, 2, 1, 2, 1, 1, 1, 1, 16, 1, 1, 3] +# CHECK-NEXT: sample 3: [2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 16, 1, 7, 1] +# CHECK-NEXT: sample 4: [1, 1, 2, 2, 1, 1, 2, 1, 1, 1, 1, 16, 1, 1, 3] +# CHECK-NEXT: sample 5: [1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 6: [1, 1, 2, 1, 1, 1, 1, 2, 1, 2, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 7: [1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 8: [1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 16, 7, 1, 1] +# CHECK-NEXT: sample 9: [1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 16, 1, 7, 1] +# CHECK-NEXT: sample 10: [1, 2, 1, 2, 1, 1, 1, 2, 1, 1, 1, 16, 1, 7, 1] +# CHECK-NEXT: sample 11: [1, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 12: [2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 16, 1, 1, 3] +# CHECK-NEXT: sample 13: [1, 2, 1, 1, 2, 1, 2, 1, 1, 2, 1, 16, 1, 7, 1] +# CHECK-NEXT: sample 14: [1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 1, 16, 1, 1, 1] +# CHECK-NEXT: sample 15: [1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 16, 7, 1, 1] +# CHECK-NEXT: sample 16: [1, 1, 1, 1, 2, 1, 1, 2, 1, 2, 1, 16, 7, 1, 1] +# CHECK-NEXT: sample 17: [1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 16, 1, 7, 1] +# CHECK-NEXT: sample 18: [1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 16, 7, 1, 1] +# CHECK-NEXT: sample 19: [1, 2, 1, 1, 2, 1, 2, 1, 1, 1, 1, 16, 1, 1, 1] +# CHECK-NEXT: stats {'filtered_l2': 5, 'filtered_l1': 5, 'filtered_reg': 6, 'filtered_vec': 6, 'filtered': 100} +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 2, './b2': 2, './b3': 1}, 'h': {'./h1': 2, './h2': 2, './h3': 1}, 'w': {'./w1': 2, './w2': 1, './w3': 1}, 'f': {'./f1': 16, './f2': 16, './f3': 16}, 'r': {'./r1': 1}, 's': {'./s1': 1}, 'c': {'./c1': 1}}, permutation={'.': ['./b', './h', './w', './f', './b1', './h1', './w1', './f1', './r', './s', './c', './b2', './h2', './w2', './f2', './r1', './s1', './c1', './b3', './h3', './w3', './f3']}, vectorization=['./f3'], parallelization=['./b', './h', './w', './f'], gpu_threads=[], gpu_blocks=[], unrolling={'./f3': 16, './w3': 1, './h3': 1, './b3': 1, './c1': 1, './s1': 1, './r1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] diff --git a/tests/filecheck/search/test_conv_prp.py b/tests/filecheck/search/test_conv_prp.py index 5fb1c9ce6..090fae364 100644 --- a/tests/filecheck/search/test_conv_prp.py +++ b/tests/filecheck/search/test_conv_prp.py @@ -12,10 +12,60 @@ utils.print_all_opt_schedules(backend, strategy) utils.print_exhaustive_samples(backend, strategy, 100) -<<<<<<< HEAD -======= ->>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -# CHECK: File "/home/ruicesista/Documents/xtc/xtc/tests/filecheck/search/test_conv_prp.py", line 131 -# CHECK-NEXT: >>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -# CHECK-NEXT: ^ -# CHECK-NEXT: SyntaxError: invalid decimal literal +# CHECK: schedule O0: [1, 1, 1, 1] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1}, 'h': {'./h1': 1}, 'w': {'./w1': 1}, 'f': {'./f1': 1}, 'r': {}, 's': {}, 'c': {}}, permutation={'.': ['./b', './h', './w', './f', './r', './s', './c', './b1', './h1', './w1', './f1']}, vectorization=['./f1'], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={'./f1': 1, './w1': 1, './h1': 1, './b1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O1: [1, 1, 1, 1] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1}, 'h': {'./h1': 1}, 'w': {'./w1': 1}, 'f': {'./f1': 1}, 'r': {}, 's': {}, 'c': {}}, permutation={'.': ['./b', './h', './w', './f', './r', './s', './c', './b1', './h1', './w1', './f1']}, vectorization=['./f1'], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={'./f1': 1, './w1': 1, './h1': 1, './b1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O2: [1, 1, 2, 16] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1}, 'h': {'./h1': 1}, 'w': {'./w1': 2}, 'f': {'./f1': 16}, 'r': {}, 's': {}, 'c': {}}, permutation={'.': ['./b', './h', './w', './f', './r', './s', './c', './b1', './h1', './w1', './f1']}, vectorization=['./f1'], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={'./f1': 16, './w1': 2, './h1': 1, './b1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O3: [1, 1, 2, 16] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 1}, 'h': {'./h1': 1}, 'w': {'./w1': 2}, 'f': {'./f1': 16}, 'r': {}, 's': {}, 'c': {}}, permutation={'.': ['./b', './h', './w', './f', './r', './s', './c', './b1', './h1', './w1', './f1']}, vectorization=['./f1'], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={'./f1': 16, './w1': 2, './h1': 1, './b1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: sample 0: [1, 1, 1, 1] +# CHECK-NEXT: sample 1: [1, 1, 1, 2] +# CHECK-NEXT: sample 2: [1, 1, 1, 4] +# CHECK-NEXT: sample 3: [1, 1, 1, 8] +# CHECK-NEXT: sample 4: [1, 1, 1, 16] +# CHECK-NEXT: sample 5: [1, 1, 1, 32] +# CHECK-NEXT: sample 6: [1, 1, 2, 1] +# CHECK-NEXT: sample 7: [1, 1, 2, 2] +# CHECK-NEXT: sample 8: [1, 1, 2, 4] +# CHECK-NEXT: sample 9: [1, 1, 2, 8] +# CHECK-NEXT: sample 10: [1, 1, 2, 16] +# CHECK-NEXT: sample 11: [1, 1, 2, 32] +# CHECK-NEXT: sample 12: [1, 2, 1, 1] +# CHECK-NEXT: sample 13: [1, 2, 1, 2] +# CHECK-NEXT: sample 14: [1, 2, 1, 4] +# CHECK-NEXT: sample 15: [1, 2, 1, 8] +# CHECK-NEXT: sample 16: [1, 2, 1, 16] +# CHECK-NEXT: sample 17: [1, 2, 1, 32] +# CHECK-NEXT: sample 18: [1, 2, 2, 1] +# CHECK-NEXT: sample 19: [1, 2, 2, 2] +# CHECK-NEXT: sample 20: [1, 2, 2, 4] +# CHECK-NEXT: sample 21: [1, 2, 2, 8] +# CHECK-NEXT: sample 22: [1, 2, 2, 16] +# CHECK-NEXT: sample 23: [1, 2, 2, 32] +# CHECK-NEXT: sample 24: [2, 1, 1, 1] +# CHECK-NEXT: sample 25: [2, 1, 1, 2] +# CHECK-NEXT: sample 26: [2, 1, 1, 4] +# CHECK-NEXT: sample 27: [2, 1, 1, 8] +# CHECK-NEXT: sample 28: [2, 1, 1, 16] +# CHECK-NEXT: sample 29: [2, 1, 1, 32] +# CHECK-NEXT: sample 30: [2, 1, 2, 1] +# CHECK-NEXT: sample 31: [2, 1, 2, 2] +# CHECK-NEXT: sample 32: [2, 1, 2, 4] +# CHECK-NEXT: sample 33: [2, 1, 2, 8] +# CHECK-NEXT: sample 34: [2, 1, 2, 16] +# CHECK-NEXT: sample 35: [2, 1, 2, 32] +# CHECK-NEXT: sample 36: [2, 2, 1, 1] +# CHECK-NEXT: sample 37: [2, 2, 1, 2] +# CHECK-NEXT: sample 38: [2, 2, 1, 4] +# CHECK-NEXT: sample 39: [2, 2, 1, 8] +# CHECK-NEXT: sample 40: [2, 2, 1, 16] +# CHECK-NEXT: sample 41: [2, 2, 1, 32] +# CHECK-NEXT: sample 42: [2, 2, 2, 1] +# CHECK-NEXT: sample 43: [2, 2, 2, 2] +# CHECK-NEXT: sample 44: [2, 2, 2, 4] +# CHECK-NEXT: sample 45: [2, 2, 2, 8] +# CHECK-NEXT: sample 46: [2, 2, 2, 16] +# CHECK-NEXT: stats {'filtered': 47, 'all': 48} +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 2}, 'h': {'./h1': 2}, 'w': {'./w1': 2}, 'f': {'./f1': 16}, 'r': {}, 's': {}, 'c': {}}, permutation={'.': ['./b', './h', './w', './f', './r', './s', './c', './b1', './h1', './w1', './f1']}, vectorization=['./f1'], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={'./f1': 16, './w1': 2, './h1': 2, './b1': 2}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] diff --git a/tests/filecheck/search/test_conv_prp_rnd.py b/tests/filecheck/search/test_conv_prp_rnd.py index 5cf9302f0..4af2095dc 100644 --- a/tests/filecheck/search/test_conv_prp_rnd.py +++ b/tests/filecheck/search/test_conv_prp_rnd.py @@ -18,10 +18,25 @@ utils.print_random_samples(backend, strategy, 20) -<<<<<<< HEAD -======= ->>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -# CHECK: File "/home/ruicesista/Documents/xtc/xtc/tests/filecheck/search/test_conv_prp_rnd.py", line 46 -# CHECK-NEXT: >>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -# CHECK-NEXT: ^ -# CHECK-NEXT: SyntaxError: invalid decimal literal +# CHECK: sample 0: [2, 1, 1, 32] +# CHECK-NEXT: sample 1: [2, 2, 1, 16] +# CHECK-NEXT: sample 2: [1, 1, 1, 4] +# CHECK-NEXT: sample 3: [1, 1, 1, 32] +# CHECK-NEXT: sample 4: [1, 2, 2, 1] +# CHECK-NEXT: sample 5: [1, 2, 2, 8] +# CHECK-NEXT: sample 6: [1, 1, 2, 16] +# CHECK-NEXT: sample 7: [1, 2, 1, 32] +# CHECK-NEXT: sample 8: [2, 2, 2, 8] +# CHECK-NEXT: sample 9: [2, 2, 2, 4] +# CHECK-NEXT: sample 10: [2, 1, 1, 2] +# CHECK-NEXT: sample 11: [2, 1, 1, 4] +# CHECK-NEXT: sample 12: [2, 1, 2, 16] +# CHECK-NEXT: sample 13: [2, 2, 2, 32] +# CHECK-NEXT: sample 14: [2, 1, 1, 1] +# CHECK-NEXT: sample 15: [2, 1, 2, 32] +# CHECK-NEXT: sample 16: [2, 1, 2, 8] +# CHECK-NEXT: sample 17: [2, 1, 2, 4] +# CHECK-NEXT: sample 18: [2, 2, 1, 8] +# CHECK-NEXT: sample 19: [2, 2, 1, 4] +# CHECK-NEXT: stats {'filtered': 20} +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['b', 'h', 'w', 'f'], loop_stamps=[], splits={}, tiles={'b': {}, 'h': {}, 'w': {}, 'f': {}}, permutation={'.': ['./b', './h', './w', './f']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['b', 'h', 'w', 'f', 'r', 's', 'c'], loop_stamps=[], splits={}, tiles={'b': {'./b1': 2}, 'h': {'./h1': 2}, 'w': {'./w1': 1}, 'f': {'./f1': 4}, 'r': {}, 's': {}, 'c': {}}, permutation={'.': ['./b', './h', './w', './f', './r', './s', './c', './b1', './h1', './w1', './f1']}, vectorization=['./f1'], parallelization=['./b', './h', './w', './f'], gpu_threads=[], gpu_blocks=[], unrolling={'./f1': 4, './w1': 1, './h1': 2, './b1': 2}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] diff --git a/tests/filecheck/search/test_matmul_goto.py b/tests/filecheck/search/test_matmul_goto.py index 7aa103819..859d43cdb 100644 --- a/tests/filecheck/search/test_matmul_goto.py +++ b/tests/filecheck/search/test_matmul_goto.py @@ -12,10 +12,113 @@ utils.print_all_opt_schedules(backend, strategy) utils.print_exhaustive_samples(backend, strategy, 100) -<<<<<<< HEAD -======= ->>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -# CHECK: File "/home/ruicesista/Documents/xtc/xtc/tests/filecheck/search/test_matmul_goto.py", line 237 -# CHECK-NEXT: >>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -# CHECK-NEXT: ^ -# CHECK-NEXT: SyntaxError: invalid decimal literal +# CHECK: schedule O0: [1, 1, 1, 1, 1, 0, 0, 0] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1, './i2': 1}, 'j': {'./j1': 1, './j2': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./j', './k', './i', './j1', './i1', './k1', './i2', './j2']}, vectorization=['./j2'], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={'./i2': 1, './k1': 0}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O1: [1, 1, 1, 1, 1, 0, 0, 0] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1, './i2': 1}, 'j': {'./j1': 1, './j2': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./j', './k', './i', './j1', './i1', './k1', './i2', './j2']}, vectorization=['./j2'], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={'./i2': 1, './k1': 0}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O2: [1, 1, 1, 1, 1, 0, 0, 0] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1, './i2': 1}, 'j': {'./j1': 1, './j2': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./j', './k', './i', './j1', './i1', './k1', './i2', './j2']}, vectorization=['./j2'], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={'./i2': 1, './k1': 0}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O3: [1, 1, 1, 1, 1, 0, 0, 0] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1, './i2': 1}, 'j': {'./j1': 1, './j2': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./j', './k', './i', './j1', './i1', './k1', './i2', './j2']}, vectorization=['./j2'], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={'./i2': 1, './k1': 0}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: sample 0: [1, 1, 1, 1, 1, 1, 0, 0] +# CHECK-NEXT: sample 1: [1, 1, 1, 1, 1, 1, 0, 1] +# CHECK-NEXT: sample 2: [1, 1, 1, 1, 1, 1, 1, 0] +# CHECK-NEXT: sample 3: [1, 1, 1, 1, 1, 1, 1, 1] +# CHECK-NEXT: sample 4: [1, 1, 1, 1, 1, 2, 0, 0] +# CHECK-NEXT: sample 5: [1, 1, 1, 1, 1, 2, 0, 1] +# CHECK-NEXT: sample 6: [1, 1, 1, 1, 1, 2, 1, 0] +# CHECK-NEXT: sample 7: [1, 1, 1, 1, 1, 2, 1, 1] +# CHECK-NEXT: sample 8: [1, 1, 1, 1, 1, 3, 0, 0] +# CHECK-NEXT: sample 9: [1, 1, 1, 1, 1, 3, 0, 1] +# CHECK-NEXT: sample 10: [1, 1, 1, 1, 1, 3, 1, 0] +# CHECK-NEXT: sample 11: [1, 1, 1, 1, 1, 3, 1, 1] +# CHECK-NEXT: sample 12: [1, 1, 1, 1, 1, 4, 0, 0] +# CHECK-NEXT: sample 13: [1, 1, 1, 1, 1, 4, 0, 1] +# CHECK-NEXT: sample 14: [1, 1, 1, 1, 1, 4, 1, 0] +# CHECK-NEXT: sample 15: [1, 1, 1, 1, 1, 4, 1, 1] +# CHECK-NEXT: sample 16: [1, 1, 1, 1, 1, 6, 0, 0] +# CHECK-NEXT: sample 17: [1, 1, 1, 1, 1, 6, 0, 1] +# CHECK-NEXT: sample 18: [1, 1, 1, 1, 1, 6, 1, 0] +# CHECK-NEXT: sample 19: [1, 1, 1, 1, 1, 6, 1, 1] +# CHECK-NEXT: sample 20: [1, 1, 1, 1, 2, 1, 0, 0] +# CHECK-NEXT: sample 21: [1, 1, 1, 1, 2, 1, 0, 1] +# CHECK-NEXT: sample 22: [1, 1, 1, 1, 2, 1, 1, 0] +# CHECK-NEXT: sample 23: [1, 1, 1, 1, 2, 1, 1, 1] +# CHECK-NEXT: sample 24: [1, 1, 1, 1, 2, 2, 0, 0] +# CHECK-NEXT: sample 25: [1, 1, 1, 1, 2, 2, 0, 1] +# CHECK-NEXT: sample 26: [1, 1, 1, 1, 2, 2, 1, 0] +# CHECK-NEXT: sample 27: [1, 1, 1, 1, 2, 2, 1, 1] +# CHECK-NEXT: sample 28: [1, 1, 1, 1, 2, 3, 0, 0] +# CHECK-NEXT: sample 29: [1, 1, 1, 1, 2, 3, 0, 1] +# CHECK-NEXT: sample 30: [1, 1, 1, 1, 2, 3, 1, 0] +# CHECK-NEXT: sample 31: [1, 1, 1, 1, 2, 3, 1, 1] +# CHECK-NEXT: sample 32: [1, 1, 1, 1, 2, 6, 0, 0] +# CHECK-NEXT: sample 33: [1, 1, 1, 1, 2, 6, 0, 1] +# CHECK-NEXT: sample 34: [1, 1, 1, 1, 2, 6, 1, 0] +# CHECK-NEXT: sample 35: [1, 1, 1, 1, 2, 6, 1, 1] +# CHECK-NEXT: sample 36: [1, 1, 1, 1, 3, 1, 0, 0] +# CHECK-NEXT: sample 37: [1, 1, 1, 1, 3, 1, 0, 1] +# CHECK-NEXT: sample 38: [1, 1, 1, 1, 3, 1, 1, 0] +# CHECK-NEXT: sample 39: [1, 1, 1, 1, 3, 1, 1, 1] +# CHECK-NEXT: sample 40: [1, 1, 1, 1, 3, 2, 0, 0] +# CHECK-NEXT: sample 41: [1, 1, 1, 1, 3, 2, 0, 1] +# CHECK-NEXT: sample 42: [1, 1, 1, 1, 3, 2, 1, 0] +# CHECK-NEXT: sample 43: [1, 1, 1, 1, 3, 2, 1, 1] +# CHECK-NEXT: sample 44: [1, 1, 1, 1, 3, 4, 0, 0] +# CHECK-NEXT: sample 45: [1, 1, 1, 1, 3, 4, 0, 1] +# CHECK-NEXT: sample 46: [1, 1, 1, 1, 3, 4, 1, 0] +# CHECK-NEXT: sample 47: [1, 1, 1, 1, 3, 4, 1, 1] +# CHECK-NEXT: sample 48: [1, 1, 1, 1, 4, 1, 0, 0] +# CHECK-NEXT: sample 49: [1, 1, 1, 1, 4, 1, 0, 1] +# CHECK-NEXT: sample 50: [1, 1, 1, 1, 4, 1, 1, 0] +# CHECK-NEXT: sample 51: [1, 1, 1, 1, 4, 1, 1, 1] +# CHECK-NEXT: sample 52: [1, 1, 1, 1, 4, 3, 0, 0] +# CHECK-NEXT: sample 53: [1, 1, 1, 1, 4, 3, 0, 1] +# CHECK-NEXT: sample 54: [1, 1, 1, 1, 4, 3, 1, 0] +# CHECK-NEXT: sample 55: [1, 1, 1, 1, 4, 3, 1, 1] +# CHECK-NEXT: sample 56: [1, 1, 1, 1, 6, 1, 0, 0] +# CHECK-NEXT: sample 57: [1, 1, 1, 1, 6, 1, 0, 1] +# CHECK-NEXT: sample 58: [1, 1, 1, 1, 6, 1, 1, 0] +# CHECK-NEXT: sample 59: [1, 1, 1, 1, 6, 1, 1, 1] +# CHECK-NEXT: sample 60: [1, 1, 1, 1, 6, 2, 0, 0] +# CHECK-NEXT: sample 61: [1, 1, 1, 1, 6, 2, 0, 1] +# CHECK-NEXT: sample 62: [1, 1, 1, 1, 6, 2, 1, 0] +# CHECK-NEXT: sample 63: [1, 1, 1, 1, 6, 2, 1, 1] +# CHECK-NEXT: sample 64: [1, 1, 1, 1, 12, 1, 0, 0] +# CHECK-NEXT: sample 65: [1, 1, 1, 1, 12, 1, 0, 1] +# CHECK-NEXT: sample 66: [1, 1, 1, 1, 12, 1, 1, 0] +# CHECK-NEXT: sample 67: [1, 1, 1, 1, 12, 1, 1, 1] +# CHECK-NEXT: sample 68: [1, 1, 1, 2, 1, 1, 0, 0] +# CHECK-NEXT: sample 69: [1, 1, 1, 2, 1, 1, 0, 1] +# CHECK-NEXT: sample 70: [1, 1, 1, 2, 1, 1, 1, 0] +# CHECK-NEXT: sample 71: [1, 1, 1, 2, 1, 1, 1, 1] +# CHECK-NEXT: sample 72: [1, 1, 1, 2, 1, 2, 0, 0] +# CHECK-NEXT: sample 73: [1, 1, 1, 2, 1, 2, 0, 1] +# CHECK-NEXT: sample 74: [1, 1, 1, 2, 1, 2, 1, 0] +# CHECK-NEXT: sample 75: [1, 1, 1, 2, 1, 2, 1, 1] +# CHECK-NEXT: sample 76: [1, 1, 1, 2, 1, 3, 0, 0] +# CHECK-NEXT: sample 77: [1, 1, 1, 2, 1, 3, 0, 1] +# CHECK-NEXT: sample 78: [1, 1, 1, 2, 1, 3, 1, 0] +# CHECK-NEXT: sample 79: [1, 1, 1, 2, 1, 3, 1, 1] +# CHECK-NEXT: sample 80: [1, 1, 1, 2, 1, 4, 0, 0] +# CHECK-NEXT: sample 81: [1, 1, 1, 2, 1, 4, 0, 1] +# CHECK-NEXT: sample 82: [1, 1, 1, 2, 1, 4, 1, 0] +# CHECK-NEXT: sample 83: [1, 1, 1, 2, 1, 4, 1, 1] +# CHECK-NEXT: sample 84: [1, 1, 1, 2, 1, 6, 0, 0] +# CHECK-NEXT: sample 85: [1, 1, 1, 2, 1, 6, 0, 1] +# CHECK-NEXT: sample 86: [1, 1, 1, 2, 1, 6, 1, 0] +# CHECK-NEXT: sample 87: [1, 1, 1, 2, 1, 6, 1, 1] +# CHECK-NEXT: sample 88: [1, 1, 1, 2, 2, 1, 0, 0] +# CHECK-NEXT: sample 89: [1, 1, 1, 2, 2, 1, 0, 1] +# CHECK-NEXT: sample 90: [1, 1, 1, 2, 2, 1, 1, 0] +# CHECK-NEXT: sample 91: [1, 1, 1, 2, 2, 1, 1, 1] +# CHECK-NEXT: sample 92: [1, 1, 1, 2, 2, 2, 0, 0] +# CHECK-NEXT: sample 93: [1, 1, 1, 2, 2, 2, 0, 1] +# CHECK-NEXT: sample 94: [1, 1, 1, 2, 2, 2, 1, 0] +# CHECK-NEXT: sample 95: [1, 1, 1, 2, 2, 2, 1, 1] +# CHECK-NEXT: sample 96: [1, 1, 1, 2, 2, 3, 0, 0] +# CHECK-NEXT: sample 97: [1, 1, 1, 2, 2, 3, 0, 1] +# CHECK-NEXT: sample 98: [1, 1, 1, 2, 2, 3, 1, 0] +# CHECK-NEXT: sample 99: [1, 1, 1, 2, 2, 3, 1, 1] +# CHECK-NEXT: stats {'filtered': 100, 'all': 108} +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1, './i2': 1}, 'j': {'./j1': 2, './j2': 2}, 'k': {'./k1': 2}}, permutation={'.': ['./j', './k', './i', './j1', './i1', './k1', './i2', './j2']}, vectorization=['./j2'], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={'./i2': 1, './k1': 3}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] diff --git a/tests/filecheck/search/test_matmul_goto_r.py b/tests/filecheck/search/test_matmul_goto_r.py index 47471b145..aa9a2591d 100644 --- a/tests/filecheck/search/test_matmul_goto_r.py +++ b/tests/filecheck/search/test_matmul_goto_r.py @@ -12,10 +12,113 @@ utils.print_all_opt_schedules(backend, strategy) utils.print_exhaustive_samples(backend, strategy, 100) -<<<<<<< HEAD -======= ->>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -# CHECK: File "/home/ruicesista/Documents/xtc/xtc/tests/filecheck/search/test_matmul_goto_r.py", line 237 -# CHECK-NEXT: >>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -# CHECK-NEXT: ^ -# CHECK-NEXT: SyntaxError: invalid decimal literal +# CHECK: schedule O0: [1, 1, 1, 1, 1, 0, 0, 0] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1, './i2': 1}, 'j': {'./j1': 1, './j2': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./j', './k', './i', './j1', './i1', './k1', './i2', './j2']}, vectorization=['./j2'], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={'./i2': 1, './k1': 0}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O1: [1, 1, 1, 1, 1, 0, 0, 0] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1, './i2': 1}, 'j': {'./j1': 1, './j2': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./j', './k', './i', './j1', './i1', './k1', './i2', './j2']}, vectorization=['./j2'], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={'./i2': 1, './k1': 0}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O2: [1, 1, 1, 1, 1, 0, 0, 0] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1, './i2': 1}, 'j': {'./j1': 1, './j2': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./j', './k', './i', './j1', './i1', './k1', './i2', './j2']}, vectorization=['./j2'], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={'./i2': 1, './k1': 0}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O3: [1, 1, 1, 1, 1, 0, 0, 0] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1, './i2': 1}, 'j': {'./j1': 1, './j2': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./j', './k', './i', './j1', './i1', './k1', './i2', './j2']}, vectorization=['./j2'], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={'./i2': 1, './k1': 0}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: sample 0: [3, 1, 2, 1, 1, 1, 0, 0] +# CHECK-NEXT: sample 1: [3, 1, 2, 1, 1, 1, 0, 1] +# CHECK-NEXT: sample 2: [3, 1, 2, 1, 1, 1, 1, 0] +# CHECK-NEXT: sample 3: [3, 1, 2, 1, 1, 1, 1, 1] +# CHECK-NEXT: sample 4: [3, 1, 2, 1, 1, 2, 0, 0] +# CHECK-NEXT: sample 5: [3, 1, 2, 1, 1, 2, 0, 1] +# CHECK-NEXT: sample 6: [3, 1, 2, 1, 1, 2, 1, 0] +# CHECK-NEXT: sample 7: [3, 1, 2, 1, 1, 2, 1, 1] +# CHECK-NEXT: sample 8: [3, 1, 2, 1, 1, 3, 0, 0] +# CHECK-NEXT: sample 9: [3, 1, 2, 1, 1, 3, 0, 1] +# CHECK-NEXT: sample 10: [3, 1, 2, 1, 1, 3, 1, 0] +# CHECK-NEXT: sample 11: [3, 1, 2, 1, 1, 3, 1, 1] +# CHECK-NEXT: sample 12: [3, 1, 2, 1, 2, 1, 0, 0] +# CHECK-NEXT: sample 13: [3, 1, 2, 1, 2, 1, 0, 1] +# CHECK-NEXT: sample 14: [3, 1, 2, 1, 2, 1, 1, 0] +# CHECK-NEXT: sample 15: [3, 1, 2, 1, 2, 1, 1, 1] +# CHECK-NEXT: sample 16: [3, 1, 2, 1, 2, 2, 0, 0] +# CHECK-NEXT: sample 17: [3, 1, 2, 1, 2, 2, 0, 1] +# CHECK-NEXT: sample 18: [3, 1, 2, 1, 2, 2, 1, 0] +# CHECK-NEXT: sample 19: [3, 1, 2, 1, 2, 2, 1, 1] +# CHECK-NEXT: sample 20: [3, 1, 2, 1, 2, 3, 0, 0] +# CHECK-NEXT: sample 21: [3, 1, 2, 1, 2, 3, 0, 1] +# CHECK-NEXT: sample 22: [3, 1, 2, 1, 2, 3, 1, 0] +# CHECK-NEXT: sample 23: [3, 1, 2, 1, 2, 3, 1, 1] +# CHECK-NEXT: sample 24: [3, 1, 2, 1, 3, 1, 0, 0] +# CHECK-NEXT: sample 25: [3, 1, 2, 1, 3, 1, 0, 1] +# CHECK-NEXT: sample 26: [3, 1, 2, 1, 3, 1, 1, 0] +# CHECK-NEXT: sample 27: [3, 1, 2, 1, 3, 1, 1, 1] +# CHECK-NEXT: sample 28: [3, 1, 2, 1, 3, 2, 0, 0] +# CHECK-NEXT: sample 29: [3, 1, 2, 1, 3, 2, 0, 1] +# CHECK-NEXT: sample 30: [3, 1, 2, 1, 3, 2, 1, 0] +# CHECK-NEXT: sample 31: [3, 1, 2, 1, 3, 2, 1, 1] +# CHECK-NEXT: sample 32: [3, 1, 2, 1, 4, 1, 0, 0] +# CHECK-NEXT: sample 33: [3, 1, 2, 1, 4, 1, 0, 1] +# CHECK-NEXT: sample 34: [3, 1, 2, 1, 4, 1, 1, 0] +# CHECK-NEXT: sample 35: [3, 1, 2, 1, 4, 1, 1, 1] +# CHECK-NEXT: sample 36: [3, 1, 2, 1, 4, 3, 0, 0] +# CHECK-NEXT: sample 37: [3, 1, 2, 1, 4, 3, 0, 1] +# CHECK-NEXT: sample 38: [3, 1, 2, 1, 4, 3, 1, 0] +# CHECK-NEXT: sample 39: [3, 1, 2, 1, 4, 3, 1, 1] +# CHECK-NEXT: sample 40: [3, 1, 2, 1, 6, 1, 0, 0] +# CHECK-NEXT: sample 41: [3, 1, 2, 1, 6, 1, 0, 1] +# CHECK-NEXT: sample 42: [3, 1, 2, 1, 6, 1, 1, 0] +# CHECK-NEXT: sample 43: [3, 1, 2, 1, 6, 1, 1, 1] +# CHECK-NEXT: sample 44: [3, 1, 2, 1, 6, 2, 0, 0] +# CHECK-NEXT: sample 45: [3, 1, 2, 1, 6, 2, 0, 1] +# CHECK-NEXT: sample 46: [3, 1, 2, 1, 6, 2, 1, 0] +# CHECK-NEXT: sample 47: [3, 1, 2, 1, 6, 2, 1, 1] +# CHECK-NEXT: sample 48: [3, 1, 2, 1, 12, 1, 0, 0] +# CHECK-NEXT: sample 49: [3, 1, 2, 1, 12, 1, 0, 1] +# CHECK-NEXT: sample 50: [3, 1, 2, 1, 12, 1, 1, 0] +# CHECK-NEXT: sample 51: [3, 1, 2, 1, 12, 1, 1, 1] +# CHECK-NEXT: sample 52: [3, 1, 2, 2, 1, 1, 0, 0] +# CHECK-NEXT: sample 53: [3, 1, 2, 2, 1, 1, 0, 1] +# CHECK-NEXT: sample 54: [3, 1, 2, 2, 1, 1, 1, 0] +# CHECK-NEXT: sample 55: [3, 1, 2, 2, 1, 1, 1, 1] +# CHECK-NEXT: sample 56: [3, 1, 2, 2, 1, 2, 0, 0] +# CHECK-NEXT: sample 57: [3, 1, 2, 2, 1, 2, 0, 1] +# CHECK-NEXT: sample 58: [3, 1, 2, 2, 1, 2, 1, 0] +# CHECK-NEXT: sample 59: [3, 1, 2, 2, 1, 2, 1, 1] +# CHECK-NEXT: sample 60: [3, 1, 2, 2, 1, 3, 0, 0] +# CHECK-NEXT: sample 61: [3, 1, 2, 2, 1, 3, 0, 1] +# CHECK-NEXT: sample 62: [3, 1, 2, 2, 1, 3, 1, 0] +# CHECK-NEXT: sample 63: [3, 1, 2, 2, 1, 3, 1, 1] +# CHECK-NEXT: sample 64: [3, 1, 2, 2, 2, 1, 0, 0] +# CHECK-NEXT: sample 65: [3, 1, 2, 2, 2, 1, 0, 1] +# CHECK-NEXT: sample 66: [3, 1, 2, 2, 2, 1, 1, 0] +# CHECK-NEXT: sample 67: [3, 1, 2, 2, 2, 1, 1, 1] +# CHECK-NEXT: sample 68: [3, 1, 2, 2, 2, 2, 0, 0] +# CHECK-NEXT: sample 69: [3, 1, 2, 2, 2, 2, 0, 1] +# CHECK-NEXT: sample 70: [3, 1, 2, 2, 2, 2, 1, 0] +# CHECK-NEXT: sample 71: [3, 1, 2, 2, 2, 2, 1, 1] +# CHECK-NEXT: sample 72: [3, 1, 2, 2, 2, 3, 0, 0] +# CHECK-NEXT: sample 73: [3, 1, 2, 2, 2, 3, 0, 1] +# CHECK-NEXT: sample 74: [3, 1, 2, 2, 2, 3, 1, 0] +# CHECK-NEXT: sample 75: [3, 1, 2, 2, 2, 3, 1, 1] +# CHECK-NEXT: sample 76: [3, 1, 2, 2, 3, 1, 0, 0] +# CHECK-NEXT: sample 77: [3, 1, 2, 2, 3, 1, 0, 1] +# CHECK-NEXT: sample 78: [3, 1, 2, 2, 3, 1, 1, 0] +# CHECK-NEXT: sample 79: [3, 1, 2, 2, 3, 1, 1, 1] +# CHECK-NEXT: sample 80: [3, 1, 2, 2, 3, 2, 0, 0] +# CHECK-NEXT: sample 81: [3, 1, 2, 2, 3, 2, 0, 1] +# CHECK-NEXT: sample 82: [3, 1, 2, 2, 3, 2, 1, 0] +# CHECK-NEXT: sample 83: [3, 1, 2, 2, 3, 2, 1, 1] +# CHECK-NEXT: sample 84: [3, 1, 2, 2, 4, 1, 0, 0] +# CHECK-NEXT: sample 85: [3, 1, 2, 2, 4, 1, 0, 1] +# CHECK-NEXT: sample 86: [3, 1, 2, 2, 4, 1, 1, 0] +# CHECK-NEXT: sample 87: [3, 1, 2, 2, 4, 1, 1, 1] +# CHECK-NEXT: sample 88: [3, 1, 2, 2, 4, 3, 0, 0] +# CHECK-NEXT: sample 89: [3, 1, 2, 2, 4, 3, 0, 1] +# CHECK-NEXT: sample 90: [3, 1, 2, 2, 4, 3, 1, 0] +# CHECK-NEXT: sample 91: [3, 1, 2, 2, 4, 3, 1, 1] +# CHECK-NEXT: sample 92: [3, 1, 2, 2, 6, 1, 0, 0] +# CHECK-NEXT: sample 93: [3, 1, 2, 2, 6, 1, 0, 1] +# CHECK-NEXT: sample 94: [3, 1, 2, 2, 6, 1, 1, 0] +# CHECK-NEXT: sample 95: [3, 1, 2, 2, 6, 1, 1, 1] +# CHECK-NEXT: sample 96: [3, 1, 2, 2, 6, 2, 0, 0] +# CHECK-NEXT: sample 97: [3, 1, 2, 2, 6, 2, 0, 1] +# CHECK-NEXT: sample 98: [3, 1, 2, 2, 6, 2, 1, 0] +# CHECK-NEXT: sample 99: [3, 1, 2, 2, 6, 2, 1, 1] +# CHECK-NEXT: stats {'filtered': 3256, 'all': 6620} +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 3, './i2': 1}, 'j': {'./j1': 4, './j2': 2}, 'k': {'./k1': 6}}, permutation={'.': ['./j', './k', './i', './j1', './i1', './k1', './i2', './j2']}, vectorization=['./j2'], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={'./i2': 1, './k1': 2}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] diff --git a/tests/filecheck/search/test_matmul_oo.py b/tests/filecheck/search/test_matmul_oo.py index 60d5d132e..14cfa030a 100644 --- a/tests/filecheck/search/test_matmul_oo.py +++ b/tests/filecheck/search/test_matmul_oo.py @@ -12,10 +12,58 @@ utils.print_all_opt_schedules(backend, strategy) utils.print_exhaustive_samples(backend, strategy, 100) -<<<<<<< HEAD -======= ->>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -# CHECK: File "/home/ruicesista/Documents/xtc/xtc/tests/filecheck/search/test_matmul_oo.py", line 127 -# CHECK-NEXT: >>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -# CHECK-NEXT: ^ -# CHECK-NEXT: SyntaxError: invalid decimal literal +# CHECK: schedule O0: [1, 1, 1] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1}, 'j': {'./j1': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './k', './j', './i1', './k1', './j1']}, vectorization=['./j1'], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={'./j1': 1, './k1': 1, './i1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O1: [1, 1, 1] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1}, 'j': {'./j1': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './k', './j', './i1', './k1', './j1']}, vectorization=['./j1'], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={'./j1': 1, './k1': 1, './i1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O2: [1, 16, 1] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1}, 'j': {'./j1': 16}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './k', './j', './i1', './k1', './j1']}, vectorization=['./j1'], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={'./j1': 16, './k1': 1, './i1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O3: [3, 16, 12] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 3}, 'j': {'./j1': 16}, 'k': {'./k1': 12}}, permutation={'.': ['./i', './k', './j', './i1', './k1', './j1']}, vectorization=['./j1'], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={'./j1': 16, './k1': 12, './i1': 3}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: sample 0: [1, 1, 1] +# CHECK-NEXT: sample 1: [1, 1, 2] +# CHECK-NEXT: sample 2: [1, 1, 3] +# CHECK-NEXT: sample 3: [1, 1, 4] +# CHECK-NEXT: sample 4: [1, 1, 6] +# CHECK-NEXT: sample 5: [1, 2, 1] +# CHECK-NEXT: sample 6: [1, 2, 2] +# CHECK-NEXT: sample 7: [1, 2, 3] +# CHECK-NEXT: sample 8: [1, 2, 4] +# CHECK-NEXT: sample 9: [1, 2, 6] +# CHECK-NEXT: sample 10: [1, 4, 1] +# CHECK-NEXT: sample 11: [1, 4, 2] +# CHECK-NEXT: sample 12: [1, 4, 3] +# CHECK-NEXT: sample 13: [1, 4, 4] +# CHECK-NEXT: sample 14: [1, 4, 6] +# CHECK-NEXT: sample 15: [1, 8, 1] +# CHECK-NEXT: sample 16: [1, 8, 2] +# CHECK-NEXT: sample 17: [1, 8, 3] +# CHECK-NEXT: sample 18: [1, 8, 4] +# CHECK-NEXT: sample 19: [1, 8, 6] +# CHECK-NEXT: sample 20: [1, 16, 1] +# CHECK-NEXT: sample 21: [1, 16, 2] +# CHECK-NEXT: sample 22: [1, 16, 3] +# CHECK-NEXT: sample 23: [1, 16, 4] +# CHECK-NEXT: sample 24: [1, 16, 6] +# CHECK-NEXT: sample 25: [1, 32, 1] +# CHECK-NEXT: sample 26: [1, 32, 2] +# CHECK-NEXT: sample 27: [1, 32, 3] +# CHECK-NEXT: sample 28: [1, 32, 4] +# CHECK-NEXT: sample 29: [3, 1, 1] +# CHECK-NEXT: sample 30: [3, 1, 2] +# CHECK-NEXT: sample 31: [3, 2, 1] +# CHECK-NEXT: sample 32: [3, 2, 2] +# CHECK-NEXT: sample 33: [3, 4, 1] +# CHECK-NEXT: sample 34: [3, 4, 2] +# CHECK-NEXT: sample 35: [3, 8, 1] +# CHECK-NEXT: sample 36: [3, 8, 2] +# CHECK-NEXT: sample 37: [3, 16, 1] +# CHECK-NEXT: sample 38: [3, 16, 2] +# CHECK-NEXT: sample 39: [3, 32, 1] +# CHECK-NEXT: sample 40: [7, 1, 1] +# CHECK-NEXT: sample 41: [7, 2, 1] +# CHECK-NEXT: sample 42: [7, 4, 1] +# CHECK-NEXT: sample 43: [7, 8, 1] +# CHECK-NEXT: sample 44: [7, 16, 1] +# CHECK-NEXT: stats {'filtered': 45, 'all': 144} +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 7}, 'j': {'./j1': 16}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './k', './j', './i1', './k1', './j1']}, vectorization=['./j1'], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={'./j1': 16, './k1': 1, './i1': 7}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] diff --git a/tests/filecheck/search/test_matmul_p1.py b/tests/filecheck/search/test_matmul_p1.py index a53cd2752..a6baa542a 100644 --- a/tests/filecheck/search/test_matmul_p1.py +++ b/tests/filecheck/search/test_matmul_p1.py @@ -12,10 +12,113 @@ utils.print_all_opt_schedules(backend, strategy) utils.print_exhaustive_samples(backend, strategy, 100) -<<<<<<< HEAD -======= ->>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -# CHECK: File "/home/ruicesista/Documents/xtc/xtc/tests/filecheck/search/test_matmul_p1.py", line 237 -# CHECK-NEXT: >>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -# CHECK-NEXT: ^ -# CHECK-NEXT: SyntaxError: invalid decimal literal +# CHECK: schedule O0: [1, 1, 1, 0] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1}, 'j': {'./j1': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './k', './i1', './j1', './k1']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={'./k1': 1, './j1': 1, './i1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O1: [1, 1, 1, 0] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1}, 'j': {'./j1': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './k', './i1', './j1', './k1']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={'./k1': 1, './j1': 1, './i1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O2: [1, 1, 1, 1] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1}, 'j': {'./j1': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './k', './i1', './k1', './j1']}, vectorization=['./j1'], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={'./j1': 1, './k1': 1, './i1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O3: [1, 1, 1, 1] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1}, 'j': {'./j1': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './k', './i1', './k1', './j1']}, vectorization=['./j1'], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={'./j1': 1, './k1': 1, './i1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: sample 0: [1, 1, 1, 0] +# CHECK-NEXT: sample 1: [1, 1, 1, 1] +# CHECK-NEXT: sample 2: [1, 1, 1, 2] +# CHECK-NEXT: sample 3: [1, 1, 1, 3] +# CHECK-NEXT: sample 4: [1, 1, 1, 4] +# CHECK-NEXT: sample 5: [1, 1, 1, 5] +# CHECK-NEXT: sample 6: [1, 1, 2, 0] +# CHECK-NEXT: sample 7: [1, 1, 2, 1] +# CHECK-NEXT: sample 8: [1, 1, 2, 2] +# CHECK-NEXT: sample 9: [1, 1, 2, 3] +# CHECK-NEXT: sample 10: [1, 1, 2, 4] +# CHECK-NEXT: sample 11: [1, 1, 2, 5] +# CHECK-NEXT: sample 12: [1, 1, 3, 0] +# CHECK-NEXT: sample 13: [1, 1, 3, 1] +# CHECK-NEXT: sample 14: [1, 1, 3, 2] +# CHECK-NEXT: sample 15: [1, 1, 3, 3] +# CHECK-NEXT: sample 16: [1, 1, 3, 4] +# CHECK-NEXT: sample 17: [1, 1, 3, 5] +# CHECK-NEXT: sample 18: [1, 1, 4, 0] +# CHECK-NEXT: sample 19: [1, 1, 4, 1] +# CHECK-NEXT: sample 20: [1, 1, 4, 2] +# CHECK-NEXT: sample 21: [1, 1, 4, 3] +# CHECK-NEXT: sample 22: [1, 1, 4, 4] +# CHECK-NEXT: sample 23: [1, 1, 4, 5] +# CHECK-NEXT: sample 24: [1, 1, 6, 0] +# CHECK-NEXT: sample 25: [1, 1, 6, 1] +# CHECK-NEXT: sample 26: [1, 1, 6, 2] +# CHECK-NEXT: sample 27: [1, 1, 6, 3] +# CHECK-NEXT: sample 28: [1, 1, 6, 4] +# CHECK-NEXT: sample 29: [1, 1, 6, 5] +# CHECK-NEXT: sample 30: [1, 2, 1, 0] +# CHECK-NEXT: sample 31: [1, 2, 1, 1] +# CHECK-NEXT: sample 32: [1, 2, 1, 2] +# CHECK-NEXT: sample 33: [1, 2, 1, 3] +# CHECK-NEXT: sample 34: [1, 2, 1, 4] +# CHECK-NEXT: sample 35: [1, 2, 1, 5] +# CHECK-NEXT: sample 36: [1, 2, 2, 0] +# CHECK-NEXT: sample 37: [1, 2, 2, 1] +# CHECK-NEXT: sample 38: [1, 2, 2, 2] +# CHECK-NEXT: sample 39: [1, 2, 2, 3] +# CHECK-NEXT: sample 40: [1, 2, 2, 4] +# CHECK-NEXT: sample 41: [1, 2, 2, 5] +# CHECK-NEXT: sample 42: [1, 2, 3, 0] +# CHECK-NEXT: sample 43: [1, 2, 3, 1] +# CHECK-NEXT: sample 44: [1, 2, 3, 2] +# CHECK-NEXT: sample 45: [1, 2, 3, 3] +# CHECK-NEXT: sample 46: [1, 2, 3, 4] +# CHECK-NEXT: sample 47: [1, 2, 3, 5] +# CHECK-NEXT: sample 48: [1, 2, 4, 0] +# CHECK-NEXT: sample 49: [1, 2, 4, 1] +# CHECK-NEXT: sample 50: [1, 2, 4, 2] +# CHECK-NEXT: sample 51: [1, 2, 4, 3] +# CHECK-NEXT: sample 52: [1, 2, 4, 4] +# CHECK-NEXT: sample 53: [1, 2, 4, 5] +# CHECK-NEXT: sample 54: [1, 2, 6, 1] +# CHECK-NEXT: sample 55: [1, 2, 6, 4] +# CHECK-NEXT: sample 56: [1, 4, 1, 0] +# CHECK-NEXT: sample 57: [1, 4, 1, 1] +# CHECK-NEXT: sample 58: [1, 4, 1, 2] +# CHECK-NEXT: sample 59: [1, 4, 1, 3] +# CHECK-NEXT: sample 60: [1, 4, 1, 4] +# CHECK-NEXT: sample 61: [1, 4, 1, 5] +# CHECK-NEXT: sample 62: [1, 4, 2, 0] +# CHECK-NEXT: sample 63: [1, 4, 2, 1] +# CHECK-NEXT: sample 64: [1, 4, 2, 2] +# CHECK-NEXT: sample 65: [1, 4, 2, 3] +# CHECK-NEXT: sample 66: [1, 4, 2, 4] +# CHECK-NEXT: sample 67: [1, 4, 2, 5] +# CHECK-NEXT: sample 68: [1, 4, 3, 1] +# CHECK-NEXT: sample 69: [1, 4, 3, 4] +# CHECK-NEXT: sample 70: [1, 4, 4, 1] +# CHECK-NEXT: sample 71: [1, 4, 4, 4] +# CHECK-NEXT: sample 72: [1, 4, 6, 1] +# CHECK-NEXT: sample 73: [1, 4, 6, 4] +# CHECK-NEXT: sample 74: [1, 8, 1, 0] +# CHECK-NEXT: sample 75: [1, 8, 1, 1] +# CHECK-NEXT: sample 76: [1, 8, 1, 2] +# CHECK-NEXT: sample 77: [1, 8, 1, 3] +# CHECK-NEXT: sample 78: [1, 8, 1, 4] +# CHECK-NEXT: sample 79: [1, 8, 1, 5] +# CHECK-NEXT: sample 80: [1, 8, 2, 1] +# CHECK-NEXT: sample 81: [1, 8, 2, 4] +# CHECK-NEXT: sample 82: [1, 8, 3, 1] +# CHECK-NEXT: sample 83: [1, 8, 3, 4] +# CHECK-NEXT: sample 84: [1, 8, 4, 1] +# CHECK-NEXT: sample 85: [1, 8, 4, 4] +# CHECK-NEXT: sample 86: [1, 8, 6, 1] +# CHECK-NEXT: sample 87: [1, 8, 6, 4] +# CHECK-NEXT: sample 88: [1, 16, 1, 1] +# CHECK-NEXT: sample 89: [1, 16, 1, 4] +# CHECK-NEXT: sample 90: [1, 16, 2, 1] +# CHECK-NEXT: sample 91: [1, 16, 2, 4] +# CHECK-NEXT: sample 92: [1, 16, 3, 1] +# CHECK-NEXT: sample 93: [1, 16, 3, 4] +# CHECK-NEXT: sample 94: [1, 16, 4, 1] +# CHECK-NEXT: sample 95: [1, 16, 4, 4] +# CHECK-NEXT: sample 96: [1, 16, 6, 1] +# CHECK-NEXT: sample 97: [1, 16, 6, 4] +# CHECK-NEXT: sample 98: [1, 32, 1, 1] +# CHECK-NEXT: sample 99: [1, 32, 1, 4] +# CHECK-NEXT: stats {'filtered': 100, 'all': 185} +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1}, 'j': {'./j1': 32}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './k', './k1', './i1', './j1']}, vectorization=['./j1'], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={'./j1': 32, './i1': 1, './k1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] diff --git a/tests/filecheck/search/test_matmul_p1v.py b/tests/filecheck/search/test_matmul_p1v.py index f8e9c77e2..faba250cf 100644 --- a/tests/filecheck/search/test_matmul_p1v.py +++ b/tests/filecheck/search/test_matmul_p1v.py @@ -12,10 +12,39 @@ utils.print_all_opt_schedules(backend, strategy) utils.print_exhaustive_samples(backend, strategy, 100) -<<<<<<< HEAD -======= ->>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -# CHECK: File "/home/ruicesista/Documents/xtc/xtc/tests/filecheck/search/test_matmul_p1v.py", line 89 -# CHECK-NEXT: >>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -# CHECK-NEXT: ^ -# CHECK-NEXT: SyntaxError: invalid decimal literal +# CHECK: schedule O0: [1, 1, 1, 0] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1}, 'j': {'./j1': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './k', './i1', './j1', './k1']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={'./k1': 1, './j1': 1, './i1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O1: [1, 1, 1, 0] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1}, 'j': {'./j1': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './k', './i1', './j1', './k1']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={'./k1': 1, './j1': 1, './i1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O2: [1, 1, 1, 1] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1}, 'j': {'./j1': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './k', './i1', './k1', './j1']}, vectorization=['./j1'], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={'./j1': 1, './k1': 1, './i1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O3: [1, 1, 1, 1] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1}, 'j': {'./j1': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './k', './i1', './k1', './j1']}, vectorization=['./j1'], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={'./j1': 1, './k1': 1, './i1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: sample 0: [1, 16, 1, 1] +# CHECK-NEXT: sample 1: [1, 16, 1, 4] +# CHECK-NEXT: sample 2: [1, 16, 2, 1] +# CHECK-NEXT: sample 3: [1, 16, 2, 4] +# CHECK-NEXT: sample 4: [1, 16, 3, 1] +# CHECK-NEXT: sample 5: [1, 16, 3, 4] +# CHECK-NEXT: sample 6: [1, 16, 4, 1] +# CHECK-NEXT: sample 7: [1, 16, 4, 4] +# CHECK-NEXT: sample 8: [1, 16, 6, 1] +# CHECK-NEXT: sample 9: [1, 16, 6, 4] +# CHECK-NEXT: sample 10: [1, 32, 1, 1] +# CHECK-NEXT: sample 11: [1, 32, 1, 4] +# CHECK-NEXT: sample 12: [1, 32, 2, 1] +# CHECK-NEXT: sample 13: [1, 32, 2, 4] +# CHECK-NEXT: sample 14: [1, 32, 3, 1] +# CHECK-NEXT: sample 15: [1, 32, 3, 4] +# CHECK-NEXT: sample 16: [1, 32, 4, 1] +# CHECK-NEXT: sample 17: [1, 32, 4, 4] +# CHECK-NEXT: sample 18: [3, 16, 1, 1] +# CHECK-NEXT: sample 19: [3, 16, 1, 4] +# CHECK-NEXT: sample 20: [3, 16, 2, 1] +# CHECK-NEXT: sample 21: [3, 16, 2, 4] +# CHECK-NEXT: sample 22: [3, 32, 1, 1] +# CHECK-NEXT: sample 23: [3, 32, 1, 4] +# CHECK-NEXT: sample 24: [7, 16, 1, 1] +# CHECK-NEXT: sample 25: [7, 16, 1, 4] +# CHECK-NEXT: stats {'filtered': 154, 'all': 864} +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 7}, 'j': {'./j1': 16}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './k', './k1', './i1', './j1']}, vectorization=['./j1'], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={'./j1': 16, './i1': 7, './k1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] diff --git a/tests/filecheck/search/test_matmul_pprprp.py b/tests/filecheck/search/test_matmul_pprprp.py index 7f5c0df40..3991ec8ba 100644 --- a/tests/filecheck/search/test_matmul_pprprp.py +++ b/tests/filecheck/search/test_matmul_pprprp.py @@ -12,13 +12,113 @@ utils.print_all_opt_schedules(backend, strategy) utils.print_exhaustive_samples(backend, strategy,100) -<<<<<<< HEAD -======= ->>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -<<<<<<< HEAD -======= ->>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -# CHECK: File "/home/ruicesista/Documents/xtc/xtc/tests/filecheck/search/test_matmul_pprprp.py", line 32 -# CHECK-NEXT: >>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -# CHECK-NEXT: ^ -# CHECK-NEXT: SyntaxError: invalid decimal literal +# CHECK: schedule O0: [1, 1, 1, 1, 1, 1, 1] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1, './i2': 1, './i3': 1}, 'j': {'./j1': 1, './j2': 1, './j3': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './i1', './j1', './k', './i2', './j2', './k1', './i3', './j3']}, vectorization=['./j3'], parallelization=['./i', './j'], gpu_threads=[], gpu_blocks=[], unrolling={'./j3': 1, './i3': 1, './k1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O1: [1, 1, 1, 1, 1, 1, 1] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1, './i2': 1, './i3': 1}, 'j': {'./j1': 1, './j2': 1, './j3': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './i1', './j1', './k', './i2', './j2', './k1', './i3', './j3']}, vectorization=['./j3'], parallelization=['./i', './j'], gpu_threads=[], gpu_blocks=[], unrolling={'./j3': 1, './i3': 1, './k1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O2: [1, 1, 1, 1, 1, 16, 1] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1, './i2': 1, './i3': 1}, 'j': {'./j1': 16, './j2': 16, './j3': 16}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './i1', './j1', './k', './i2', './j2', './k1', './i3', './j3']}, vectorization=['./j3'], parallelization=['./i', './j'], gpu_threads=[], gpu_blocks=[], unrolling={'./j3': 16, './i3': 1, './k1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O3: [1, 1, 3, 1, 1, 16, 12] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 3, './i2': 3, './i3': 3}, 'j': {'./j1': 16, './j2': 16, './j3': 16}, 'k': {'./k1': 12}}, permutation={'.': ['./i', './j', './i1', './j1', './k', './i2', './j2', './k1', './i3', './j3']}, vectorization=['./j3'], parallelization=['./i', './j'], gpu_threads=[], gpu_blocks=[], unrolling={'./j3': 16, './i3': 3, './k1': 12}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: sample 0: [1, 1, 1, 1, 1, 1, 1] +# CHECK-NEXT: sample 1: [1, 1, 1, 1, 1, 1, 2] +# CHECK-NEXT: sample 2: [1, 1, 1, 1, 1, 1, 3] +# CHECK-NEXT: sample 3: [1, 1, 1, 1, 1, 1, 4] +# CHECK-NEXT: sample 4: [1, 1, 1, 1, 1, 1, 6] +# CHECK-NEXT: sample 5: [1, 1, 1, 1, 1, 2, 1] +# CHECK-NEXT: sample 6: [1, 1, 1, 1, 1, 2, 2] +# CHECK-NEXT: sample 7: [1, 1, 1, 1, 1, 2, 3] +# CHECK-NEXT: sample 8: [1, 1, 1, 1, 1, 2, 4] +# CHECK-NEXT: sample 9: [1, 1, 1, 1, 1, 2, 6] +# CHECK-NEXT: sample 10: [1, 1, 1, 1, 1, 4, 1] +# CHECK-NEXT: sample 11: [1, 1, 1, 1, 1, 4, 2] +# CHECK-NEXT: sample 12: [1, 1, 1, 1, 1, 4, 3] +# CHECK-NEXT: sample 13: [1, 1, 1, 1, 1, 4, 4] +# CHECK-NEXT: sample 14: [1, 1, 1, 1, 1, 4, 6] +# CHECK-NEXT: sample 15: [1, 1, 1, 1, 1, 8, 1] +# CHECK-NEXT: sample 16: [1, 1, 1, 1, 1, 8, 2] +# CHECK-NEXT: sample 17: [1, 1, 1, 1, 1, 8, 3] +# CHECK-NEXT: sample 18: [1, 1, 1, 1, 1, 8, 4] +# CHECK-NEXT: sample 19: [1, 1, 1, 1, 1, 8, 6] +# CHECK-NEXT: sample 20: [1, 1, 1, 1, 1, 16, 1] +# CHECK-NEXT: sample 21: [1, 1, 1, 1, 1, 16, 2] +# CHECK-NEXT: sample 22: [1, 1, 1, 1, 1, 16, 3] +# CHECK-NEXT: sample 23: [1, 1, 1, 1, 1, 16, 4] +# CHECK-NEXT: sample 24: [1, 1, 1, 1, 1, 16, 6] +# CHECK-NEXT: sample 25: [1, 1, 1, 1, 1, 32, 1] +# CHECK-NEXT: sample 26: [1, 1, 1, 1, 1, 32, 2] +# CHECK-NEXT: sample 27: [1, 1, 1, 1, 1, 32, 3] +# CHECK-NEXT: sample 28: [1, 1, 1, 1, 1, 32, 4] +# CHECK-NEXT: sample 29: [1, 1, 1, 1, 2, 1, 1] +# CHECK-NEXT: sample 30: [1, 1, 1, 1, 2, 1, 2] +# CHECK-NEXT: sample 31: [1, 1, 1, 1, 2, 1, 3] +# CHECK-NEXT: sample 32: [1, 1, 1, 1, 2, 1, 4] +# CHECK-NEXT: sample 33: [1, 1, 1, 1, 2, 1, 6] +# CHECK-NEXT: sample 34: [1, 1, 1, 1, 2, 2, 1] +# CHECK-NEXT: sample 35: [1, 1, 1, 1, 2, 2, 2] +# CHECK-NEXT: sample 36: [1, 1, 1, 1, 2, 2, 3] +# CHECK-NEXT: sample 37: [1, 1, 1, 1, 2, 2, 4] +# CHECK-NEXT: sample 38: [1, 1, 1, 1, 2, 2, 6] +# CHECK-NEXT: sample 39: [1, 1, 1, 1, 2, 4, 1] +# CHECK-NEXT: sample 40: [1, 1, 1, 1, 2, 4, 2] +# CHECK-NEXT: sample 41: [1, 1, 1, 1, 2, 4, 3] +# CHECK-NEXT: sample 42: [1, 1, 1, 1, 2, 4, 4] +# CHECK-NEXT: sample 43: [1, 1, 1, 1, 2, 4, 6] +# CHECK-NEXT: sample 44: [1, 1, 1, 1, 2, 8, 1] +# CHECK-NEXT: sample 45: [1, 1, 1, 1, 2, 8, 2] +# CHECK-NEXT: sample 46: [1, 1, 1, 1, 2, 8, 3] +# CHECK-NEXT: sample 47: [1, 1, 1, 1, 2, 8, 4] +# CHECK-NEXT: sample 48: [1, 1, 1, 1, 2, 8, 6] +# CHECK-NEXT: sample 49: [1, 1, 1, 1, 2, 16, 1] +# CHECK-NEXT: sample 50: [1, 1, 1, 1, 2, 16, 2] +# CHECK-NEXT: sample 51: [1, 1, 1, 1, 2, 16, 3] +# CHECK-NEXT: sample 52: [1, 1, 1, 1, 2, 16, 4] +# CHECK-NEXT: sample 53: [1, 1, 1, 1, 2, 16, 6] +# CHECK-NEXT: sample 54: [1, 1, 1, 1, 4, 1, 1] +# CHECK-NEXT: sample 55: [1, 1, 1, 1, 4, 1, 2] +# CHECK-NEXT: sample 56: [1, 1, 1, 1, 4, 1, 3] +# CHECK-NEXT: sample 57: [1, 1, 1, 1, 4, 1, 4] +# CHECK-NEXT: sample 58: [1, 1, 1, 1, 4, 1, 6] +# CHECK-NEXT: sample 59: [1, 1, 1, 1, 4, 2, 1] +# CHECK-NEXT: sample 60: [1, 1, 1, 1, 4, 2, 2] +# CHECK-NEXT: sample 61: [1, 1, 1, 1, 4, 2, 3] +# CHECK-NEXT: sample 62: [1, 1, 1, 1, 4, 2, 4] +# CHECK-NEXT: sample 63: [1, 1, 1, 1, 4, 2, 6] +# CHECK-NEXT: sample 64: [1, 1, 1, 1, 4, 4, 1] +# CHECK-NEXT: sample 65: [1, 1, 1, 1, 4, 4, 2] +# CHECK-NEXT: sample 66: [1, 1, 1, 1, 4, 4, 3] +# CHECK-NEXT: sample 67: [1, 1, 1, 1, 4, 4, 4] +# CHECK-NEXT: sample 68: [1, 1, 1, 1, 4, 4, 6] +# CHECK-NEXT: sample 69: [1, 1, 1, 1, 4, 8, 1] +# CHECK-NEXT: sample 70: [1, 1, 1, 1, 4, 8, 2] +# CHECK-NEXT: sample 71: [1, 1, 1, 1, 4, 8, 3] +# CHECK-NEXT: sample 72: [1, 1, 1, 1, 4, 8, 4] +# CHECK-NEXT: sample 73: [1, 1, 1, 1, 4, 8, 6] +# CHECK-NEXT: sample 74: [1, 1, 1, 1, 8, 1, 1] +# CHECK-NEXT: sample 75: [1, 1, 1, 1, 8, 1, 2] +# CHECK-NEXT: sample 76: [1, 1, 1, 1, 8, 1, 3] +# CHECK-NEXT: sample 77: [1, 1, 1, 1, 8, 1, 4] +# CHECK-NEXT: sample 78: [1, 1, 1, 1, 8, 1, 6] +# CHECK-NEXT: sample 79: [1, 1, 1, 1, 8, 2, 1] +# CHECK-NEXT: sample 80: [1, 1, 1, 1, 8, 2, 2] +# CHECK-NEXT: sample 81: [1, 1, 1, 1, 8, 2, 3] +# CHECK-NEXT: sample 82: [1, 1, 1, 1, 8, 2, 4] +# CHECK-NEXT: sample 83: [1, 1, 1, 1, 8, 2, 6] +# CHECK-NEXT: sample 84: [1, 1, 1, 1, 8, 4, 1] +# CHECK-NEXT: sample 85: [1, 1, 1, 1, 8, 4, 2] +# CHECK-NEXT: sample 86: [1, 1, 1, 1, 8, 4, 3] +# CHECK-NEXT: sample 87: [1, 1, 1, 1, 8, 4, 4] +# CHECK-NEXT: sample 88: [1, 1, 1, 1, 8, 4, 6] +# CHECK-NEXT: sample 89: [1, 1, 1, 1, 16, 1, 1] +# CHECK-NEXT: sample 90: [1, 1, 1, 1, 16, 1, 2] +# CHECK-NEXT: sample 91: [1, 1, 1, 1, 16, 1, 3] +# CHECK-NEXT: sample 92: [1, 1, 1, 1, 16, 1, 4] +# CHECK-NEXT: sample 93: [1, 1, 1, 1, 16, 1, 6] +# CHECK-NEXT: sample 94: [1, 1, 1, 1, 16, 2, 1] +# CHECK-NEXT: sample 95: [1, 1, 1, 1, 16, 2, 2] +# CHECK-NEXT: sample 96: [1, 1, 1, 1, 16, 2, 3] +# CHECK-NEXT: sample 97: [1, 1, 1, 1, 16, 2, 4] +# CHECK-NEXT: sample 98: [1, 1, 1, 1, 16, 2, 6] +# CHECK-NEXT: sample 99: [1, 1, 1, 1, 32, 1, 1] +# CHECK-NEXT: stats {'filtered': 100, 'all': 121} +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1, './i2': 1, './i3': 1}, 'j': {'./j1': 32, './j2': 32, './j3': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './i1', './j1', './k', './i2', './j2', './k1', './i3', './j3']}, vectorization=['./j3'], parallelization=['./i', './j'], gpu_threads=[], gpu_blocks=[], unrolling={'./j3': 1, './i3': 1, './k1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] diff --git a/tests/filecheck/search/test_matmul_pprprpv.py b/tests/filecheck/search/test_matmul_pprprpv.py index d81d70d1d..ccd82e4a1 100644 --- a/tests/filecheck/search/test_matmul_pprprpv.py +++ b/tests/filecheck/search/test_matmul_pprprpv.py @@ -12,13 +12,113 @@ utils.print_all_opt_schedules(backend, strategy) utils.print_exhaustive_samples(backend, strategy,100) -<<<<<<< HEAD -======= ->>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -<<<<<<< HEAD -======= ->>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -# CHECK: File "/home/ruicesista/Documents/xtc/xtc/tests/filecheck/search/test_matmul_pprprpv.py", line 32 -# CHECK-NEXT: >>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -# CHECK-NEXT: ^ -# CHECK-NEXT: SyntaxError: invalid decimal literal +# CHECK: schedule O0: [1, 1, 1, 1, 1, 1, 1] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1, './i2': 1, './i3': 1}, 'j': {'./j1': 1, './j2': 1, './j3': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './i1', './j1', './k', './i2', './j2', './k1', './i3', './j3']}, vectorization=['./j3'], parallelization=['./i', './j'], gpu_threads=[], gpu_blocks=[], unrolling={'./j3': 1, './i3': 1, './k1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O1: [1, 1, 1, 1, 1, 1, 1] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1, './i2': 1, './i3': 1}, 'j': {'./j1': 1, './j2': 1, './j3': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './i1', './j1', './k', './i2', './j2', './k1', './i3', './j3']}, vectorization=['./j3'], parallelization=['./i', './j'], gpu_threads=[], gpu_blocks=[], unrolling={'./j3': 1, './i3': 1, './k1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O2: [1, 1, 1, 1, 1, 16, 1] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1, './i2': 1, './i3': 1}, 'j': {'./j1': 16, './j2': 16, './j3': 16}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './i1', './j1', './k', './i2', './j2', './k1', './i3', './j3']}, vectorization=['./j3'], parallelization=['./i', './j'], gpu_threads=[], gpu_blocks=[], unrolling={'./j3': 16, './i3': 1, './k1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O3: [1, 1, 3, 1, 1, 16, 12] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 3, './i2': 3, './i3': 3}, 'j': {'./j1': 16, './j2': 16, './j3': 16}, 'k': {'./k1': 12}}, permutation={'.': ['./i', './j', './i1', './j1', './k', './i2', './j2', './k1', './i3', './j3']}, vectorization=['./j3'], parallelization=['./i', './j'], gpu_threads=[], gpu_blocks=[], unrolling={'./j3': 16, './i3': 3, './k1': 12}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: sample 0: [1, 1, 1, 1, 1, 16, 1] +# CHECK-NEXT: sample 1: [1, 1, 1, 1, 1, 16, 2] +# CHECK-NEXT: sample 2: [1, 1, 1, 1, 1, 16, 3] +# CHECK-NEXT: sample 3: [1, 1, 1, 1, 1, 16, 4] +# CHECK-NEXT: sample 4: [1, 1, 1, 1, 1, 16, 6] +# CHECK-NEXT: sample 5: [1, 1, 1, 1, 1, 32, 1] +# CHECK-NEXT: sample 6: [1, 1, 1, 1, 1, 32, 2] +# CHECK-NEXT: sample 7: [1, 1, 1, 1, 1, 32, 3] +# CHECK-NEXT: sample 8: [1, 1, 1, 1, 1, 32, 4] +# CHECK-NEXT: sample 9: [1, 1, 1, 1, 2, 16, 1] +# CHECK-NEXT: sample 10: [1, 1, 1, 1, 2, 16, 2] +# CHECK-NEXT: sample 11: [1, 1, 1, 1, 2, 16, 3] +# CHECK-NEXT: sample 12: [1, 1, 1, 1, 2, 16, 4] +# CHECK-NEXT: sample 13: [1, 1, 1, 1, 2, 16, 6] +# CHECK-NEXT: sample 14: [1, 1, 1, 2, 1, 16, 1] +# CHECK-NEXT: sample 15: [1, 1, 1, 2, 1, 16, 2] +# CHECK-NEXT: sample 16: [1, 1, 1, 2, 1, 16, 3] +# CHECK-NEXT: sample 17: [1, 1, 1, 2, 1, 16, 4] +# CHECK-NEXT: sample 18: [1, 1, 1, 2, 1, 16, 6] +# CHECK-NEXT: sample 19: [1, 1, 3, 1, 1, 16, 1] +# CHECK-NEXT: sample 20: [1, 1, 3, 1, 1, 16, 2] +# CHECK-NEXT: sample 21: [1, 1, 3, 1, 1, 32, 1] +# CHECK-NEXT: sample 22: [1, 1, 3, 1, 2, 16, 1] +# CHECK-NEXT: sample 23: [1, 1, 3, 1, 2, 16, 2] +# CHECK-NEXT: sample 24: [1, 1, 3, 2, 1, 16, 1] +# CHECK-NEXT: sample 25: [1, 1, 3, 2, 1, 16, 2] +# CHECK-NEXT: sample 26: [1, 1, 7, 1, 1, 16, 1] +# CHECK-NEXT: sample 27: [1, 1, 7, 1, 2, 16, 1] +# CHECK-NEXT: sample 28: [1, 1, 7, 2, 1, 16, 1] +# CHECK-NEXT: sample 29: [1, 3, 1, 1, 1, 16, 1] +# CHECK-NEXT: sample 30: [1, 3, 1, 1, 1, 16, 2] +# CHECK-NEXT: sample 31: [1, 3, 1, 1, 1, 16, 3] +# CHECK-NEXT: sample 32: [1, 3, 1, 1, 1, 16, 4] +# CHECK-NEXT: sample 33: [1, 3, 1, 1, 1, 16, 6] +# CHECK-NEXT: sample 34: [1, 3, 1, 1, 1, 32, 1] +# CHECK-NEXT: sample 35: [1, 3, 1, 1, 1, 32, 2] +# CHECK-NEXT: sample 36: [1, 3, 1, 1, 1, 32, 3] +# CHECK-NEXT: sample 37: [1, 3, 1, 1, 1, 32, 4] +# CHECK-NEXT: sample 38: [1, 3, 1, 1, 2, 16, 1] +# CHECK-NEXT: sample 39: [1, 3, 1, 1, 2, 16, 2] +# CHECK-NEXT: sample 40: [1, 3, 1, 1, 2, 16, 3] +# CHECK-NEXT: sample 41: [1, 3, 1, 1, 2, 16, 4] +# CHECK-NEXT: sample 42: [1, 3, 1, 1, 2, 16, 6] +# CHECK-NEXT: sample 43: [1, 3, 1, 2, 1, 16, 1] +# CHECK-NEXT: sample 44: [1, 3, 1, 2, 1, 16, 2] +# CHECK-NEXT: sample 45: [1, 3, 1, 2, 1, 16, 3] +# CHECK-NEXT: sample 46: [1, 3, 1, 2, 1, 16, 4] +# CHECK-NEXT: sample 47: [1, 3, 1, 2, 1, 16, 6] +# CHECK-NEXT: sample 48: [1, 3, 7, 1, 1, 16, 1] +# CHECK-NEXT: sample 49: [1, 3, 7, 1, 2, 16, 1] +# CHECK-NEXT: sample 50: [1, 3, 7, 2, 1, 16, 1] +# CHECK-NEXT: sample 51: [1, 7, 1, 1, 1, 16, 1] +# CHECK-NEXT: sample 52: [1, 7, 1, 1, 1, 16, 2] +# CHECK-NEXT: sample 53: [1, 7, 1, 1, 1, 16, 3] +# CHECK-NEXT: sample 54: [1, 7, 1, 1, 1, 16, 4] +# CHECK-NEXT: sample 55: [1, 7, 1, 1, 1, 16, 6] +# CHECK-NEXT: sample 56: [1, 7, 1, 1, 1, 32, 1] +# CHECK-NEXT: sample 57: [1, 7, 1, 1, 1, 32, 2] +# CHECK-NEXT: sample 58: [1, 7, 1, 1, 1, 32, 3] +# CHECK-NEXT: sample 59: [1, 7, 1, 1, 1, 32, 4] +# CHECK-NEXT: sample 60: [1, 7, 1, 1, 2, 16, 1] +# CHECK-NEXT: sample 61: [1, 7, 1, 1, 2, 16, 2] +# CHECK-NEXT: sample 62: [1, 7, 1, 1, 2, 16, 3] +# CHECK-NEXT: sample 63: [1, 7, 1, 1, 2, 16, 4] +# CHECK-NEXT: sample 64: [1, 7, 1, 1, 2, 16, 6] +# CHECK-NEXT: sample 65: [1, 7, 1, 2, 1, 16, 1] +# CHECK-NEXT: sample 66: [1, 7, 1, 2, 1, 16, 2] +# CHECK-NEXT: sample 67: [1, 7, 1, 2, 1, 16, 3] +# CHECK-NEXT: sample 68: [1, 7, 1, 2, 1, 16, 4] +# CHECK-NEXT: sample 69: [1, 7, 1, 2, 1, 16, 6] +# CHECK-NEXT: sample 70: [1, 7, 3, 1, 1, 16, 1] +# CHECK-NEXT: sample 71: [1, 7, 3, 1, 1, 16, 2] +# CHECK-NEXT: sample 72: [1, 7, 3, 1, 1, 32, 1] +# CHECK-NEXT: sample 73: [1, 7, 3, 1, 2, 16, 1] +# CHECK-NEXT: sample 74: [1, 7, 3, 1, 2, 16, 2] +# CHECK-NEXT: sample 75: [1, 7, 3, 2, 1, 16, 1] +# CHECK-NEXT: sample 76: [1, 7, 3, 2, 1, 16, 2] +# CHECK-NEXT: sample 77: [1, 21, 1, 1, 1, 16, 1] +# CHECK-NEXT: sample 78: [1, 21, 1, 1, 1, 16, 2] +# CHECK-NEXT: sample 79: [1, 21, 1, 1, 1, 16, 3] +# CHECK-NEXT: sample 80: [1, 21, 1, 1, 1, 16, 4] +# CHECK-NEXT: sample 81: [1, 21, 1, 1, 1, 16, 6] +# CHECK-NEXT: sample 82: [1, 21, 1, 1, 1, 32, 1] +# CHECK-NEXT: sample 83: [1, 21, 1, 1, 1, 32, 2] +# CHECK-NEXT: sample 84: [1, 21, 1, 1, 1, 32, 3] +# CHECK-NEXT: sample 85: [1, 21, 1, 1, 1, 32, 4] +# CHECK-NEXT: sample 86: [1, 21, 1, 1, 2, 16, 1] +# CHECK-NEXT: sample 87: [1, 21, 1, 1, 2, 16, 2] +# CHECK-NEXT: sample 88: [1, 21, 1, 1, 2, 16, 3] +# CHECK-NEXT: sample 89: [1, 21, 1, 1, 2, 16, 4] +# CHECK-NEXT: sample 90: [1, 21, 1, 1, 2, 16, 6] +# CHECK-NEXT: sample 91: [1, 21, 1, 2, 1, 16, 1] +# CHECK-NEXT: sample 92: [1, 21, 1, 2, 1, 16, 2] +# CHECK-NEXT: sample 93: [1, 21, 1, 2, 1, 16, 3] +# CHECK-NEXT: sample 94: [1, 21, 1, 2, 1, 16, 4] +# CHECK-NEXT: sample 95: [1, 21, 1, 2, 1, 16, 6] +# CHECK-NEXT: sample 96: [3, 1, 1, 1, 1, 16, 1] +# CHECK-NEXT: sample 97: [3, 1, 1, 1, 1, 16, 2] +# CHECK-NEXT: sample 98: [3, 1, 1, 1, 1, 16, 3] +# CHECK-NEXT: sample 99: [3, 1, 1, 1, 1, 16, 4] +# CHECK-NEXT: stats {'filtered_vec': 100, 'filtered': 1472, 'all': 3052} +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 3, './i2': 1, './i3': 1}, 'j': {'./j1': 16, './j2': 16, './j3': 16}, 'k': {'./k1': 4}}, permutation={'.': ['./i', './j', './i1', './j1', './k', './i2', './j2', './k1', './i3', './j3']}, vectorization=['./j3'], parallelization=['./i', './j'], gpu_threads=[], gpu_blocks=[], unrolling={'./j3': 16, './i3': 1, './k1': 4}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] diff --git a/tests/filecheck/search/test_matmul_pprprpvr.py b/tests/filecheck/search/test_matmul_pprprpvr.py index 184f0f95f..4a3c3e4bd 100644 --- a/tests/filecheck/search/test_matmul_pprprpvr.py +++ b/tests/filecheck/search/test_matmul_pprprpvr.py @@ -19,13 +19,113 @@ utils.print_all_opt_schedules(backend, strategy) utils.print_exhaustive_samples(backend, strategy,100) -<<<<<<< HEAD -======= ->>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -<<<<<<< HEAD -======= ->>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -# CHECK: File "/home/ruicesista/Documents/xtc/xtc/tests/filecheck/search/test_matmul_pprprpvr.py", line 39 -# CHECK-NEXT: >>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -# CHECK-NEXT: ^ -# CHECK-NEXT: SyntaxError: invalid decimal literal +# CHECK: schedule O0: [1, 1, 1, 1, 1, 1, 1] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1, './i2': 1, './i3': 1}, 'j': {'./j1': 1, './j2': 1, './j3': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './i1', './j1', './k', './i2', './j2', './k1', './i3', './j3']}, vectorization=['./j3'], parallelization=['./i', './j'], gpu_threads=[], gpu_blocks=[], unrolling={'./j3': 1, './i3': 1, './k1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O1: [1, 1, 1, 1, 1, 1, 1] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1, './i2': 1, './i3': 1}, 'j': {'./j1': 1, './j2': 1, './j3': 1}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './i1', './j1', './k', './i2', './j2', './k1', './i3', './j3']}, vectorization=['./j3'], parallelization=['./i', './j'], gpu_threads=[], gpu_blocks=[], unrolling={'./j3': 1, './i3': 1, './k1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O2: [1, 1, 1, 1, 1, 16, 1] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1, './i2': 1, './i3': 1}, 'j': {'./j1': 16, './j2': 16, './j3': 16}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './i1', './j1', './k', './i2', './j2', './k1', './i3', './j3']}, vectorization=['./j3'], parallelization=['./i', './j'], gpu_threads=[], gpu_blocks=[], unrolling={'./j3': 16, './i3': 1, './k1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O3: [1, 1, 3, 1, 1, 16, 12] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 3, './i2': 3, './i3': 3}, 'j': {'./j1': 16, './j2': 16, './j3': 16}, 'k': {'./k1': 12}}, permutation={'.': ['./i', './j', './i1', './j1', './k', './i2', './j2', './k1', './i3', './j3']}, vectorization=['./j3'], parallelization=['./i', './j'], gpu_threads=[], gpu_blocks=[], unrolling={'./j3': 16, './i3': 3, './k1': 12}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: sample 0: [1, 1, 1, 1, 1, 16, 1] +# CHECK-NEXT: sample 1: [1, 1, 1, 1, 1, 16, 2] +# CHECK-NEXT: sample 2: [1, 1, 1, 1, 1, 16, 3] +# CHECK-NEXT: sample 3: [1, 1, 1, 1, 1, 16, 4] +# CHECK-NEXT: sample 4: [1, 1, 1, 1, 1, 16, 6] +# CHECK-NEXT: sample 5: [1, 1, 1, 1, 1, 16, 12] +# CHECK-NEXT: sample 6: [1, 1, 1, 1, 1, 32, 1] +# CHECK-NEXT: sample 7: [1, 1, 1, 1, 1, 32, 2] +# CHECK-NEXT: sample 8: [1, 1, 1, 1, 1, 32, 3] +# CHECK-NEXT: sample 9: [1, 1, 1, 1, 1, 32, 4] +# CHECK-NEXT: sample 10: [1, 1, 1, 1, 1, 32, 6] +# CHECK-NEXT: sample 11: [1, 1, 1, 1, 2, 16, 1] +# CHECK-NEXT: sample 12: [1, 1, 1, 1, 2, 16, 2] +# CHECK-NEXT: sample 13: [1, 1, 1, 1, 2, 16, 3] +# CHECK-NEXT: sample 14: [1, 1, 1, 1, 2, 16, 4] +# CHECK-NEXT: sample 15: [1, 1, 1, 1, 2, 16, 6] +# CHECK-NEXT: sample 16: [1, 1, 1, 1, 2, 16, 12] +# CHECK-NEXT: sample 17: [1, 1, 1, 2, 1, 16, 1] +# CHECK-NEXT: sample 18: [1, 1, 1, 2, 1, 16, 2] +# CHECK-NEXT: sample 19: [1, 1, 1, 2, 1, 16, 3] +# CHECK-NEXT: sample 20: [1, 1, 1, 2, 1, 16, 4] +# CHECK-NEXT: sample 21: [1, 1, 1, 2, 1, 16, 6] +# CHECK-NEXT: sample 22: [1, 1, 1, 2, 1, 16, 12] +# CHECK-NEXT: sample 23: [1, 1, 3, 1, 1, 16, 1] +# CHECK-NEXT: sample 24: [1, 1, 3, 1, 1, 16, 2] +# CHECK-NEXT: sample 25: [1, 1, 3, 1, 1, 16, 3] +# CHECK-NEXT: sample 26: [1, 1, 3, 1, 1, 16, 4] +# CHECK-NEXT: sample 27: [1, 1, 3, 1, 2, 16, 1] +# CHECK-NEXT: sample 28: [1, 1, 3, 1, 2, 16, 2] +# CHECK-NEXT: sample 29: [1, 1, 3, 1, 2, 16, 3] +# CHECK-NEXT: sample 30: [1, 1, 3, 1, 2, 16, 4] +# CHECK-NEXT: sample 31: [1, 1, 3, 2, 1, 16, 1] +# CHECK-NEXT: sample 32: [1, 1, 3, 2, 1, 16, 2] +# CHECK-NEXT: sample 33: [1, 1, 3, 2, 1, 16, 3] +# CHECK-NEXT: sample 34: [1, 1, 3, 2, 1, 16, 4] +# CHECK-NEXT: sample 35: [1, 3, 1, 1, 1, 16, 1] +# CHECK-NEXT: sample 36: [1, 3, 1, 1, 1, 16, 2] +# CHECK-NEXT: sample 37: [1, 3, 1, 1, 1, 16, 3] +# CHECK-NEXT: sample 38: [1, 3, 1, 1, 1, 16, 4] +# CHECK-NEXT: sample 39: [1, 3, 1, 1, 1, 16, 6] +# CHECK-NEXT: sample 40: [1, 3, 1, 1, 1, 16, 12] +# CHECK-NEXT: sample 41: [1, 3, 1, 1, 1, 32, 1] +# CHECK-NEXT: sample 42: [1, 3, 1, 1, 1, 32, 2] +# CHECK-NEXT: sample 43: [1, 3, 1, 1, 1, 32, 3] +# CHECK-NEXT: sample 44: [1, 3, 1, 1, 1, 32, 4] +# CHECK-NEXT: sample 45: [1, 3, 1, 1, 1, 32, 6] +# CHECK-NEXT: sample 46: [1, 3, 1, 1, 2, 16, 1] +# CHECK-NEXT: sample 47: [1, 3, 1, 1, 2, 16, 2] +# CHECK-NEXT: sample 48: [1, 3, 1, 1, 2, 16, 3] +# CHECK-NEXT: sample 49: [1, 3, 1, 1, 2, 16, 4] +# CHECK-NEXT: sample 50: [1, 3, 1, 1, 2, 16, 6] +# CHECK-NEXT: sample 51: [1, 3, 1, 1, 2, 16, 12] +# CHECK-NEXT: sample 52: [1, 3, 1, 2, 1, 16, 1] +# CHECK-NEXT: sample 53: [1, 3, 1, 2, 1, 16, 2] +# CHECK-NEXT: sample 54: [1, 3, 1, 2, 1, 16, 3] +# CHECK-NEXT: sample 55: [1, 3, 1, 2, 1, 16, 4] +# CHECK-NEXT: sample 56: [1, 3, 1, 2, 1, 16, 6] +# CHECK-NEXT: sample 57: [1, 3, 1, 2, 1, 16, 12] +# CHECK-NEXT: sample 58: [1, 7, 1, 1, 1, 16, 1] +# CHECK-NEXT: sample 59: [1, 7, 1, 1, 1, 16, 2] +# CHECK-NEXT: sample 60: [1, 7, 1, 1, 1, 16, 3] +# CHECK-NEXT: sample 61: [1, 7, 1, 1, 1, 16, 4] +# CHECK-NEXT: sample 62: [1, 7, 1, 1, 1, 16, 6] +# CHECK-NEXT: sample 63: [1, 7, 1, 1, 1, 16, 12] +# CHECK-NEXT: sample 64: [1, 7, 1, 1, 1, 32, 1] +# CHECK-NEXT: sample 65: [1, 7, 1, 1, 1, 32, 2] +# CHECK-NEXT: sample 66: [1, 7, 1, 1, 1, 32, 3] +# CHECK-NEXT: sample 67: [1, 7, 1, 1, 1, 32, 4] +# CHECK-NEXT: sample 68: [1, 7, 1, 1, 1, 32, 6] +# CHECK-NEXT: sample 69: [1, 7, 1, 1, 2, 16, 1] +# CHECK-NEXT: sample 70: [1, 7, 1, 1, 2, 16, 2] +# CHECK-NEXT: sample 71: [1, 7, 1, 1, 2, 16, 3] +# CHECK-NEXT: sample 72: [1, 7, 1, 1, 2, 16, 4] +# CHECK-NEXT: sample 73: [1, 7, 1, 1, 2, 16, 6] +# CHECK-NEXT: sample 74: [1, 7, 1, 2, 1, 16, 1] +# CHECK-NEXT: sample 75: [1, 7, 1, 2, 1, 16, 2] +# CHECK-NEXT: sample 76: [1, 7, 1, 2, 1, 16, 3] +# CHECK-NEXT: sample 77: [1, 7, 1, 2, 1, 16, 4] +# CHECK-NEXT: sample 78: [1, 7, 1, 2, 1, 16, 6] +# CHECK-NEXT: sample 79: [1, 7, 1, 2, 1, 16, 12] +# CHECK-NEXT: sample 80: [1, 7, 3, 1, 1, 16, 1] +# CHECK-NEXT: sample 81: [1, 7, 3, 1, 1, 16, 2] +# CHECK-NEXT: sample 82: [1, 7, 3, 1, 1, 16, 3] +# CHECK-NEXT: sample 83: [1, 7, 3, 1, 1, 16, 4] +# CHECK-NEXT: sample 84: [1, 7, 3, 1, 2, 16, 1] +# CHECK-NEXT: sample 85: [1, 7, 3, 1, 2, 16, 2] +# CHECK-NEXT: sample 86: [1, 7, 3, 1, 2, 16, 3] +# CHECK-NEXT: sample 87: [1, 7, 3, 2, 1, 16, 1] +# CHECK-NEXT: sample 88: [1, 7, 3, 2, 1, 16, 2] +# CHECK-NEXT: sample 89: [1, 7, 3, 2, 1, 16, 3] +# CHECK-NEXT: sample 90: [1, 7, 3, 2, 1, 16, 4] +# CHECK-NEXT: sample 91: [1, 21, 1, 1, 1, 16, 1] +# CHECK-NEXT: sample 92: [1, 21, 1, 1, 1, 16, 2] +# CHECK-NEXT: sample 93: [1, 21, 1, 1, 1, 16, 3] +# CHECK-NEXT: sample 94: [1, 21, 1, 1, 1, 16, 4] +# CHECK-NEXT: sample 95: [1, 21, 1, 1, 1, 16, 6] +# CHECK-NEXT: sample 96: [1, 21, 1, 1, 1, 32, 1] +# CHECK-NEXT: sample 97: [1, 21, 1, 1, 1, 32, 2] +# CHECK-NEXT: sample 98: [1, 21, 1, 1, 1, 32, 3] +# CHECK-NEXT: sample 99: [1, 21, 1, 1, 2, 16, 1] +# CHECK-NEXT: stats {'filtered_l2': 100, 'filtered_l1': 105, 'filtered_reg': 115, 'filtered_vec': 154, 'filtered': 2126, 'all': 2749} +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 21, './i2': 21, './i3': 1}, 'j': {'./j1': 32, './j2': 32, './j3': 16}, 'k': {'./k1': 1}}, permutation={'.': ['./i', './j', './i1', './j1', './k', './i2', './j2', './k1', './i3', './j3']}, vectorization=['./j3'], parallelization=['./i', './j'], gpu_threads=[], gpu_blocks=[], unrolling={'./j3': 16, './i3': 1, './k1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] diff --git a/tests/filecheck/search/test_matmul_pprprpvr_rnd.py b/tests/filecheck/search/test_matmul_pprprpvr_rnd.py index 6d165210d..15d3a0305 100644 --- a/tests/filecheck/search/test_matmul_pprprpvr_rnd.py +++ b/tests/filecheck/search/test_matmul_pprprpvr_rnd.py @@ -18,10 +18,25 @@ utils.print_random_samples(backend, strategy, 20) -<<<<<<< HEAD -======= ->>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -# CHECK: File "/home/ruicesista/Documents/xtc/xtc/tests/filecheck/search/test_matmul_pprprpvr_rnd.py", line 46 -# CHECK-NEXT: >>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -# CHECK-NEXT: ^ -# CHECK-NEXT: SyntaxError: invalid decimal literal +# CHECK: sample 0: [1, 21, 1, 1, 1, 32, 3] +# CHECK-NEXT: sample 1: [7, 3, 1, 1, 1, 16, 2] +# CHECK-NEXT: sample 2: [7, 3, 1, 1, 2, 16, 1] +# CHECK-NEXT: sample 3: [7, 1, 1, 1, 1, 16, 2] +# CHECK-NEXT: sample 4: [7, 3, 1, 1, 1, 16, 1] +# CHECK-NEXT: sample 5: [21, 1, 1, 1, 1, 16, 1] +# CHECK-NEXT: sample 6: [3, 7, 1, 1, 1, 16, 2] +# CHECK-NEXT: sample 7: [21, 1, 1, 2, 1, 16, 12] +# CHECK-NEXT: sample 8: [7, 1, 1, 1, 1, 16, 6] +# CHECK-NEXT: sample 9: [1, 21, 1, 1, 2, 16, 3] +# CHECK-NEXT: sample 10: [3, 1, 1, 1, 1, 16, 4] +# CHECK-NEXT: sample 11: [3, 1, 1, 1, 2, 16, 4] +# CHECK-NEXT: sample 12: [7, 1, 1, 2, 1, 16, 2] +# CHECK-NEXT: sample 13: [1, 7, 3, 2, 1, 16, 4] +# CHECK-NEXT: sample 14: [3, 1, 1, 1, 2, 16, 1] +# CHECK-NEXT: sample 15: [1, 21, 1, 1, 1, 16, 1] +# CHECK-NEXT: sample 16: [3, 1, 1, 1, 1, 16, 12] +# CHECK-NEXT: sample 17: [1, 3, 1, 2, 1, 16, 2] +# CHECK-NEXT: sample 18: [1, 1, 1, 1, 2, 16, 3] +# CHECK-NEXT: sample 19: [7, 1, 3, 1, 1, 16, 2] +# CHECK-NEXT: stats {'filtered_l2': 2, 'filtered_l1': 2, 'filtered_reg': 3, 'filtered_vec': 3, 'filtered': 70} +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 21, './i2': 3, './i3': 3}, 'j': {'./j1': 16, './j2': 16, './j3': 16}, 'k': {'./k1': 2}}, permutation={'.': ['./i', './j', './i1', './j1', './k', './i2', './j2', './k1', './i3', './j3']}, vectorization=['./j3'], parallelization=['./i', './j'], gpu_threads=[], gpu_blocks=[], unrolling={'./j3': 16, './i3': 3, './k1': 2}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] diff --git a/tests/filecheck/search/test_matmul_prp.py b/tests/filecheck/search/test_matmul_prp.py index cc6952bc0..fc82bf71e 100644 --- a/tests/filecheck/search/test_matmul_prp.py +++ b/tests/filecheck/search/test_matmul_prp.py @@ -12,10 +12,30 @@ utils.print_all_opt_schedules(backend, strategy) utils.print_exhaustive_samples(backend, strategy, 100) -<<<<<<< HEAD -======= ->>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -# CHECK: File "/home/ruicesista/Documents/xtc/xtc/tests/filecheck/search/test_matmul_prp.py", line 71 -# CHECK-NEXT: >>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -# CHECK-NEXT: ^ -# CHECK-NEXT: SyntaxError: invalid decimal literal +# CHECK: schedule O0: [1, 1] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1}, 'j': {'./j1': 1}, 'k': {}}, permutation={'.': ['./i', './j', './k', './i1', './j1']}, vectorization=['./j1'], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={'./j1': 1, './i1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O1: [1, 1] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1}, 'j': {'./j1': 1}, 'k': {}}, permutation={'.': ['./i', './j', './k', './i1', './j1']}, vectorization=['./j1'], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={'./j1': 1, './i1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O2: [1, 16] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 1}, 'j': {'./j1': 16}, 'k': {}}, permutation={'.': ['./i', './j', './k', './i1', './j1']}, vectorization=['./j1'], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={'./j1': 16, './i1': 1}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: schedule O3: [3, 16] +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 3}, 'j': {'./j1': 16}, 'k': {}}, permutation={'.': ['./i', './j', './k', './i1', './j1']}, vectorization=['./j1'], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={'./j1': 16, './i1': 3}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] +# CHECK-NEXT: sample 0: [1, 1] +# CHECK-NEXT: sample 1: [1, 2] +# CHECK-NEXT: sample 2: [1, 4] +# CHECK-NEXT: sample 3: [1, 8] +# CHECK-NEXT: sample 4: [1, 16] +# CHECK-NEXT: sample 5: [1, 32] +# CHECK-NEXT: sample 6: [3, 1] +# CHECK-NEXT: sample 7: [3, 2] +# CHECK-NEXT: sample 8: [3, 4] +# CHECK-NEXT: sample 9: [3, 8] +# CHECK-NEXT: sample 10: [3, 16] +# CHECK-NEXT: sample 11: [3, 32] +# CHECK-NEXT: sample 12: [7, 1] +# CHECK-NEXT: sample 13: [7, 2] +# CHECK-NEXT: sample 14: [7, 4] +# CHECK-NEXT: sample 15: [7, 8] +# CHECK-NEXT: sample 16: [7, 16] +# CHECK-NEXT: stats {'filtered': 17, 'all': 24} +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 7}, 'j': {'./j1': 16}, 'k': {}}, permutation={'.': ['./i', './j', './k', './i1', './j1']}, vectorization=['./j1'], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={'./j1': 16, './i1': 7}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] diff --git a/tests/filecheck/search/test_matmul_prp_rnd.py b/tests/filecheck/search/test_matmul_prp_rnd.py index 98a05322d..704406fe4 100644 --- a/tests/filecheck/search/test_matmul_prp_rnd.py +++ b/tests/filecheck/search/test_matmul_prp_rnd.py @@ -18,10 +18,25 @@ utils.print_random_samples(backend, strategy, 20) -<<<<<<< HEAD -======= ->>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -# CHECK: File "/home/ruicesista/Documents/xtc/xtc/tests/filecheck/search/test_matmul_prp_rnd.py", line 46 -# CHECK-NEXT: >>>>>>> 59236d6 (mlir: Add 2 primitive for gpu on the scheduler) -# CHECK-NEXT: ^ -# CHECK-NEXT: SyntaxError: invalid decimal literal +# CHECK: sample 0: [21, 2] +# CHECK-NEXT: sample 1: [7, 16] +# CHECK-NEXT: sample 2: [3, 1] +# CHECK-NEXT: sample 3: [3, 4] +# CHECK-NEXT: sample 4: [1, 32] +# CHECK-NEXT: sample 5: [1, 8] +# CHECK-NEXT: sample 6: [1, 1] +# CHECK-NEXT: sample 7: [1, 16] +# CHECK-NEXT: sample 8: [21, 16] +# CHECK-NEXT: sample 9: [7, 32] +# CHECK-NEXT: sample 10: [7, 1] +# CHECK-NEXT: sample 11: [21, 1] +# CHECK-NEXT: sample 12: [7, 8] +# CHECK-NEXT: sample 13: [7, 2] +# CHECK-NEXT: sample 14: [7, 4] +# CHECK-NEXT: sample 15: [21, 4] +# CHECK-NEXT: sample 16: [3, 32] +# CHECK-NEXT: sample 17: [1, 4] +# CHECK-NEXT: sample 18: [3, 2] +# CHECK-NEXT: sample 19: [21, 8] +# CHECK-NEXT: stats {'filtered': 19} +# CHECK-NEXT: [MlirNodeSchedule(node_name='%2_0', node_ident='__xtc_id_%2_0_', dims=['i', 'j'], loop_stamps=[], splits={}, tiles={'i': {}, 'j': {}}, permutation={'.': ['./i', './j']}, vectorization=[], parallelization=[], gpu_threads=[], gpu_blocks=[], unrolling={}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[]), MlirNodeSchedule(node_name='%2', node_ident='__xtc_id_%2_', dims=['i', 'j', 'k'], loop_stamps=[], splits={}, tiles={'i': {'./i1': 21}, 'j': {'./j1': 8}, 'k': {}}, permutation={'.': ['./i', './j', './k', './i1', './j1']}, vectorization=['./j1'], parallelization=['./i', './j'], gpu_threads=[], gpu_blocks=[], unrolling={'./j1': 8, './i1': 21}, packed_buffers={}, memory_mesh={}, processor_mesh={}, distribution={}, distributed_buffers={}, fused=[])] From 3bfd21ca14e7297ffbc85a044619e5dcc170e6e6 Mon Sep 17 00:00:00 2001 From: Rui Cesista Date: Fri, 19 Jun 2026 16:51:43 +0200 Subject: [PATCH 4/5] nvgpu: gpu work now with tensor now --- src/xtc/backends/mlir/MlirCompilerPasses.py | 45 +++- .../test_matmul_mlir_with_tensor.py | 196 ++++++++++++++++++ 2 files changed, 240 insertions(+), 1 deletion(-) create mode 100644 tests/filecheck/backends/target_gpu/test_matmul_mlir_with_tensor.py diff --git a/src/xtc/backends/mlir/MlirCompilerPasses.py b/src/xtc/backends/mlir/MlirCompilerPasses.py index 465cf8f73..9746f74ac 100644 --- a/src/xtc/backends/mlir/MlirCompilerPasses.py +++ b/src/xtc/backends/mlir/MlirCompilerPasses.py @@ -2,6 +2,7 @@ # SPDX-License-Identifier: BSD-3-Clause # Copyright (c) 2024-2026 The XTC Project Authors # + from .MlirLoopNames import parent_name from dataclasses import dataclass from mlir.dialects import transform @@ -137,6 +138,7 @@ def __init__( self._super_vectorize_sequence: NamedSequenceOp | None = None self._post_bufferize_sequence: NamedSequenceOp | None = None self._named_sequence: NamedSequenceOp | None = None + self._gpu_block_order: ArrayAttr | None = None self._nodes_schedules = ( self._mlir_schedule.schedule_impl if self._mlir_schedule is not None else [] ) @@ -578,6 +580,7 @@ def _strip_mine( attr_array["mapping"] = ArrayAttr.get( [self._get_block_id(index) for index in mapping_order] ) + self._gpu_block_order = attr_array["mapping"] attr_array["tile_sizes"] = tiling_vector tiling_command = TileUsingForallOp(sched_state.handle, **attr_array) else: @@ -587,6 +590,8 @@ def _strip_mine( assert len(tiling_command.results) == 2 new_loop = tiling_command.results[-1] sched_state.all_loops[loop_name] = new_loop + if schedule.gpu_blocks: + loop_name = schedule.gpu_blocks[0] # Annotate the resulting loop if successfully generated transform.AnnotateOp(new_loop, loop_name) @@ -769,7 +774,7 @@ def _gpu_mapping( sched_state: SchedulingState, ): tiles_sizes_by_loops = self._generate_tiling_insns(schedule) - if schedule.gpu_blocks: + if schedule.gpu_blocks and not self._using_tensors: new_loop = next( ( sched_state.all_loops[loop_name] @@ -797,6 +802,44 @@ def _gpu_mapping( new_loop, block_dims=block_dims, ) + elif ( + schedule.gpu_blocks + and self._using_tensors + and self._post_bufferize_sequence + and self._gpu_block_order is not None + ): + with ( + InsertionPoint.at_block_begin(self._post_bufferize_sequence.body), + self._mlir_program.mlir_context, + self._loc, + ): + gpu_block_handle = structured_match( + results_=transform.AnyOpType.get(), + target=self._post_bufferize_sequence.bodyTarget, + op_attrs={ + schedule.gpu_blocks[0]: UnitAttr.get(), + "mapping": self._gpu_block_order, + }, + ) + # Since we know there only 1 non zero number + # TODO Find a way to put thread number instead of putting tile size + new_loop = MapForallToBlocks( + gpu_block_handle, + generate_gpu_launch=True, + ).result + if schedule.gpu_threads: + block_dims = [ + max(tiles_sizes_by_loops[loop_name_block]) + // max(tiles_sizes_by_loops[loop_name]) + for loop_name, loop_name_block in zip( + schedule.gpu_threads, schedule.gpu_blocks + ) + ] + block_dims = block_dims + [1] * (3 - len(block_dims)) + MapNestedForallToThreads( + new_loop, + block_dims=block_dims, + ) def find_producer_handles(module: Module, root_handle: str) -> list[str | None]: diff --git a/tests/filecheck/backends/target_gpu/test_matmul_mlir_with_tensor.py b/tests/filecheck/backends/target_gpu/test_matmul_mlir_with_tensor.py new file mode 100644 index 000000000..0858d6577 --- /dev/null +++ b/tests/filecheck/backends/target_gpu/test_matmul_mlir_with_tensor.py @@ -0,0 +1,196 @@ +# RUN: python %s 2>&1 | filecheck %s +# REQUIRES: mlir-target=nvgpu + +import xtc.graphs.xtc.op as O +from xtc.backends.mlir.MlirGraphBackend import MlirGraphBackend as Backend + +from xtc.runtimes.accelerator.gpu import GPUDevice + +# Create device +gpu = GPUDevice() + +I, J, K, dtype = 1024, 1024, 512, "float32" +a = O.tensor((I, K), dtype, name="A") # A lives on the host +b = O.tensor((K, J), dtype, name="B", device=gpu) # B lives on the accelerator + +with O.graph(name="matmul") as gb: + O.matmul(a, b, name="C", device=gpu) # C must live on the accelerator + +graph = gb.graph +print(graph) + +impl = Backend(graph, use_tensor_dialect=True) + +sch = impl.get_scheduler() +sch.tile("i", {"i1": 128, "i2": 32}) +sch.tile("j", {"j1": 128, "j2": 32}) +sch.tile("k", {"k1": 64}) +# sch.unroll({"i2": 2}) +sch.parallelize(["i", "j","i1", "j1"]) +sch.gpu_block(["i", "j"]) +sch.gpu_thread(["i1", "j1"]) +sch.interchange(["i", "j", "i1", "j1","k", "k1", "i2", "j2"]) +sched = sch.schedule() + +comp = impl.get_compiler( + target=gpu, + shared_lib=True, + dump_file="gpu_matmul_mlir_offload_tensor", + print_source_ir=True, + print_transformed_ir=True, + print_bufferization_ir=True, +) +module = comp.compile(sched) +executor = module.get_executor(validate=True) +res = executor.execute() +print(f"CODE: {res}") +# CHECK: // -----// IR Dump Before transform //----- // +# CHECK-NEXT: module attributes {transform.with_named_sequence} { +# CHECK-NEXT: func.func @matmul(%arg0: memref<1024x512xf32> {llvm.noalias}, %arg1: memref<512x1024xf32> {llvm.noalias, memref.on_device}, %arg2: memref<1024x1024xf32> {llvm.noalias, memref.on_device}) { +# CHECK-NEXT: %cst = arith.constant 0.000000e+00 : f32 +# CHECK-NEXT: linalg.fill {__xtc_id_C_0_} ins(%cst : f32) outs(%arg2 : memref<1024x1024xf32>) +# CHECK-NEXT: linalg.matmul {__xtc_id_C_} ins(%arg0, %arg1 : memref<1024x512xf32>, memref<512x1024xf32>) outs(%arg2 : memref<1024x1024xf32>) +# CHECK-NEXT: return +# CHECK-NEXT: } +# CHECK-NEXT: transform.named_sequence @_vecto(%arg0: !transform.any_op {transform.consumed}) { +# CHECK-NEXT: transform.structured.vectorize %arg0 : !transform.any_op +# CHECK-NEXT: transform.yield +# CHECK-NEXT: } +# CHECK-NEXT: transform.named_sequence @__transform_main(%arg0: !transform.any_op {transform.readonly}) { +# CHECK-NEXT: %0 = transform.structured.match attributes {__xtc_id_C_0_} in %arg0 : (!transform.any_op) -> !transform.any_op +# CHECK-NEXT: %tiled_linalg_op, %loops = transform.structured.tile_using_for %0 tile_sizes [1, 0] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: transform.annotate %loops "./i" : !transform.any_op +# CHECK-NEXT: %tiled_linalg_op_0, %loops_1 = transform.structured.tile_using_for %tiled_linalg_op tile_sizes [0, 1] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: transform.annotate %loops_1 "./j" : !transform.any_op +# CHECK-NEXT: %1 = transform.structured.match attributes {__xtc_id_C_} in %arg0 : (!transform.any_op) -> !transform.any_op +# CHECK-NEXT: %tiled_op, %forall_op = transform.structured.tile_using_forall %1 tile_sizes [128, 128, 0](mapping = [#gpu.block, #gpu.block]) : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: transform.annotate %forall_op "./i" : !transform.any_op +# CHECK-NEXT: %tiled_op_2, %forall_op_3 = transform.structured.tile_using_forall %tiled_op tile_sizes [32, 32, 0](mapping = [#gpu.thread, #gpu.thread]) : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: transform.annotate %forall_op_3 "./i1" : !transform.any_op +# CHECK-NEXT: %tiled_linalg_op_4, %loops_5 = transform.structured.tile_using_for %tiled_op_2 tile_sizes [0, 0, 64] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: transform.annotate %loops_5 "./k" : !transform.any_op +# CHECK-NEXT: %tiled_linalg_op_6, %loops_7 = transform.structured.tile_using_for %tiled_linalg_op_4 tile_sizes [0, 0, 1] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: transform.annotate %loops_7 "./k1" : !transform.any_op +# CHECK-NEXT: %tiled_linalg_op_8, %loops_9 = transform.structured.tile_using_for %tiled_linalg_op_6 tile_sizes [1, 0, 0] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: transform.annotate %loops_9 "./i2" : !transform.any_op +# CHECK-NEXT: %tiled_linalg_op_10, %loops_11 = transform.structured.tile_using_for %tiled_linalg_op_8 tile_sizes [0, 1, 0] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: transform.annotate %loops_11 "./j2" : !transform.any_op +# CHECK-NEXT: transform.loop.unroll %loops_9 {factor = 2 : i64} : !transform.any_op +# CHECK-NEXT: %2 = transform.gpu.map_forall_to_blocks %forall_op generate_gpu_launch : (!transform.any_op) -> !transform.any_op +# CHECK-NEXT: %3 = transform.gpu.map_nested_forall_to_threads %2 block_dims = [4, 4, 1] : (!transform.any_op) -> !transform.any_op +# CHECK-NEXT: transform.yield +# CHECK-NEXT: } +# CHECK-NEXT: } +# CHECK-NEXT: +# CHECK-NEXT: // -----// IR Dump After transform //----- // +# CHECK-NEXT: #map = affine_map<(d0) -> (d0 * 128)> +# CHECK-NEXT: #map1 = affine_map<(d0) -> (d0 * 32)> +# CHECK-NEXT: module attributes {transform.with_named_sequence} { +# CHECK-NEXT: func.func @matmul(%arg0: memref<1024x512xf32> {llvm.noalias}, %arg1: memref<512x1024xf32> {llvm.noalias, memref.on_device}, %arg2: memref<1024x1024xf32> {llvm.noalias, memref.on_device}) { +# CHECK-NEXT: %cst = arith.constant 0.000000e+00 : f32 +# CHECK-NEXT: %c0 = arith.constant 0 : index +# CHECK-NEXT: %c1024 = arith.constant 1024 : index +# CHECK-NEXT: %c1 = arith.constant 1 : index +# CHECK-NEXT: scf.for %arg3 = %c0 to %c1024 step %c1 { +# CHECK-NEXT: %subview = memref.subview %arg2[%arg3, 0] [1, 1024] [1, 1] : memref<1024x1024xf32> to memref<1x1024xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %c0_5 = arith.constant 0 : index +# CHECK-NEXT: %c1024_6 = arith.constant 1024 : index +# CHECK-NEXT: %c1_7 = arith.constant 1 : index +# CHECK-NEXT: scf.for %arg4 = %c0_5 to %c1024_6 step %c1_7 { +# CHECK-NEXT: %subview_8 = memref.subview %subview[0, %arg4] [1, 1] [1, 1] : memref<1x1024xf32, strided<[1024, 1], offset: ?>> to memref<1x1xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: linalg.fill {__xtc_id_C_0_} ins(%cst : f32) outs(%subview_8 : memref<1x1xf32, strided<[1024, 1], offset: ?>>) +# CHECK-NEXT: } {"./j"} +# CHECK-NEXT: } {"./i"} +# CHECK-NEXT: %c1_0 = arith.constant 1 : index +# CHECK-NEXT: %c4 = arith.constant 4 : index +# CHECK-NEXT: %c4_1 = arith.constant 4 : index +# CHECK-NEXT: %c1_2 = arith.constant 1 : index +# CHECK-NEXT: %c8 = arith.constant 8 : index +# CHECK-NEXT: %c8_3 = arith.constant 8 : index +# CHECK-NEXT: %c1_4 = arith.constant 1 : index +# CHECK-NEXT: gpu.launch blocks(%arg3, %arg4, %arg5) in (%arg9 = %c8, %arg10 = %c8_3, %arg11 = %c1_4) threads(%arg6, %arg7, %arg8) in (%arg12 = %c4, %arg13 = %c4_1, %arg14 = %c1_2) { +# CHECK-NEXT: %c0_5 = arith.constant 0 : index +# CHECK-NEXT: %c0_6 = arith.constant 0 : index +# CHECK-NEXT: %block_id_x = gpu.block_id x +# CHECK-NEXT: %block_id_y = gpu.block_id y +# CHECK-NEXT: %block_id_z = gpu.block_id z +# CHECK-NEXT: %0 = affine.apply #map(%block_id_x) +# CHECK-NEXT: %1 = affine.apply #map(%block_id_y) +# CHECK-NEXT: %subview = memref.subview %arg0[%0, 0] [128, 512] [1, 1] : memref<1024x512xf32> to memref<128x512xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_7 = memref.subview %arg1[0, %1] [512, 128] [1, 1] : memref<512x1024xf32> to memref<512x128xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %subview_8 = memref.subview %arg2[%0, %1] [128, 128] [1, 1] : memref<1024x1024xf32> to memref<128x128xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %thread_id_x = gpu.thread_id x +# CHECK-NEXT: %thread_id_y = gpu.thread_id y +# CHECK-NEXT: %thread_id_z = gpu.thread_id z +# CHECK-NEXT: %2 = affine.apply #map1(%thread_id_x) +# CHECK-NEXT: %3 = affine.apply #map1(%thread_id_y) +# CHECK-NEXT: %subview_9 = memref.subview %subview[%2, 0] [32, 512] [1, 1] : memref<128x512xf32, strided<[512, 1], offset: ?>> to memref<32x512xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_10 = memref.subview %subview_7[0, %3] [512, 32] [1, 1] : memref<512x128xf32, strided<[1024, 1], offset: ?>> to memref<512x32xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %subview_11 = memref.subview %subview_8[%2, %3] [32, 32] [1, 1] : memref<128x128xf32, strided<[1024, 1], offset: ?>> to memref<32x32xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %c0_12 = arith.constant 0 : index +# CHECK-NEXT: %c512 = arith.constant 512 : index +# CHECK-NEXT: %c64 = arith.constant 64 : index +# CHECK-NEXT: scf.for %arg15 = %c0_12 to %c512 step %c64 { +# CHECK-NEXT: %subview_13 = memref.subview %subview_9[0, %arg15] [32, 64] [1, 1] : memref<32x512xf32, strided<[512, 1], offset: ?>> to memref<32x64xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_14 = memref.subview %subview_10[%arg15, 0] [64, 32] [1, 1] : memref<512x32xf32, strided<[1024, 1], offset: ?>> to memref<64x32xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %subview_15 = memref.subview %subview_11[0, 0] [32, 32] [1, 1] : memref<32x32xf32, strided<[1024, 1], offset: ?>> to memref<32x32xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %c0_16 = arith.constant 0 : index +# CHECK-NEXT: %c64_17 = arith.constant 64 : index +# CHECK-NEXT: %c1_18 = arith.constant 1 : index +# CHECK-NEXT: scf.for %arg16 = %c0_16 to %c64_17 step %c1_18 { +# CHECK-NEXT: %subview_19 = memref.subview %subview_13[0, %arg16] [32, 1] [1, 1] : memref<32x64xf32, strided<[512, 1], offset: ?>> to memref<32x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_20 = memref.subview %subview_14[%arg16, 0] [1, 32] [1, 1] : memref<64x32xf32, strided<[1024, 1], offset: ?>> to memref<1x32xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %subview_21 = memref.subview %subview_15[0, 0] [32, 32] [1, 1] : memref<32x32xf32, strided<[1024, 1], offset: ?>> to memref<32x32xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %c0_22 = arith.constant 0 : index +# CHECK-NEXT: %c32 = arith.constant 32 : index +# CHECK-NEXT: %c1_23 = arith.constant 1 : index +# CHECK-NEXT: %c2 = arith.constant 2 : index +# CHECK-NEXT: scf.for %arg17 = %c0_22 to %c32 step %c2 { +# CHECK-NEXT: %subview_24 = memref.subview %subview_19[%arg17, 0] [1, 1] [1, 1] : memref<32x1xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_25 = memref.subview %subview_20[0, 0] [1, 32] [1, 1] : memref<1x32xf32, strided<[1024, 1], offset: ?>> to memref<1x32xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %subview_26 = memref.subview %subview_21[%arg17, 0] [1, 32] [1, 1] : memref<32x32xf32, strided<[1024, 1], offset: ?>> to memref<1x32xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %c0_27 = arith.constant 0 : index +# CHECK-NEXT: %c32_28 = arith.constant 32 : index +# CHECK-NEXT: %c1_29 = arith.constant 1 : index +# CHECK-NEXT: scf.for %arg18 = %c0_27 to %c32_28 step %c1_29 { +# CHECK-NEXT: %subview_37 = memref.subview %subview_24[0, 0] [1, 1] [1, 1] : memref<1x1xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_38 = memref.subview %subview_25[0, %arg18] [1, 1] [1, 1] : memref<1x32xf32, strided<[1024, 1], offset: ?>> to memref<1x1xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %subview_39 = memref.subview %subview_26[0, %arg18] [1, 1] [1, 1] : memref<1x32xf32, strided<[1024, 1], offset: ?>> to memref<1x1xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: linalg.matmul {__xtc_id_C_} ins(%subview_37, %subview_38 : memref<1x1xf32, strided<[512, 1], offset: ?>>, memref<1x1xf32, strided<[1024, 1], offset: ?>>) outs(%subview_39 : memref<1x1xf32, strided<[1024, 1], offset: ?>>) +# CHECK-NEXT: } {"./j2"} +# CHECK-NEXT: %c1_30 = arith.constant 1 : index +# CHECK-NEXT: %4 = arith.muli %c1_23, %c1_30 : index +# CHECK-NEXT: %5 = arith.addi %arg17, %4 : index +# CHECK-NEXT: %subview_31 = memref.subview %subview_19[%5, 0] [1, 1] [1, 1] : memref<32x1xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_32 = memref.subview %subview_20[0, 0] [1, 32] [1, 1] : memref<1x32xf32, strided<[1024, 1], offset: ?>> to memref<1x32xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %subview_33 = memref.subview %subview_21[%5, 0] [1, 32] [1, 1] : memref<32x32xf32, strided<[1024, 1], offset: ?>> to memref<1x32xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %c0_34 = arith.constant 0 : index +# CHECK-NEXT: %c32_35 = arith.constant 32 : index +# CHECK-NEXT: %c1_36 = arith.constant 1 : index +# CHECK-NEXT: scf.for %arg18 = %c0_34 to %c32_35 step %c1_36 { +# CHECK-NEXT: %subview_37 = memref.subview %subview_31[0, 0] [1, 1] [1, 1] : memref<1x1xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_38 = memref.subview %subview_32[0, %arg18] [1, 1] [1, 1] : memref<1x32xf32, strided<[1024, 1], offset: ?>> to memref<1x1xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %subview_39 = memref.subview %subview_33[0, %arg18] [1, 1] [1, 1] : memref<1x32xf32, strided<[1024, 1], offset: ?>> to memref<1x1xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: linalg.matmul {__xtc_id_C_} ins(%subview_37, %subview_38 : memref<1x1xf32, strided<[512, 1], offset: ?>>, memref<1x1xf32, strided<[1024, 1], offset: ?>>) outs(%subview_39 : memref<1x1xf32, strided<[1024, 1], offset: ?>>) +# CHECK-NEXT: } {"./j2"} +# CHECK-NEXT: } {"./i2"} +# CHECK-NEXT: } {"./k1"} +# CHECK-NEXT: } {"./k"} +# CHECK-NEXT: gpu.barrier +# CHECK-NEXT: gpu.terminator +# CHECK-NEXT: } +# CHECK-NEXT: return +# CHECK-NEXT: } +# CHECK-NEXT: } +# CHECK-NEXT: +# CHECK-NEXT: graph: +# CHECK-NEXT: name: matmul +# CHECK-NEXT: inputs: +# CHECK-NEXT: - %0 : 1024x512xfloat32 +# CHECK-NEXT: - %1 : 512x1024xfloat32 +# CHECK-NEXT: outputs: +# CHECK-NEXT: - %2 : 1024x1024xfloat32 +# CHECK-NEXT: nodes: +# CHECK-NEXT: - %2: matmul(%0, %1) {name = 'C'} : [1024x512xfloat32, 512x1024xfloat32] -> [1024x1024xfloat32] +# CHECK-NEXT: +# CHECK-NEXT: CODE: 0 From 93e70a1003aba21d4dd2c4e8e45c0fdb8e6c07c9 Mon Sep 17 00:00:00 2001 From: Rui Cesista Date: Mon, 22 Jun 2026 13:55:53 +0200 Subject: [PATCH 5/5] Remove mandatory parallel for gpu_block and gpu_thread primitive + modify some test Fix annotation the same with gpu_block --- src/xtc/backends/mlir/MlirCompilerPasses.py | 34 +-- .../mlir/MlirTarget/MlirNVGPUTarget.py | 8 +- src/xtc/itf/schd/scheduler.py | 30 ++- .../test_matmul_mlir_1D_offload_tensor.py | 212 ++++++++++++++++ .../test_matmul_mlir_offload_tensor.py | 139 ++++++----- ...st_matmul_mlir_offload_tensor_vectorise.py | 173 +++++++------ .../test_matmul_mlir_with_tensor.py | 233 ++++++++++++------ .../test_matmul_pmu_counters_gpu.py | 8 +- .../schedules/test_matmul_descript_gpu.py | 172 +++++++------ 9 files changed, 679 insertions(+), 330 deletions(-) create mode 100644 tests/filecheck/backends/target_gpu/test_matmul_mlir_1D_offload_tensor.py diff --git a/src/xtc/backends/mlir/MlirCompilerPasses.py b/src/xtc/backends/mlir/MlirCompilerPasses.py index 9746f74ac..5d6add9b4 100644 --- a/src/xtc/backends/mlir/MlirCompilerPasses.py +++ b/src/xtc/backends/mlir/MlirCompilerPasses.py @@ -2,7 +2,6 @@ # SPDX-License-Identifier: BSD-3-Clause # Copyright (c) 2024-2026 The XTC Project Authors # - from .MlirLoopNames import parent_name from dataclasses import dataclass from mlir.dialects import transform @@ -570,18 +569,20 @@ def _strip_mine( schedule: MlirNodeSchedule, sched_state: SchedulingState, ) -> OpResult: - if loop_name in schedule.parallelization: - attr_array = {} - if loop_name in schedule.gpu_threads: - attr_array["mapping"] = ArrayAttr.get( - [self._get_thread_id(index) for index in mapping_order] - ) - elif loop_name in schedule.gpu_blocks: - attr_array["mapping"] = ArrayAttr.get( - [self._get_block_id(index) for index in mapping_order] - ) - self._gpu_block_order = attr_array["mapping"] - attr_array["tile_sizes"] = tiling_vector + attr_array = {} + attr_array["tile_sizes"] = tiling_vector + if loop_name in schedule.gpu_blocks: + attr_array["mapping"] = ArrayAttr.get( + [self._get_block_id(index) for index in mapping_order] + ) + self._gpu_block_order = attr_array["mapping"] + tiling_command = TileUsingForallOp(sched_state.handle, **attr_array) + elif loop_name in schedule.gpu_threads: + attr_array["mapping"] = ArrayAttr.get( + [self._get_thread_id(index) for index in mapping_order] + ) + tiling_command = TileUsingForallOp(sched_state.handle, **attr_array) + elif loop_name in schedule.parallelization: tiling_command = TileUsingForallOp(sched_state.handle, **attr_array) else: tiling_command = TileUsingForOp(sched_state.handle, sizes=tiling_vector) @@ -590,7 +591,7 @@ def _strip_mine( assert len(tiling_command.results) == 2 new_loop = tiling_command.results[-1] sched_state.all_loops[loop_name] = new_loop - if schedule.gpu_blocks: + if loop_name in schedule.gpu_blocks: loop_name = schedule.gpu_blocks[0] # Annotate the resulting loop if successfully generated transform.AnnotateOp(new_loop, loop_name) @@ -638,11 +639,12 @@ def _post_vectorize(self, sched_state: SchedulingState, schedule: MlirNodeSchedu vector.ApplyTransferPermutationPatternsOp() # the remaining patterns must be applied post-bufferization to work properly - if not self._post_bufferize_sequence: + if not self._post_bufferize_sequence and not schedule.gpu_blocks: with InsertionPoint(transform.ApplyPatternsOp(parent_op).patterns): vector.ApplyLowerOuterProductPatternsOp() vector.ApplyLowerContractionPatternsOp() - else: + # Do not lower vector contract as it can be useful for gpu optimisation + elif self._post_bufferize_sequence and not schedule.gpu_blocks: func_name = self._mlir_program.mlir_module.body.operations[0].attributes[ "sym_name" ] diff --git a/src/xtc/backends/mlir/MlirTarget/MlirNVGPUTarget.py b/src/xtc/backends/mlir/MlirTarget/MlirNVGPUTarget.py index 99651f850..419d0f8fc 100644 --- a/src/xtc/backends/mlir/MlirTarget/MlirNVGPUTarget.py +++ b/src/xtc/backends/mlir/MlirTarget/MlirNVGPUTarget.py @@ -442,17 +442,11 @@ def _lowering_pipeline(self, sm_arch: str, ptx_version: str) -> list[str]: "cse", "sccp", # From complex control to the soup of basic blocks - "expand-strided-metadata", - "scf-forall-to-parallel", - "canonicalize", - "cse", - "func.func(gpu-map-parallel-loops)", - "convert-parallel-loops-to-gpu", "convert-linalg-to-loops", "canonicalize", "cse", "sccp", - "convert-vector-to-llvm", + "convert-vector-to-llvm{vector-contract-lowering=outerproduct}", "buffer-results-to-out-params", "convert-func-to-llvm{use-bare-ptr-memref-call-conv=true}", "gpu-lower-to-nvvm-pipeline{cubin-chip=" diff --git a/src/xtc/itf/schd/scheduler.py b/src/xtc/itf/schd/scheduler.py index dc945c2dd..f68444d1f 100644 --- a/src/xtc/itf/schd/scheduler.py +++ b/src/xtc/itf/schd/scheduler.py @@ -292,19 +292,35 @@ def distributed_buffer_at( @abstractmethod def gpu_thread(self, axes: list[str], root: str = DEFAULT_ROOT) -> None: - """ - Map an axis to a certain gpu thread either x, y or z. - The mapped axis need to be in parallelization. - We can only map 3 dimensions for gpu thread + """Maps iteration axes to GPU thread dimensions. + + The mapping is positional: + - axes[0] -> threadIdx.x + - axes[1] -> threadIdx.y + - axes[2] -> threadIdx.z + At most 3 axes may be provided. If there are less than 3 axes, + only the corresponding block dimensions are assigned. + + Args: + axes: list of maximum 3 element that are maps to the dimension x, y, z respectively + root: the parent split (or the operator's absolute root) """ ... @abstractmethod def gpu_block(self, axes: list[str], root: str = DEFAULT_ROOT) -> None: """ - Map an axis to a certain gpu block either x, y or z. - The mapped axis need to be in parallelization. - We can only map 3 dimensions for gpu block + Maps iteration axes to GPU block dimensions. + The mapping is positional: + - axes[0] -> blockIdx.x + - axes[1] -> blockIdx.y + - axes[2] -> blockIdx.z + At most 3 axes may be provided. If there are less than 3 axes, + only the corresponding block dimensions are assigned. + + Args: + axes: list of maximum 3 element that are maps to the dimension x, y, z respectively + root: the parent split (or the operator's absolute root) """ ... diff --git a/tests/filecheck/backends/target_gpu/test_matmul_mlir_1D_offload_tensor.py b/tests/filecheck/backends/target_gpu/test_matmul_mlir_1D_offload_tensor.py new file mode 100644 index 000000000..8f1169655 --- /dev/null +++ b/tests/filecheck/backends/target_gpu/test_matmul_mlir_1D_offload_tensor.py @@ -0,0 +1,212 @@ +# RUN: python %s 2>&1 | filecheck %s +# REQUIRES: mlir-target=nvgpu + +import xtc.graphs.xtc.op as O +from xtc.backends.mlir.MlirGraphBackend import MlirGraphBackend as Backend + +from xtc.runtimes.accelerator.gpu import GPUDevice + +# Create device +gpu = GPUDevice() + +I, J, K, dtype = 512, 512, 512, "float32" +a = O.tensor((I, K), dtype, name="A") # A lives on the host +b = O.tensor((K, J), dtype, name="B", device=gpu) # B lives on the accelerator + +with O.graph(name="matmul") as gb: + O.matmul(a, b, name="C", device=gpu) # C must live on the accelerator + +graph = gb.graph +print(graph) + +impl = Backend(graph) + +sch = impl.get_scheduler() +sch.tile("i", {"i1": 128, "i2": 32}) +sch.tile("j", {"j1": 128, "j2": 32}) +sch.tile("k", {"k1": 64}) +sch.unroll({"i2": 2}) +sch.gpu_block(["i"]) +sch.gpu_thread(["i1"]) +sch.interchange(["i", "j", "i1", "j1","k", "k1", "i2", "j2"]) +sched = sch.schedule() + +comp = impl.get_compiler( + target=gpu, + shared_lib=True, + dump_file="gpu_matmul_mlir_1D_offload_tensor", + print_source_ir=True, + print_transformed_ir=True, +) +module = comp.compile(sched) +executor = module.get_executor(validate=True) +res = executor.execute() +print(f"CODE: {res}") +# CHECK: // -----// IR Dump Before transform //----- // +# CHECK-NEXT: module attributes {transform.with_named_sequence} { +# CHECK-NEXT: func.func @matmul(%arg0: memref<512x512xf32> {llvm.noalias}, %arg1: memref<512x512xf32> {llvm.noalias, memref.on_device}, %arg2: memref<512x512xf32> {llvm.noalias, memref.on_device}) { +# CHECK-NEXT: %cst = arith.constant 0.000000e+00 : f32 +# CHECK-NEXT: linalg.fill {__xtc_id_C_0_} ins(%cst : f32) outs(%arg2 : memref<512x512xf32>) +# CHECK-NEXT: linalg.matmul {__xtc_id_C_} ins(%arg0, %arg1 : memref<512x512xf32>, memref<512x512xf32>) outs(%arg2 : memref<512x512xf32>) +# CHECK-NEXT: return +# CHECK-NEXT: } +# CHECK-NEXT: transform.named_sequence @_vecto(%arg0: !transform.any_op {transform.consumed}) { +# CHECK-NEXT: transform.structured.vectorize %arg0 : !transform.any_op +# CHECK-NEXT: transform.yield +# CHECK-NEXT: } +# CHECK-NEXT: transform.named_sequence @__transform_main(%arg0: !transform.any_op {transform.readonly}) { +# CHECK-NEXT: %0 = transform.structured.match attributes {__xtc_id_C_0_} in %arg0 : (!transform.any_op) -> !transform.any_op +# CHECK-NEXT: %tiled_linalg_op, %loops = transform.structured.tile_using_for %0 tile_sizes [1, 0] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: transform.annotate %loops "./i" : !transform.any_op +# CHECK-NEXT: %tiled_linalg_op_0, %loops_1 = transform.structured.tile_using_for %tiled_linalg_op tile_sizes [0, 1] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: transform.annotate %loops_1 "./j" : !transform.any_op +# CHECK-NEXT: %1 = transform.structured.match attributes {__xtc_id_C_} in %arg0 : (!transform.any_op) -> !transform.any_op +# CHECK-NEXT: %tiled_op, %forall_op = transform.structured.tile_using_forall %1 tile_sizes [128, 0, 0](mapping = [#gpu.block]) : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: transform.annotate %forall_op "./i" : !transform.any_op +# CHECK-NEXT: %tiled_linalg_op_2, %loops_3 = transform.structured.tile_using_for %tiled_op tile_sizes [0, 128, 0] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: transform.annotate %loops_3 "./j" : !transform.any_op +# CHECK-NEXT: %tiled_op_4, %forall_op_5 = transform.structured.tile_using_forall %tiled_linalg_op_2 tile_sizes [32, 0, 0](mapping = [#gpu.thread]) : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: transform.annotate %forall_op_5 "./i1" : !transform.any_op +# CHECK-NEXT: %tiled_linalg_op_6, %loops_7 = transform.structured.tile_using_for %tiled_op_4 tile_sizes [0, 32, 0] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: transform.annotate %loops_7 "./j1" : !transform.any_op +# CHECK-NEXT: %tiled_linalg_op_8, %loops_9 = transform.structured.tile_using_for %tiled_linalg_op_6 tile_sizes [0, 0, 64] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: transform.annotate %loops_9 "./k" : !transform.any_op +# CHECK-NEXT: %tiled_linalg_op_10, %loops_11 = transform.structured.tile_using_for %tiled_linalg_op_8 tile_sizes [0, 0, 1] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: transform.annotate %loops_11 "./k1" : !transform.any_op +# CHECK-NEXT: %tiled_linalg_op_12, %loops_13 = transform.structured.tile_using_for %tiled_linalg_op_10 tile_sizes [1, 0, 0] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: transform.annotate %loops_13 "./i2" : !transform.any_op +# CHECK-NEXT: %tiled_linalg_op_14, %loops_15 = transform.structured.tile_using_for %tiled_linalg_op_12 tile_sizes [0, 1, 0] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: transform.annotate %loops_15 "./j2" : !transform.any_op +# CHECK-NEXT: transform.loop.unroll %loops_13 {factor = 2 : i64} : !transform.any_op +# CHECK-NEXT: %2 = transform.gpu.map_forall_to_blocks %forall_op generate_gpu_launch : (!transform.any_op) -> !transform.any_op +# CHECK-NEXT: %3 = transform.gpu.map_nested_forall_to_threads %2 block_dims = [4, 1, 1] : (!transform.any_op) -> !transform.any_op +# CHECK-NEXT: transform.yield +# CHECK-NEXT: } +# CHECK-NEXT: } +# CHECK-NEXT: +# CHECK-NEXT: // -----// IR Dump After transform //----- // +# CHECK-NEXT: #map = affine_map<(d0) -> (d0 * 128)> +# CHECK-NEXT: #map1 = affine_map<(d0) -> (d0 * 32)> +# CHECK-NEXT: module attributes {transform.with_named_sequence} { +# CHECK-NEXT: func.func @matmul(%arg0: memref<512x512xf32> {llvm.noalias}, %arg1: memref<512x512xf32> {llvm.noalias, memref.on_device}, %arg2: memref<512x512xf32> {llvm.noalias, memref.on_device}) { +# CHECK-NEXT: %cst = arith.constant 0.000000e+00 : f32 +# CHECK-NEXT: %c0 = arith.constant 0 : index +# CHECK-NEXT: %c512 = arith.constant 512 : index +# CHECK-NEXT: %c1 = arith.constant 1 : index +# CHECK-NEXT: scf.for %arg3 = %c0 to %c512 step %c1 { +# CHECK-NEXT: %subview = memref.subview %arg2[%arg3, 0] [1, 512] [1, 1] : memref<512x512xf32> to memref<1x512xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %c0_6 = arith.constant 0 : index +# CHECK-NEXT: %c512_7 = arith.constant 512 : index +# CHECK-NEXT: %c1_8 = arith.constant 1 : index +# CHECK-NEXT: scf.for %arg4 = %c0_6 to %c512_7 step %c1_8 { +# CHECK-NEXT: %subview_9 = memref.subview %subview[0, %arg4] [1, 1] [1, 1] : memref<1x512xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: linalg.fill {__xtc_id_C_0_} ins(%cst : f32) outs(%subview_9 : memref<1x1xf32, strided<[512, 1], offset: ?>>) +# CHECK-NEXT: } {"./j"} +# CHECK-NEXT: } {"./i"} +# CHECK-NEXT: %c1_0 = arith.constant 1 : index +# CHECK-NEXT: %c4 = arith.constant 4 : index +# CHECK-NEXT: %c1_1 = arith.constant 1 : index +# CHECK-NEXT: %c1_2 = arith.constant 1 : index +# CHECK-NEXT: %c4_3 = arith.constant 4 : index +# CHECK-NEXT: %c1_4 = arith.constant 1 : index +# CHECK-NEXT: %c1_5 = arith.constant 1 : index +# CHECK-NEXT: gpu.launch blocks(%arg3, %arg4, %arg5) in (%arg9 = %c4_3, %arg10 = %c1_4, %arg11 = %c1_5) threads(%arg6, %arg7, %arg8) in (%arg12 = %c4, %arg13 = %c1_1, %arg14 = %c1_2) { +# CHECK-NEXT: %c0_6 = arith.constant 0 : index +# CHECK-NEXT: %c0_7 = arith.constant 0 : index +# CHECK-NEXT: %block_id_x = gpu.block_id x +# CHECK-NEXT: %block_id_y = gpu.block_id y +# CHECK-NEXT: %block_id_z = gpu.block_id z +# CHECK-NEXT: %0 = affine.apply #map(%block_id_x) +# CHECK-NEXT: %subview = memref.subview %arg0[%0, 0] [128, 512] [1, 1] : memref<512x512xf32> to memref<128x512xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_8 = memref.subview %arg1[0, 0] [512, 512] [1, 1] : memref<512x512xf32> to memref<512x512xf32, strided<[512, 1]>> +# CHECK-NEXT: %subview_9 = memref.subview %arg2[%0, 0] [128, 512] [1, 1] : memref<512x512xf32> to memref<128x512xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %c0_10 = arith.constant 0 : index +# CHECK-NEXT: %c512_11 = arith.constant 512 : index +# CHECK-NEXT: %c128 = arith.constant 128 : index +# CHECK-NEXT: scf.for %arg15 = %c0_10 to %c512_11 step %c128 { +# CHECK-NEXT: %subview_12 = memref.subview %subview[0, 0] [128, 512] [1, 1] : memref<128x512xf32, strided<[512, 1], offset: ?>> to memref<128x512xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_13 = memref.subview %subview_8[0, %arg15] [512, 128] [1, 1] : memref<512x512xf32, strided<[512, 1]>> to memref<512x128xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_14 = memref.subview %subview_9[0, %arg15] [128, 128] [1, 1] : memref<128x512xf32, strided<[512, 1], offset: ?>> to memref<128x128xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %thread_id_x = gpu.thread_id x +# CHECK-NEXT: %thread_id_y = gpu.thread_id y +# CHECK-NEXT: %thread_id_z = gpu.thread_id z +# CHECK-NEXT: %1 = affine.apply #map1(%thread_id_x) +# CHECK-NEXT: %subview_15 = memref.subview %subview_12[%1, 0] [32, 512] [1, 1] : memref<128x512xf32, strided<[512, 1], offset: ?>> to memref<32x512xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_16 = memref.subview %subview_13[0, 0] [512, 128] [1, 1] : memref<512x128xf32, strided<[512, 1], offset: ?>> to memref<512x128xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_17 = memref.subview %subview_14[%1, 0] [32, 128] [1, 1] : memref<128x128xf32, strided<[512, 1], offset: ?>> to memref<32x128xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %c0_18 = arith.constant 0 : index +# CHECK-NEXT: %c128_19 = arith.constant 128 : index +# CHECK-NEXT: %c32 = arith.constant 32 : index +# CHECK-NEXT: scf.for %arg16 = %c0_18 to %c128_19 step %c32 { +# CHECK-NEXT: %subview_20 = memref.subview %subview_15[0, 0] [32, 512] [1, 1] : memref<32x512xf32, strided<[512, 1], offset: ?>> to memref<32x512xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_21 = memref.subview %subview_16[0, %arg16] [512, 32] [1, 1] : memref<512x128xf32, strided<[512, 1], offset: ?>> to memref<512x32xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_22 = memref.subview %subview_17[0, %arg16] [32, 32] [1, 1] : memref<32x128xf32, strided<[512, 1], offset: ?>> to memref<32x32xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %c0_23 = arith.constant 0 : index +# CHECK-NEXT: %c512_24 = arith.constant 512 : index +# CHECK-NEXT: %c64 = arith.constant 64 : index +# CHECK-NEXT: scf.for %arg17 = %c0_23 to %c512_24 step %c64 { +# CHECK-NEXT: %subview_25 = memref.subview %subview_20[0, %arg17] [32, 64] [1, 1] : memref<32x512xf32, strided<[512, 1], offset: ?>> to memref<32x64xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_26 = memref.subview %subview_21[%arg17, 0] [64, 32] [1, 1] : memref<512x32xf32, strided<[512, 1], offset: ?>> to memref<64x32xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_27 = memref.subview %subview_22[0, 0] [32, 32] [1, 1] : memref<32x32xf32, strided<[512, 1], offset: ?>> to memref<32x32xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %c0_28 = arith.constant 0 : index +# CHECK-NEXT: %c64_29 = arith.constant 64 : index +# CHECK-NEXT: %c1_30 = arith.constant 1 : index +# CHECK-NEXT: scf.for %arg18 = %c0_28 to %c64_29 step %c1_30 { +# CHECK-NEXT: %subview_31 = memref.subview %subview_25[0, %arg18] [32, 1] [1, 1] : memref<32x64xf32, strided<[512, 1], offset: ?>> to memref<32x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_32 = memref.subview %subview_26[%arg18, 0] [1, 32] [1, 1] : memref<64x32xf32, strided<[512, 1], offset: ?>> to memref<1x32xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_33 = memref.subview %subview_27[0, 0] [32, 32] [1, 1] : memref<32x32xf32, strided<[512, 1], offset: ?>> to memref<32x32xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %c0_34 = arith.constant 0 : index +# CHECK-NEXT: %c32_35 = arith.constant 32 : index +# CHECK-NEXT: %c1_36 = arith.constant 1 : index +# CHECK-NEXT: %c2 = arith.constant 2 : index +# CHECK-NEXT: scf.for %arg19 = %c0_34 to %c32_35 step %c2 { +# CHECK-NEXT: %subview_37 = memref.subview %subview_31[%arg19, 0] [1, 1] [1, 1] : memref<32x1xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_38 = memref.subview %subview_32[0, 0] [1, 32] [1, 1] : memref<1x32xf32, strided<[512, 1], offset: ?>> to memref<1x32xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_39 = memref.subview %subview_33[%arg19, 0] [1, 32] [1, 1] : memref<32x32xf32, strided<[512, 1], offset: ?>> to memref<1x32xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %c0_40 = arith.constant 0 : index +# CHECK-NEXT: %c32_41 = arith.constant 32 : index +# CHECK-NEXT: %c1_42 = arith.constant 1 : index +# CHECK-NEXT: scf.for %arg20 = %c0_40 to %c32_41 step %c1_42 { +# CHECK-NEXT: %subview_50 = memref.subview %subview_37[0, 0] [1, 1] [1, 1] : memref<1x1xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_51 = memref.subview %subview_38[0, %arg20] [1, 1] [1, 1] : memref<1x32xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_52 = memref.subview %subview_39[0, %arg20] [1, 1] [1, 1] : memref<1x32xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: linalg.matmul {__xtc_id_C_} ins(%subview_50, %subview_51 : memref<1x1xf32, strided<[512, 1], offset: ?>>, memref<1x1xf32, strided<[512, 1], offset: ?>>) outs(%subview_52 : memref<1x1xf32, strided<[512, 1], offset: ?>>) +# CHECK-NEXT: } {"./j2"} +# CHECK-NEXT: %c1_43 = arith.constant 1 : index +# CHECK-NEXT: %2 = arith.muli %c1_36, %c1_43 : index +# CHECK-NEXT: %3 = arith.addi %arg19, %2 : index +# CHECK-NEXT: %subview_44 = memref.subview %subview_31[%3, 0] [1, 1] [1, 1] : memref<32x1xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_45 = memref.subview %subview_32[0, 0] [1, 32] [1, 1] : memref<1x32xf32, strided<[512, 1], offset: ?>> to memref<1x32xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_46 = memref.subview %subview_33[%3, 0] [1, 32] [1, 1] : memref<32x32xf32, strided<[512, 1], offset: ?>> to memref<1x32xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %c0_47 = arith.constant 0 : index +# CHECK-NEXT: %c32_48 = arith.constant 32 : index +# CHECK-NEXT: %c1_49 = arith.constant 1 : index +# CHECK-NEXT: scf.for %arg20 = %c0_47 to %c32_48 step %c1_49 { +# CHECK-NEXT: %subview_50 = memref.subview %subview_44[0, 0] [1, 1] [1, 1] : memref<1x1xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_51 = memref.subview %subview_45[0, %arg20] [1, 1] [1, 1] : memref<1x32xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_52 = memref.subview %subview_46[0, %arg20] [1, 1] [1, 1] : memref<1x32xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: linalg.matmul {__xtc_id_C_} ins(%subview_50, %subview_51 : memref<1x1xf32, strided<[512, 1], offset: ?>>, memref<1x1xf32, strided<[512, 1], offset: ?>>) outs(%subview_52 : memref<1x1xf32, strided<[512, 1], offset: ?>>) +# CHECK-NEXT: } {"./j2"} +# CHECK-NEXT: } {"./i2"} +# CHECK-NEXT: } {"./k1"} +# CHECK-NEXT: } {"./k"} +# CHECK-NEXT: } {"./j1"} +# CHECK-NEXT: gpu.barrier +# CHECK-NEXT: } {"./j"} +# CHECK-NEXT: gpu.terminator +# CHECK-NEXT: } +# CHECK-NEXT: return +# CHECK-NEXT: } +# CHECK-NEXT: } +# CHECK-NEXT: +# CHECK-NEXT: graph: +# CHECK-NEXT: name: matmul +# CHECK-NEXT: inputs: +# CHECK-NEXT: - %0 : 512x512xfloat32 +# CHECK-NEXT: - %1 : 512x512xfloat32 +# CHECK-NEXT: outputs: +# CHECK-NEXT: - %2 : 512x512xfloat32 +# CHECK-NEXT: nodes: +# CHECK-NEXT: - %2: matmul(%0, %1) {name = 'C'} : [512x512xfloat32, 512x512xfloat32] -> [512x512xfloat32] +# CHECK-NEXT: +# CHECK-NEXT: CODE: 0 diff --git a/tests/filecheck/backends/target_gpu/test_matmul_mlir_offload_tensor.py b/tests/filecheck/backends/target_gpu/test_matmul_mlir_offload_tensor.py index 2a02e1317..6138d3a69 100644 --- a/tests/filecheck/backends/target_gpu/test_matmul_mlir_offload_tensor.py +++ b/tests/filecheck/backends/target_gpu/test_matmul_mlir_offload_tensor.py @@ -9,7 +9,7 @@ # Create device gpu = GPUDevice() -I, J, K, dtype = 1024, 1024, 512, "float32" +I, J, K, dtype = 512, 512, 512, "float32" a = O.tensor((I, K), dtype, name="A") # A lives on the host b = O.tensor((K, J), dtype, name="B", device=gpu) # B lives on the accelerator @@ -26,7 +26,6 @@ sch.tile("j", {"j1": 128, "j2": 32}) sch.tile("k", {"k1": 64}) sch.unroll({"i2": 2}) -sch.parallelize(["i", "j","i1", "j1"]) sch.gpu_block(["i", "j"]) sch.gpu_thread(["i1", "j1"]) sch.interchange(["i", "j", "i1", "j1","k", "k1", "i2", "j2"]) @@ -45,10 +44,10 @@ print(f"CODE: {res}") # CHECK: // -----// IR Dump Before transform //----- // # CHECK-NEXT: module attributes {transform.with_named_sequence} { -# CHECK-NEXT: func.func @matmul(%arg0: memref<1024x512xf32> {llvm.noalias}, %arg1: memref<512x1024xf32> {llvm.noalias, memref.on_device}, %arg2: memref<1024x1024xf32> {llvm.noalias, memref.on_device}) { +# CHECK-NEXT: func.func @matmul(%arg0: memref<512x512xf32> {llvm.noalias}, %arg1: memref<512x512xf32> {llvm.noalias, memref.on_device}, %arg2: memref<512x512xf32> {llvm.noalias, memref.on_device}) { # CHECK-NEXT: %cst = arith.constant 0.000000e+00 : f32 -# CHECK-NEXT: linalg.fill {__xtc_id_C_0_} ins(%cst : f32) outs(%arg2 : memref<1024x1024xf32>) -# CHECK-NEXT: linalg.matmul {__xtc_id_C_} ins(%arg0, %arg1 : memref<1024x512xf32>, memref<512x1024xf32>) outs(%arg2 : memref<1024x1024xf32>) +# CHECK-NEXT: linalg.fill {__xtc_id_C_0_} ins(%cst : f32) outs(%arg2 : memref<512x512xf32>) +# CHECK-NEXT: linalg.matmul {__xtc_id_C_} ins(%arg0, %arg1 : memref<512x512xf32>, memref<512x512xf32>) outs(%arg2 : memref<512x512xf32>) # CHECK-NEXT: return # CHECK-NEXT: } # CHECK-NEXT: transform.named_sequence @_vecto(%arg0: !transform.any_op {transform.consumed}) { @@ -85,92 +84,92 @@ # CHECK-NEXT: #map = affine_map<(d0) -> (d0 * 128)> # CHECK-NEXT: #map1 = affine_map<(d0) -> (d0 * 32)> # CHECK-NEXT: module attributes {transform.with_named_sequence} { -# CHECK-NEXT: func.func @matmul(%arg0: memref<1024x512xf32> {llvm.noalias}, %arg1: memref<512x1024xf32> {llvm.noalias, memref.on_device}, %arg2: memref<1024x1024xf32> {llvm.noalias, memref.on_device}) { +# CHECK-NEXT: func.func @matmul(%arg0: memref<512x512xf32> {llvm.noalias}, %arg1: memref<512x512xf32> {llvm.noalias, memref.on_device}, %arg2: memref<512x512xf32> {llvm.noalias, memref.on_device}) { # CHECK-NEXT: %cst = arith.constant 0.000000e+00 : f32 # CHECK-NEXT: %c0 = arith.constant 0 : index -# CHECK-NEXT: %c1024 = arith.constant 1024 : index +# CHECK-NEXT: %c512 = arith.constant 512 : index # CHECK-NEXT: %c1 = arith.constant 1 : index -# CHECK-NEXT: scf.for %arg3 = %c0 to %c1024 step %c1 { -# CHECK-NEXT: %subview = memref.subview %arg2[%arg3, 0] [1, 1024] [1, 1] : memref<1024x1024xf32> to memref<1x1024xf32, strided<[1024, 1], offset: ?>> -# CHECK-NEXT: %c0_5 = arith.constant 0 : index -# CHECK-NEXT: %c1024_6 = arith.constant 1024 : index -# CHECK-NEXT: %c1_7 = arith.constant 1 : index -# CHECK-NEXT: scf.for %arg4 = %c0_5 to %c1024_6 step %c1_7 { -# CHECK-NEXT: %subview_8 = memref.subview %subview[0, %arg4] [1, 1] [1, 1] : memref<1x1024xf32, strided<[1024, 1], offset: ?>> to memref<1x1xf32, strided<[1024, 1], offset: ?>> -# CHECK-NEXT: linalg.fill {__xtc_id_C_0_} ins(%cst : f32) outs(%subview_8 : memref<1x1xf32, strided<[1024, 1], offset: ?>>) +# CHECK-NEXT: scf.for %arg3 = %c0 to %c512 step %c1 { +# CHECK-NEXT: %subview = memref.subview %arg2[%arg3, 0] [1, 512] [1, 1] : memref<512x512xf32> to memref<1x512xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %c0_6 = arith.constant 0 : index +# CHECK-NEXT: %c512_7 = arith.constant 512 : index +# CHECK-NEXT: %c1_8 = arith.constant 1 : index +# CHECK-NEXT: scf.for %arg4 = %c0_6 to %c512_7 step %c1_8 { +# CHECK-NEXT: %subview_9 = memref.subview %subview[0, %arg4] [1, 1] [1, 1] : memref<1x512xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: linalg.fill {__xtc_id_C_0_} ins(%cst : f32) outs(%subview_9 : memref<1x1xf32, strided<[512, 1], offset: ?>>) # CHECK-NEXT: } {"./j"} # CHECK-NEXT: } {"./i"} # CHECK-NEXT: %c1_0 = arith.constant 1 : index # CHECK-NEXT: %c4 = arith.constant 4 : index # CHECK-NEXT: %c4_1 = arith.constant 4 : index # CHECK-NEXT: %c1_2 = arith.constant 1 : index -# CHECK-NEXT: %c8 = arith.constant 8 : index -# CHECK-NEXT: %c8_3 = arith.constant 8 : index -# CHECK-NEXT: %c1_4 = arith.constant 1 : index -# CHECK-NEXT: gpu.launch blocks(%arg3, %arg4, %arg5) in (%arg9 = %c8, %arg10 = %c8_3, %arg11 = %c1_4) threads(%arg6, %arg7, %arg8) in (%arg12 = %c4, %arg13 = %c4_1, %arg14 = %c1_2) { -# CHECK-NEXT: %c0_5 = arith.constant 0 : index +# CHECK-NEXT: %c4_3 = arith.constant 4 : index +# CHECK-NEXT: %c4_4 = arith.constant 4 : index +# CHECK-NEXT: %c1_5 = arith.constant 1 : index +# CHECK-NEXT: gpu.launch blocks(%arg3, %arg4, %arg5) in (%arg9 = %c4_3, %arg10 = %c4_4, %arg11 = %c1_5) threads(%arg6, %arg7, %arg8) in (%arg12 = %c4, %arg13 = %c4_1, %arg14 = %c1_2) { # CHECK-NEXT: %c0_6 = arith.constant 0 : index +# CHECK-NEXT: %c0_7 = arith.constant 0 : index # CHECK-NEXT: %block_id_x = gpu.block_id x # CHECK-NEXT: %block_id_y = gpu.block_id y # CHECK-NEXT: %block_id_z = gpu.block_id z # CHECK-NEXT: %0 = affine.apply #map(%block_id_x) # CHECK-NEXT: %1 = affine.apply #map(%block_id_y) -# CHECK-NEXT: %subview = memref.subview %arg0[%0, 0] [128, 512] [1, 1] : memref<1024x512xf32> to memref<128x512xf32, strided<[512, 1], offset: ?>> -# CHECK-NEXT: %subview_7 = memref.subview %arg1[0, %1] [512, 128] [1, 1] : memref<512x1024xf32> to memref<512x128xf32, strided<[1024, 1], offset: ?>> -# CHECK-NEXT: %subview_8 = memref.subview %arg2[%0, %1] [128, 128] [1, 1] : memref<1024x1024xf32> to memref<128x128xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %subview = memref.subview %arg0[%0, 0] [128, 512] [1, 1] : memref<512x512xf32> to memref<128x512xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_8 = memref.subview %arg1[0, %1] [512, 128] [1, 1] : memref<512x512xf32> to memref<512x128xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_9 = memref.subview %arg2[%0, %1] [128, 128] [1, 1] : memref<512x512xf32> to memref<128x128xf32, strided<[512, 1], offset: ?>> # CHECK-NEXT: %thread_id_x = gpu.thread_id x # CHECK-NEXT: %thread_id_y = gpu.thread_id y # CHECK-NEXT: %thread_id_z = gpu.thread_id z # CHECK-NEXT: %2 = affine.apply #map1(%thread_id_x) # CHECK-NEXT: %3 = affine.apply #map1(%thread_id_y) -# CHECK-NEXT: %subview_9 = memref.subview %subview[%2, 0] [32, 512] [1, 1] : memref<128x512xf32, strided<[512, 1], offset: ?>> to memref<32x512xf32, strided<[512, 1], offset: ?>> -# CHECK-NEXT: %subview_10 = memref.subview %subview_7[0, %3] [512, 32] [1, 1] : memref<512x128xf32, strided<[1024, 1], offset: ?>> to memref<512x32xf32, strided<[1024, 1], offset: ?>> -# CHECK-NEXT: %subview_11 = memref.subview %subview_8[%2, %3] [32, 32] [1, 1] : memref<128x128xf32, strided<[1024, 1], offset: ?>> to memref<32x32xf32, strided<[1024, 1], offset: ?>> -# CHECK-NEXT: %c0_12 = arith.constant 0 : index -# CHECK-NEXT: %c512 = arith.constant 512 : index +# CHECK-NEXT: %subview_10 = memref.subview %subview[%2, 0] [32, 512] [1, 1] : memref<128x512xf32, strided<[512, 1], offset: ?>> to memref<32x512xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_11 = memref.subview %subview_8[0, %3] [512, 32] [1, 1] : memref<512x128xf32, strided<[512, 1], offset: ?>> to memref<512x32xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_12 = memref.subview %subview_9[%2, %3] [32, 32] [1, 1] : memref<128x128xf32, strided<[512, 1], offset: ?>> to memref<32x32xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %c0_13 = arith.constant 0 : index +# CHECK-NEXT: %c512_14 = arith.constant 512 : index # CHECK-NEXT: %c64 = arith.constant 64 : index -# CHECK-NEXT: scf.for %arg15 = %c0_12 to %c512 step %c64 { -# CHECK-NEXT: %subview_13 = memref.subview %subview_9[0, %arg15] [32, 64] [1, 1] : memref<32x512xf32, strided<[512, 1], offset: ?>> to memref<32x64xf32, strided<[512, 1], offset: ?>> -# CHECK-NEXT: %subview_14 = memref.subview %subview_10[%arg15, 0] [64, 32] [1, 1] : memref<512x32xf32, strided<[1024, 1], offset: ?>> to memref<64x32xf32, strided<[1024, 1], offset: ?>> -# CHECK-NEXT: %subview_15 = memref.subview %subview_11[0, 0] [32, 32] [1, 1] : memref<32x32xf32, strided<[1024, 1], offset: ?>> to memref<32x32xf32, strided<[1024, 1], offset: ?>> -# CHECK-NEXT: %c0_16 = arith.constant 0 : index -# CHECK-NEXT: %c64_17 = arith.constant 64 : index -# CHECK-NEXT: %c1_18 = arith.constant 1 : index -# CHECK-NEXT: scf.for %arg16 = %c0_16 to %c64_17 step %c1_18 { -# CHECK-NEXT: %subview_19 = memref.subview %subview_13[0, %arg16] [32, 1] [1, 1] : memref<32x64xf32, strided<[512, 1], offset: ?>> to memref<32x1xf32, strided<[512, 1], offset: ?>> -# CHECK-NEXT: %subview_20 = memref.subview %subview_14[%arg16, 0] [1, 32] [1, 1] : memref<64x32xf32, strided<[1024, 1], offset: ?>> to memref<1x32xf32, strided<[1024, 1], offset: ?>> -# CHECK-NEXT: %subview_21 = memref.subview %subview_15[0, 0] [32, 32] [1, 1] : memref<32x32xf32, strided<[1024, 1], offset: ?>> to memref<32x32xf32, strided<[1024, 1], offset: ?>> -# CHECK-NEXT: %c0_22 = arith.constant 0 : index +# CHECK-NEXT: scf.for %arg15 = %c0_13 to %c512_14 step %c64 { +# CHECK-NEXT: %subview_15 = memref.subview %subview_10[0, %arg15] [32, 64] [1, 1] : memref<32x512xf32, strided<[512, 1], offset: ?>> to memref<32x64xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_16 = memref.subview %subview_11[%arg15, 0] [64, 32] [1, 1] : memref<512x32xf32, strided<[512, 1], offset: ?>> to memref<64x32xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_17 = memref.subview %subview_12[0, 0] [32, 32] [1, 1] : memref<32x32xf32, strided<[512, 1], offset: ?>> to memref<32x32xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %c0_18 = arith.constant 0 : index +# CHECK-NEXT: %c64_19 = arith.constant 64 : index +# CHECK-NEXT: %c1_20 = arith.constant 1 : index +# CHECK-NEXT: scf.for %arg16 = %c0_18 to %c64_19 step %c1_20 { +# CHECK-NEXT: %subview_21 = memref.subview %subview_15[0, %arg16] [32, 1] [1, 1] : memref<32x64xf32, strided<[512, 1], offset: ?>> to memref<32x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_22 = memref.subview %subview_16[%arg16, 0] [1, 32] [1, 1] : memref<64x32xf32, strided<[512, 1], offset: ?>> to memref<1x32xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_23 = memref.subview %subview_17[0, 0] [32, 32] [1, 1] : memref<32x32xf32, strided<[512, 1], offset: ?>> to memref<32x32xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %c0_24 = arith.constant 0 : index # CHECK-NEXT: %c32 = arith.constant 32 : index -# CHECK-NEXT: %c1_23 = arith.constant 1 : index +# CHECK-NEXT: %c1_25 = arith.constant 1 : index # CHECK-NEXT: %c2 = arith.constant 2 : index -# CHECK-NEXT: scf.for %arg17 = %c0_22 to %c32 step %c2 { -# CHECK-NEXT: %subview_24 = memref.subview %subview_19[%arg17, 0] [1, 1] [1, 1] : memref<32x1xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> -# CHECK-NEXT: %subview_25 = memref.subview %subview_20[0, 0] [1, 32] [1, 1] : memref<1x32xf32, strided<[1024, 1], offset: ?>> to memref<1x32xf32, strided<[1024, 1], offset: ?>> -# CHECK-NEXT: %subview_26 = memref.subview %subview_21[%arg17, 0] [1, 32] [1, 1] : memref<32x32xf32, strided<[1024, 1], offset: ?>> to memref<1x32xf32, strided<[1024, 1], offset: ?>> -# CHECK-NEXT: %c0_27 = arith.constant 0 : index -# CHECK-NEXT: %c32_28 = arith.constant 32 : index -# CHECK-NEXT: %c1_29 = arith.constant 1 : index -# CHECK-NEXT: scf.for %arg18 = %c0_27 to %c32_28 step %c1_29 { -# CHECK-NEXT: %subview_37 = memref.subview %subview_24[0, 0] [1, 1] [1, 1] : memref<1x1xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> -# CHECK-NEXT: %subview_38 = memref.subview %subview_25[0, %arg18] [1, 1] [1, 1] : memref<1x32xf32, strided<[1024, 1], offset: ?>> to memref<1x1xf32, strided<[1024, 1], offset: ?>> -# CHECK-NEXT: %subview_39 = memref.subview %subview_26[0, %arg18] [1, 1] [1, 1] : memref<1x32xf32, strided<[1024, 1], offset: ?>> to memref<1x1xf32, strided<[1024, 1], offset: ?>> -# CHECK-NEXT: linalg.matmul {__xtc_id_C_} ins(%subview_37, %subview_38 : memref<1x1xf32, strided<[512, 1], offset: ?>>, memref<1x1xf32, strided<[1024, 1], offset: ?>>) outs(%subview_39 : memref<1x1xf32, strided<[1024, 1], offset: ?>>) +# CHECK-NEXT: scf.for %arg17 = %c0_24 to %c32 step %c2 { +# CHECK-NEXT: %subview_26 = memref.subview %subview_21[%arg17, 0] [1, 1] [1, 1] : memref<32x1xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_27 = memref.subview %subview_22[0, 0] [1, 32] [1, 1] : memref<1x32xf32, strided<[512, 1], offset: ?>> to memref<1x32xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_28 = memref.subview %subview_23[%arg17, 0] [1, 32] [1, 1] : memref<32x32xf32, strided<[512, 1], offset: ?>> to memref<1x32xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %c0_29 = arith.constant 0 : index +# CHECK-NEXT: %c32_30 = arith.constant 32 : index +# CHECK-NEXT: %c1_31 = arith.constant 1 : index +# CHECK-NEXT: scf.for %arg18 = %c0_29 to %c32_30 step %c1_31 { +# CHECK-NEXT: %subview_39 = memref.subview %subview_26[0, 0] [1, 1] [1, 1] : memref<1x1xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_40 = memref.subview %subview_27[0, %arg18] [1, 1] [1, 1] : memref<1x32xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_41 = memref.subview %subview_28[0, %arg18] [1, 1] [1, 1] : memref<1x32xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: linalg.matmul {__xtc_id_C_} ins(%subview_39, %subview_40 : memref<1x1xf32, strided<[512, 1], offset: ?>>, memref<1x1xf32, strided<[512, 1], offset: ?>>) outs(%subview_41 : memref<1x1xf32, strided<[512, 1], offset: ?>>) # CHECK-NEXT: } {"./j2"} -# CHECK-NEXT: %c1_30 = arith.constant 1 : index -# CHECK-NEXT: %4 = arith.muli %c1_23, %c1_30 : index +# CHECK-NEXT: %c1_32 = arith.constant 1 : index +# CHECK-NEXT: %4 = arith.muli %c1_25, %c1_32 : index # CHECK-NEXT: %5 = arith.addi %arg17, %4 : index -# CHECK-NEXT: %subview_31 = memref.subview %subview_19[%5, 0] [1, 1] [1, 1] : memref<32x1xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> -# CHECK-NEXT: %subview_32 = memref.subview %subview_20[0, 0] [1, 32] [1, 1] : memref<1x32xf32, strided<[1024, 1], offset: ?>> to memref<1x32xf32, strided<[1024, 1], offset: ?>> -# CHECK-NEXT: %subview_33 = memref.subview %subview_21[%5, 0] [1, 32] [1, 1] : memref<32x32xf32, strided<[1024, 1], offset: ?>> to memref<1x32xf32, strided<[1024, 1], offset: ?>> -# CHECK-NEXT: %c0_34 = arith.constant 0 : index -# CHECK-NEXT: %c32_35 = arith.constant 32 : index -# CHECK-NEXT: %c1_36 = arith.constant 1 : index -# CHECK-NEXT: scf.for %arg18 = %c0_34 to %c32_35 step %c1_36 { -# CHECK-NEXT: %subview_37 = memref.subview %subview_31[0, 0] [1, 1] [1, 1] : memref<1x1xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> -# CHECK-NEXT: %subview_38 = memref.subview %subview_32[0, %arg18] [1, 1] [1, 1] : memref<1x32xf32, strided<[1024, 1], offset: ?>> to memref<1x1xf32, strided<[1024, 1], offset: ?>> -# CHECK-NEXT: %subview_39 = memref.subview %subview_33[0, %arg18] [1, 1] [1, 1] : memref<1x32xf32, strided<[1024, 1], offset: ?>> to memref<1x1xf32, strided<[1024, 1], offset: ?>> -# CHECK-NEXT: linalg.matmul {__xtc_id_C_} ins(%subview_37, %subview_38 : memref<1x1xf32, strided<[512, 1], offset: ?>>, memref<1x1xf32, strided<[1024, 1], offset: ?>>) outs(%subview_39 : memref<1x1xf32, strided<[1024, 1], offset: ?>>) +# CHECK-NEXT: %subview_33 = memref.subview %subview_21[%5, 0] [1, 1] [1, 1] : memref<32x1xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_34 = memref.subview %subview_22[0, 0] [1, 32] [1, 1] : memref<1x32xf32, strided<[512, 1], offset: ?>> to memref<1x32xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_35 = memref.subview %subview_23[%5, 0] [1, 32] [1, 1] : memref<32x32xf32, strided<[512, 1], offset: ?>> to memref<1x32xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %c0_36 = arith.constant 0 : index +# CHECK-NEXT: %c32_37 = arith.constant 32 : index +# CHECK-NEXT: %c1_38 = arith.constant 1 : index +# CHECK-NEXT: scf.for %arg18 = %c0_36 to %c32_37 step %c1_38 { +# CHECK-NEXT: %subview_39 = memref.subview %subview_33[0, 0] [1, 1] [1, 1] : memref<1x1xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_40 = memref.subview %subview_34[0, %arg18] [1, 1] [1, 1] : memref<1x32xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_41 = memref.subview %subview_35[0, %arg18] [1, 1] [1, 1] : memref<1x32xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: linalg.matmul {__xtc_id_C_} ins(%subview_39, %subview_40 : memref<1x1xf32, strided<[512, 1], offset: ?>>, memref<1x1xf32, strided<[512, 1], offset: ?>>) outs(%subview_41 : memref<1x1xf32, strided<[512, 1], offset: ?>>) # CHECK-NEXT: } {"./j2"} # CHECK-NEXT: } {"./i2"} # CHECK-NEXT: } {"./k1"} @@ -185,11 +184,11 @@ # CHECK-NEXT: graph: # CHECK-NEXT: name: matmul # CHECK-NEXT: inputs: -# CHECK-NEXT: - %0 : 1024x512xfloat32 -# CHECK-NEXT: - %1 : 512x1024xfloat32 +# CHECK-NEXT: - %0 : 512x512xfloat32 +# CHECK-NEXT: - %1 : 512x512xfloat32 # CHECK-NEXT: outputs: -# CHECK-NEXT: - %2 : 1024x1024xfloat32 +# CHECK-NEXT: - %2 : 512x512xfloat32 # CHECK-NEXT: nodes: -# CHECK-NEXT: - %2: matmul(%0, %1) {name = 'C'} : [1024x512xfloat32, 512x1024xfloat32] -> [1024x1024xfloat32] +# CHECK-NEXT: - %2: matmul(%0, %1) {name = 'C'} : [512x512xfloat32, 512x512xfloat32] -> [512x512xfloat32] # CHECK-NEXT: # CHECK-NEXT: CODE: 0 diff --git a/tests/filecheck/backends/target_gpu/test_matmul_mlir_offload_tensor_vectorise.py b/tests/filecheck/backends/target_gpu/test_matmul_mlir_offload_tensor_vectorise.py index 0194b7262..2fcd2d325 100644 --- a/tests/filecheck/backends/target_gpu/test_matmul_mlir_offload_tensor_vectorise.py +++ b/tests/filecheck/backends/target_gpu/test_matmul_mlir_offload_tensor_vectorise.py @@ -9,7 +9,7 @@ # Create device gpu = GPUDevice() -I, J, K, dtype = 4, 32, 512, "float32" +I, J, K, dtype = 512, 512, 512, "float32" a = O.tensor((I, K), dtype, name="A") # A lives on the host b = O.tensor((K, J), dtype, name="B", device=gpu) # B lives on the accelerator @@ -22,11 +22,15 @@ impl = Backend(graph) sch = impl.get_scheduler() -sch.tile("i", {"i1": 2}) -sch.tile("j", {"j1": 16}) -sch.unroll({"i1": 2}) -sch.vectorize(["j1"]) -sch.parallelize(["i"]) +sch.tile("i", {"i1": 128, "i2": 32}) +sch.tile("j", {"j1": 128, "j2": 32}) +sch.tile("k", {"k1": 64}) +sch.unroll({"i2": 2}) +sch.gpu_block(["i", "j"]) +sch.gpu_thread(["i1", "j1"]) +sch.interchange(["i", "j", "i1", "j1","k", "k1", "i2", "j2"]) +sched = sch.schedule() +sch.vectorize(["j2"]) sched = sch.schedule() comp = impl.get_compiler( @@ -42,10 +46,10 @@ print(f"CODE: {res}") # CHECK: // -----// IR Dump Before transform //----- // # CHECK-NEXT: module attributes {transform.with_named_sequence} { -# CHECK-NEXT: func.func @matmul(%arg0: memref<4x512xf32> {llvm.noalias}, %arg1: memref<512x32xf32> {llvm.noalias, memref.on_device}, %arg2: memref<4x32xf32> {llvm.noalias, memref.on_device}) { +# CHECK-NEXT: func.func @matmul(%arg0: memref<512x512xf32> {llvm.noalias}, %arg1: memref<512x512xf32> {llvm.noalias, memref.on_device}, %arg2: memref<512x512xf32> {llvm.noalias, memref.on_device}) { # CHECK-NEXT: %cst = arith.constant 0.000000e+00 : f32 -# CHECK-NEXT: linalg.fill {__xtc_id_C_0_} ins(%cst : f32) outs(%arg2 : memref<4x32xf32>) -# CHECK-NEXT: linalg.matmul {__xtc_id_C_} ins(%arg0, %arg1 : memref<4x512xf32>, memref<512x32xf32>) outs(%arg2 : memref<4x32xf32>) +# CHECK-NEXT: linalg.fill {__xtc_id_C_0_} ins(%cst : f32) outs(%arg2 : memref<512x512xf32>) +# CHECK-NEXT: linalg.matmul {__xtc_id_C_} ins(%arg0, %arg1 : memref<512x512xf32>, memref<512x512xf32>) outs(%arg2 : memref<512x512xf32>) # CHECK-NEXT: return # CHECK-NEXT: } # CHECK-NEXT: transform.named_sequence @_vecto(%arg0: !transform.any_op {transform.consumed}) { @@ -59,87 +63,106 @@ # CHECK-NEXT: %tiled_linalg_op_0, %loops_1 = transform.structured.tile_using_for %tiled_linalg_op tile_sizes [0, 1] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) # CHECK-NEXT: transform.annotate %loops_1 "./j" : !transform.any_op # CHECK-NEXT: %1 = transform.structured.match attributes {__xtc_id_C_} in %arg0 : (!transform.any_op) -> !transform.any_op -# CHECK-NEXT: %tiled_op, %forall_op = transform.structured.tile_using_forall %1 tile_sizes [2, 0, 0] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: %tiled_op, %forall_op = transform.structured.tile_using_forall %1 tile_sizes [128, 128, 0](mapping = [#gpu.block, #gpu.block]) : (!transform.any_op) -> (!transform.any_op, !transform.any_op) # CHECK-NEXT: transform.annotate %forall_op "./i" : !transform.any_op -# CHECK-NEXT: %tiled_linalg_op_2, %loops_3 = transform.structured.tile_using_for %tiled_op tile_sizes [0, 16, 0] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) -# CHECK-NEXT: transform.annotate %loops_3 "./j" : !transform.any_op -# CHECK-NEXT: %tiled_linalg_op_4, %loops_5 = transform.structured.tile_using_for %tiled_linalg_op_2 tile_sizes [0, 0, 1] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: %tiled_op_2, %forall_op_3 = transform.structured.tile_using_forall %tiled_op tile_sizes [32, 32, 0](mapping = [#gpu.thread, #gpu.thread]) : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: transform.annotate %forall_op_3 "./i1" : !transform.any_op +# CHECK-NEXT: %tiled_linalg_op_4, %loops_5 = transform.structured.tile_using_for %tiled_op_2 tile_sizes [0, 0, 64] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) # CHECK-NEXT: transform.annotate %loops_5 "./k" : !transform.any_op -# CHECK-NEXT: %tiled_linalg_op_6, %loops_7 = transform.structured.tile_using_for %tiled_linalg_op_4 tile_sizes [1, 0, 0] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) -# CHECK-NEXT: transform.annotate %loops_7 "./i1" : !transform.any_op -# CHECK-NEXT: transform.include @_vecto failures(suppress) (%tiled_linalg_op_6) : (!transform.any_op) -> () -# CHECK-NEXT: transform.loop.unroll %loops_7 {factor = 2 : i64} : !transform.any_op +# CHECK-NEXT: %tiled_linalg_op_6, %loops_7 = transform.structured.tile_using_for %tiled_linalg_op_4 tile_sizes [0, 0, 1] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: transform.annotate %loops_7 "./k1" : !transform.any_op +# CHECK-NEXT: %tiled_linalg_op_8, %loops_9 = transform.structured.tile_using_for %tiled_linalg_op_6 tile_sizes [1, 0, 0] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: transform.annotate %loops_9 "./i2" : !transform.any_op +# CHECK-NEXT: transform.include @_vecto failures(suppress) (%tiled_linalg_op_8) : (!transform.any_op) -> () +# CHECK-NEXT: transform.loop.unroll %loops_9 {factor = 2 : i64} : !transform.any_op # CHECK-NEXT: %2 = transform.get_parent_op %forall_op {isolated_from_above} : (!transform.any_op) -> !transform.any_op # CHECK-NEXT: transform.apply_patterns to %2 { # CHECK-NEXT: transform.apply_patterns.vector.reduction_to_contract # CHECK-NEXT: transform.apply_patterns.vector.transfer_permutation_patterns # CHECK-NEXT: } : !transform.any_op -# CHECK-NEXT: transform.apply_patterns to %2 { -# CHECK-NEXT: transform.apply_patterns.vector.lower_outerproduct -# CHECK-NEXT: transform.apply_patterns.vector.lower_contraction -# CHECK-NEXT: } : !transform.any_op +# CHECK-NEXT: %3 = transform.gpu.map_forall_to_blocks %forall_op generate_gpu_launch : (!transform.any_op) -> !transform.any_op +# CHECK-NEXT: %4 = transform.gpu.map_nested_forall_to_threads %3 block_dims = [4, 4, 1] : (!transform.any_op) -> !transform.any_op # CHECK-NEXT: transform.yield # CHECK-NEXT: } # CHECK-NEXT: } # CHECK-NEXT: # CHECK-NEXT: // -----// IR Dump After transform //----- // -# CHECK-NEXT: #map = affine_map<(d0) -> (d0 * 2)> +# CHECK-NEXT: #map = affine_map<(d0) -> (d0 * 128)> +# CHECK-NEXT: #map1 = affine_map<(d0) -> (d0 * 32)> +# CHECK-NEXT: #map2 = affine_map<(d0, d1, d2) -> (d0, d2)> +# CHECK-NEXT: #map3 = affine_map<(d0, d1, d2) -> (d2, d1)> +# CHECK-NEXT: #map4 = affine_map<(d0, d1, d2) -> (d0, d1)> # CHECK-NEXT: module attributes {transform.with_named_sequence} { -# CHECK-NEXT: func.func @matmul(%arg0: memref<4x512xf32> {llvm.noalias}, %arg1: memref<512x32xf32> {llvm.noalias, memref.on_device}, %arg2: memref<4x32xf32> {llvm.noalias, memref.on_device}) { -# CHECK-NEXT: %cst = arith.constant dense<0.000000e+00> : vector<1x16xf32> +# CHECK-NEXT: func.func @matmul(%arg0: memref<512x512xf32> {llvm.noalias}, %arg1: memref<512x512xf32> {llvm.noalias, memref.on_device}, %arg2: memref<512x512xf32> {llvm.noalias, memref.on_device}) { # CHECK-NEXT: %0 = ub.poison : f32 -# CHECK-NEXT: %c512 = arith.constant 512 : index -# CHECK-NEXT: %c16 = arith.constant 16 : index +# CHECK-NEXT: %c2 = arith.constant 2 : index # CHECK-NEXT: %c32 = arith.constant 32 : index -# CHECK-NEXT: %cst_0 = arith.constant 0.000000e+00 : f32 +# CHECK-NEXT: %c64 = arith.constant 64 : index +# CHECK-NEXT: %cst = arith.constant 0.000000e+00 : f32 # CHECK-NEXT: %c0 = arith.constant 0 : index -# CHECK-NEXT: %c4 = arith.constant 4 : index +# CHECK-NEXT: %c512 = arith.constant 512 : index # CHECK-NEXT: %c1 = arith.constant 1 : index -# CHECK-NEXT: scf.for %arg3 = %c0 to %c4 step %c1 { -# CHECK-NEXT: %subview = memref.subview %arg2[%arg3, 0] [1, 32] [1, 1] : memref<4x32xf32> to memref<1x32xf32, strided<[32, 1], offset: ?>> -# CHECK-NEXT: scf.for %arg4 = %c0 to %c32 step %c1 { -# CHECK-NEXT: %subview_1 = memref.subview %subview[0, %arg4] [1, 1] [1, 1] : memref<1x32xf32, strided<[32, 1], offset: ?>> to memref<1x1xf32, strided<[32, 1], offset: ?>> -# CHECK-NEXT: linalg.fill {__xtc_id_C_0_} ins(%cst_0 : f32) outs(%subview_1 : memref<1x1xf32, strided<[32, 1], offset: ?>>) -# CHECK-NEXT: } {"./j"} -# CHECK-NEXT: } {"./i"} -# CHECK-NEXT: scf.forall (%arg3) in (2) { -# CHECK-NEXT: %1 = affine.apply #map(%arg3) -# CHECK-NEXT: %subview = memref.subview %arg0[%1, 0] [2, 512] [1, 1] : memref<4x512xf32> to memref<2x512xf32, strided<[512, 1], offset: ?>> -# CHECK-NEXT: %subview_1 = memref.subview %arg1[0, 0] [512, 32] [1, 1] : memref<512x32xf32> to memref<512x32xf32, strided<[32, 1]>> -# CHECK-NEXT: %subview_2 = memref.subview %arg2[%1, 0] [2, 32] [1, 1] : memref<4x32xf32> to memref<2x32xf32, strided<[32, 1], offset: ?>> -# CHECK-NEXT: scf.for %arg4 = %c0 to %c32 step %c16 { -# CHECK-NEXT: %subview_3 = memref.subview %subview_1[0, %arg4] [512, 16] [1, 1] : memref<512x32xf32, strided<[32, 1]>> to memref<512x16xf32, strided<[32, 1], offset: ?>> -# CHECK-NEXT: %subview_4 = memref.subview %subview_2[0, %arg4] [2, 16] [1, 1] : memref<2x32xf32, strided<[32, 1], offset: ?>> to memref<2x16xf32, strided<[32, 1], offset: ?>> -# CHECK-NEXT: scf.for %arg5 = %c0 to %c512 step %c1 { -# CHECK-NEXT: %subview_5 = memref.subview %subview[0, %arg5] [2, 1] [1, 1] : memref<2x512xf32, strided<[512, 1], offset: ?>> to memref<2x1xf32, strided<[512, 1], offset: ?>> -# CHECK-NEXT: %subview_6 = memref.subview %subview_3[%arg5, 0] [1, 16] [1, 1] : memref<512x16xf32, strided<[32, 1], offset: ?>> to memref<1x16xf32, strided<[32, 1], offset: ?>> -# CHECK-NEXT: %subview_7 = memref.subview %subview_5[%c0, 0] [1, 1] [1, 1] : memref<2x1xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> -# CHECK-NEXT: %subview_8 = memref.subview %subview_4[%c0, 0] [1, 16] [1, 1] : memref<2x16xf32, strided<[32, 1], offset: ?>> to memref<1x16xf32, strided<[32, 1], offset: ?>> -# CHECK-NEXT: %2 = vector.transfer_read %subview_7[%c0, %c0], %0 {in_bounds = [true, true]} : memref<1x1xf32, strided<[512, 1], offset: ?>>, vector<1x1xf32> -# CHECK-NEXT: %3 = vector.transfer_read %subview_6[%c0, %c0], %0 {in_bounds = [true, true]} : memref<1x16xf32, strided<[32, 1], offset: ?>>, vector<1x16xf32> -# CHECK-NEXT: %4 = vector.transfer_read %subview_8[%c0, %c0], %0 {in_bounds = [true, true]} : memref<1x16xf32, strided<[32, 1], offset: ?>>, vector<1x16xf32> -# CHECK-NEXT: %5 = vector.extract %3[0] : vector<16xf32> from vector<1x16xf32> -# CHECK-NEXT: %6 = vector.extract %2[0, 0] : f32 from vector<1x1xf32> -# CHECK-NEXT: %7 = vector.broadcast %6 : f32 to vector<16xf32> -# CHECK-NEXT: %8 = vector.extract %4[0] : vector<16xf32> from vector<1x16xf32> -# CHECK-NEXT: %9 = vector.fma %7, %5, %8 : vector<16xf32> -# CHECK-NEXT: %10 = vector.insert %9, %cst [0] : vector<16xf32> into vector<1x16xf32> -# CHECK-NEXT: vector.transfer_write %10, %subview_8[%c0, %c0] {in_bounds = [true, true]} : vector<1x16xf32>, memref<1x16xf32, strided<[32, 1], offset: ?>> -# CHECK-NEXT: %subview_9 = memref.subview %subview_5[%c1, 0] [1, 1] [1, 1] : memref<2x1xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> -# CHECK-NEXT: %subview_10 = memref.subview %subview_4[%c1, 0] [1, 16] [1, 1] : memref<2x16xf32, strided<[32, 1], offset: ?>> to memref<1x16xf32, strided<[32, 1], offset: ?>> -# CHECK-NEXT: %11 = vector.transfer_read %subview_9[%c0, %c0], %0 {in_bounds = [true, true]} : memref<1x1xf32, strided<[512, 1], offset: ?>>, vector<1x1xf32> -# CHECK-NEXT: %12 = vector.transfer_read %subview_6[%c0, %c0], %0 {in_bounds = [true, true]} : memref<1x16xf32, strided<[32, 1], offset: ?>>, vector<1x16xf32> -# CHECK-NEXT: %13 = vector.transfer_read %subview_10[%c0, %c0], %0 {in_bounds = [true, true]} : memref<1x16xf32, strided<[32, 1], offset: ?>>, vector<1x16xf32> -# CHECK-NEXT: %14 = vector.extract %12[0] : vector<16xf32> from vector<1x16xf32> -# CHECK-NEXT: %15 = vector.extract %11[0, 0] : f32 from vector<1x1xf32> -# CHECK-NEXT: %16 = vector.broadcast %15 : f32 to vector<16xf32> -# CHECK-NEXT: %17 = vector.extract %13[0] : vector<16xf32> from vector<1x16xf32> -# CHECK-NEXT: %18 = vector.fma %16, %14, %17 : vector<16xf32> -# CHECK-NEXT: %19 = vector.insert %18, %cst [0] : vector<16xf32> into vector<1x16xf32> -# CHECK-NEXT: vector.transfer_write %19, %subview_10[%c0, %c0] {in_bounds = [true, true]} : vector<1x16xf32>, memref<1x16xf32, strided<[32, 1], offset: ?>> -# CHECK-NEXT: } {"./k"} +# CHECK-NEXT: scf.for %arg3 = %c0 to %c512 step %c1 { +# CHECK-NEXT: %subview = memref.subview %arg2[%arg3, 0] [1, 512] [1, 1] : memref<512x512xf32> to memref<1x512xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: scf.for %arg4 = %c0 to %c512 step %c1 { +# CHECK-NEXT: %subview_6 = memref.subview %subview[0, %arg4] [1, 1] [1, 1] : memref<1x512xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: linalg.fill {__xtc_id_C_0_} ins(%cst : f32) outs(%subview_6 : memref<1x1xf32, strided<[512, 1], offset: ?>>) # CHECK-NEXT: } {"./j"} # CHECK-NEXT: } {"./i"} +# CHECK-NEXT: %c1_0 = arith.constant 1 : index +# CHECK-NEXT: %c4 = arith.constant 4 : index +# CHECK-NEXT: %c4_1 = arith.constant 4 : index +# CHECK-NEXT: %c1_2 = arith.constant 1 : index +# CHECK-NEXT: %c4_3 = arith.constant 4 : index +# CHECK-NEXT: %c4_4 = arith.constant 4 : index +# CHECK-NEXT: %c1_5 = arith.constant 1 : index +# CHECK-NEXT: gpu.launch blocks(%arg3, %arg4, %arg5) in (%arg9 = %c4_3, %arg10 = %c4_4, %arg11 = %c1_5) threads(%arg6, %arg7, %arg8) in (%arg12 = %c4, %arg13 = %c4_1, %arg14 = %c1_2) { +# CHECK-NEXT: %c0_6 = arith.constant 0 : index +# CHECK-NEXT: %c0_7 = arith.constant 0 : index +# CHECK-NEXT: %block_id_x = gpu.block_id x +# CHECK-NEXT: %block_id_y = gpu.block_id y +# CHECK-NEXT: %block_id_z = gpu.block_id z +# CHECK-NEXT: %1 = affine.apply #map(%block_id_x) +# CHECK-NEXT: %2 = affine.apply #map(%block_id_y) +# CHECK-NEXT: %subview = memref.subview %arg0[%1, 0] [128, 512] [1, 1] : memref<512x512xf32> to memref<128x512xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_8 = memref.subview %arg1[0, %2] [512, 128] [1, 1] : memref<512x512xf32> to memref<512x128xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_9 = memref.subview %arg2[%1, %2] [128, 128] [1, 1] : memref<512x512xf32> to memref<128x128xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %thread_id_x = gpu.thread_id x +# CHECK-NEXT: %thread_id_y = gpu.thread_id y +# CHECK-NEXT: %thread_id_z = gpu.thread_id z +# CHECK-NEXT: %3 = affine.apply #map1(%thread_id_x) +# CHECK-NEXT: %4 = affine.apply #map1(%thread_id_y) +# CHECK-NEXT: %subview_10 = memref.subview %subview[%3, 0] [32, 512] [1, 1] : memref<128x512xf32, strided<[512, 1], offset: ?>> to memref<32x512xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_11 = memref.subview %subview_8[0, %4] [512, 32] [1, 1] : memref<512x128xf32, strided<[512, 1], offset: ?>> to memref<512x32xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_12 = memref.subview %subview_9[%3, %4] [32, 32] [1, 1] : memref<128x128xf32, strided<[512, 1], offset: ?>> to memref<32x32xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: scf.for %arg15 = %c0 to %c512 step %c64 { +# CHECK-NEXT: %subview_13 = memref.subview %subview_10[0, %arg15] [32, 64] [1, 1] : memref<32x512xf32, strided<[512, 1], offset: ?>> to memref<32x64xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_14 = memref.subview %subview_11[%arg15, 0] [64, 32] [1, 1] : memref<512x32xf32, strided<[512, 1], offset: ?>> to memref<64x32xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: scf.for %arg16 = %c0 to %c64 step %c1 { +# CHECK-NEXT: %subview_15 = memref.subview %subview_13[0, %arg16] [32, 1] [1, 1] : memref<32x64xf32, strided<[512, 1], offset: ?>> to memref<32x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_16 = memref.subview %subview_14[%arg16, 0] [1, 32] [1, 1] : memref<64x32xf32, strided<[512, 1], offset: ?>> to memref<1x32xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: scf.for %arg17 = %c0 to %c32 step %c2 { +# CHECK-NEXT: %subview_17 = memref.subview %subview_15[%arg17, 0] [1, 1] [1, 1] : memref<32x1xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_18 = memref.subview %subview_12[%arg17, 0] [1, 32] [1, 1] : memref<32x32xf32, strided<[512, 1], offset: ?>> to memref<1x32xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %5 = vector.transfer_read %subview_17[%c0, %c0], %0 {in_bounds = [true, true]} : memref<1x1xf32, strided<[512, 1], offset: ?>>, vector<1x1xf32> +# CHECK-NEXT: %6 = vector.transfer_read %subview_16[%c0, %c0], %0 {in_bounds = [true, true]} : memref<1x32xf32, strided<[512, 1], offset: ?>>, vector<1x32xf32> +# CHECK-NEXT: %7 = vector.transfer_read %subview_18[%c0, %c0], %0 {in_bounds = [true, true]} : memref<1x32xf32, strided<[512, 1], offset: ?>>, vector<1x32xf32> +# CHECK-NEXT: %8 = vector.contract {indexing_maps = [#map2, #map3, #map4], iterator_types = ["parallel", "parallel", "reduction"], kind = #vector.kind} %5, %6, %7 : vector<1x1xf32>, vector<1x32xf32> into vector<1x32xf32> +# CHECK-NEXT: vector.transfer_write %8, %subview_18[%c0, %c0] {in_bounds = [true, true]} : vector<1x32xf32>, memref<1x32xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %9 = arith.addi %arg17, %c1 : index +# CHECK-NEXT: %subview_19 = memref.subview %subview_15[%9, 0] [1, 1] [1, 1] : memref<32x1xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_20 = memref.subview %subview_12[%9, 0] [1, 32] [1, 1] : memref<32x32xf32, strided<[512, 1], offset: ?>> to memref<1x32xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %10 = vector.transfer_read %subview_19[%c0, %c0], %0 {in_bounds = [true, true]} : memref<1x1xf32, strided<[512, 1], offset: ?>>, vector<1x1xf32> +# CHECK-NEXT: %11 = vector.transfer_read %subview_16[%c0, %c0], %0 {in_bounds = [true, true]} : memref<1x32xf32, strided<[512, 1], offset: ?>>, vector<1x32xf32> +# CHECK-NEXT: %12 = vector.transfer_read %subview_20[%c0, %c0], %0 {in_bounds = [true, true]} : memref<1x32xf32, strided<[512, 1], offset: ?>>, vector<1x32xf32> +# CHECK-NEXT: %13 = vector.contract {indexing_maps = [#map2, #map3, #map4], iterator_types = ["parallel", "parallel", "reduction"], kind = #vector.kind} %10, %11, %12 : vector<1x1xf32>, vector<1x32xf32> into vector<1x32xf32> +# CHECK-NEXT: vector.transfer_write %13, %subview_20[%c0, %c0] {in_bounds = [true, true]} : vector<1x32xf32>, memref<1x32xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: } {"./i2"} +# CHECK-NEXT: } {"./k1"} +# CHECK-NEXT: } {"./k"} +# CHECK-NEXT: gpu.barrier +# CHECK-NEXT: gpu.terminator +# CHECK-NEXT: } # CHECK-NEXT: return # CHECK-NEXT: } # CHECK-NEXT: } @@ -147,11 +170,11 @@ # CHECK-NEXT: graph: # CHECK-NEXT: name: matmul # CHECK-NEXT: inputs: -# CHECK-NEXT: - %0 : 4x512xfloat32 -# CHECK-NEXT: - %1 : 512x32xfloat32 +# CHECK-NEXT: - %0 : 512x512xfloat32 +# CHECK-NEXT: - %1 : 512x512xfloat32 # CHECK-NEXT: outputs: -# CHECK-NEXT: - %2 : 4x32xfloat32 +# CHECK-NEXT: - %2 : 512x512xfloat32 # CHECK-NEXT: nodes: -# CHECK-NEXT: - %2: matmul(%0, %1) {name = 'C'} : [4x512xfloat32, 512x32xfloat32] -> [4x32xfloat32] +# CHECK-NEXT: - %2: matmul(%0, %1) {name = 'C'} : [512x512xfloat32, 512x512xfloat32] -> [512x512xfloat32] # CHECK-NEXT: # CHECK-NEXT: CODE: 0 diff --git a/tests/filecheck/backends/target_gpu/test_matmul_mlir_with_tensor.py b/tests/filecheck/backends/target_gpu/test_matmul_mlir_with_tensor.py index 0858d6577..32976c805 100644 --- a/tests/filecheck/backends/target_gpu/test_matmul_mlir_with_tensor.py +++ b/tests/filecheck/backends/target_gpu/test_matmul_mlir_with_tensor.py @@ -26,7 +26,6 @@ sch.tile("j", {"j1": 128, "j2": 32}) sch.tile("k", {"k1": 64}) # sch.unroll({"i2": 2}) -sch.parallelize(["i", "j","i1", "j1"]) sch.gpu_block(["i", "j"]) sch.gpu_thread(["i1", "j1"]) sch.interchange(["i", "j", "i1", "j1","k", "k1", "i2", "j2"]) @@ -46,16 +45,24 @@ print(f"CODE: {res}") # CHECK: // -----// IR Dump Before transform //----- // # CHECK-NEXT: module attributes {transform.with_named_sequence} { -# CHECK-NEXT: func.func @matmul(%arg0: memref<1024x512xf32> {llvm.noalias}, %arg1: memref<512x1024xf32> {llvm.noalias, memref.on_device}, %arg2: memref<1024x1024xf32> {llvm.noalias, memref.on_device}) { +# CHECK-NEXT: func.func @matmul(%arg0: tensor<1024x512xf32> {llvm.noalias}, %arg1: tensor<512x1024xf32> {llvm.noalias, memref.on_device}, %arg2: memref<1024x1024xf32> {llvm.noalias, memref.on_device}) { +# CHECK-NEXT: %0 = tensor.empty() : tensor<1024x1024xf32> # CHECK-NEXT: %cst = arith.constant 0.000000e+00 : f32 -# CHECK-NEXT: linalg.fill {__xtc_id_C_0_} ins(%cst : f32) outs(%arg2 : memref<1024x1024xf32>) -# CHECK-NEXT: linalg.matmul {__xtc_id_C_} ins(%arg0, %arg1 : memref<1024x512xf32>, memref<512x1024xf32>) outs(%arg2 : memref<1024x1024xf32>) +# CHECK-NEXT: %1 = linalg.fill {__xtc_id_C_0_} ins(%cst : f32) outs(%0 : tensor<1024x1024xf32>) -> tensor<1024x1024xf32> +# CHECK-NEXT: %2 = linalg.matmul {__xtc_id_C_} ins(%arg0, %arg1 : tensor<1024x512xf32>, tensor<512x1024xf32>) outs(%1 : tensor<1024x1024xf32>) -> tensor<1024x1024xf32> +# CHECK-NEXT: bufferization.materialize_in_destination %2 in restrict writable %arg2 : (tensor<1024x1024xf32>, memref<1024x1024xf32>) -> () # CHECK-NEXT: return # CHECK-NEXT: } # CHECK-NEXT: transform.named_sequence @_vecto(%arg0: !transform.any_op {transform.consumed}) { # CHECK-NEXT: transform.structured.vectorize %arg0 : !transform.any_op # CHECK-NEXT: transform.yield # CHECK-NEXT: } +# CHECK-NEXT: transform.named_sequence @_post_bufferize(%arg0: !transform.any_op {transform.readonly}) { +# CHECK-NEXT: %0 = transform.structured.match attributes {"./i", mapping = [#gpu.block, #gpu.block]} in %arg0 : (!transform.any_op) -> !transform.any_op +# CHECK-NEXT: %1 = transform.gpu.map_forall_to_blocks %0 generate_gpu_launch : (!transform.any_op) -> !transform.any_op +# CHECK-NEXT: %2 = transform.gpu.map_nested_forall_to_threads %1 block_dims = [4, 4, 1] : (!transform.any_op) -> !transform.any_op +# CHECK-NEXT: transform.yield +# CHECK-NEXT: } # CHECK-NEXT: transform.named_sequence @__transform_main(%arg0: !transform.any_op {transform.readonly}) { # CHECK-NEXT: %0 = transform.structured.match attributes {__xtc_id_C_0_} in %arg0 : (!transform.any_op) -> !transform.any_op # CHECK-NEXT: %tiled_linalg_op, %loops = transform.structured.tile_using_for %0 tile_sizes [1, 0] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) @@ -75,9 +82,6 @@ # CHECK-NEXT: transform.annotate %loops_9 "./i2" : !transform.any_op # CHECK-NEXT: %tiled_linalg_op_10, %loops_11 = transform.structured.tile_using_for %tiled_linalg_op_8 tile_sizes [0, 1, 0] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) # CHECK-NEXT: transform.annotate %loops_11 "./j2" : !transform.any_op -# CHECK-NEXT: transform.loop.unroll %loops_9 {factor = 2 : i64} : !transform.any_op -# CHECK-NEXT: %2 = transform.gpu.map_forall_to_blocks %forall_op generate_gpu_launch : (!transform.any_op) -> !transform.any_op -# CHECK-NEXT: %3 = transform.gpu.map_nested_forall_to_threads %2 block_dims = [4, 4, 1] : (!transform.any_op) -> !transform.any_op # CHECK-NEXT: transform.yield # CHECK-NEXT: } # CHECK-NEXT: } @@ -86,20 +90,126 @@ # CHECK-NEXT: #map = affine_map<(d0) -> (d0 * 128)> # CHECK-NEXT: #map1 = affine_map<(d0) -> (d0 * 32)> # CHECK-NEXT: module attributes {transform.with_named_sequence} { -# CHECK-NEXT: func.func @matmul(%arg0: memref<1024x512xf32> {llvm.noalias}, %arg1: memref<512x1024xf32> {llvm.noalias, memref.on_device}, %arg2: memref<1024x1024xf32> {llvm.noalias, memref.on_device}) { +# CHECK-NEXT: func.func @matmul(%arg0: tensor<1024x512xf32> {llvm.noalias}, %arg1: tensor<512x1024xf32> {llvm.noalias, memref.on_device}, %arg2: memref<1024x1024xf32> {llvm.noalias, memref.on_device}) { +# CHECK-NEXT: %0 = tensor.empty() : tensor<1024x1024xf32> # CHECK-NEXT: %cst = arith.constant 0.000000e+00 : f32 # CHECK-NEXT: %c0 = arith.constant 0 : index # CHECK-NEXT: %c1024 = arith.constant 1024 : index # CHECK-NEXT: %c1 = arith.constant 1 : index -# CHECK-NEXT: scf.for %arg3 = %c0 to %c1024 step %c1 { -# CHECK-NEXT: %subview = memref.subview %arg2[%arg3, 0] [1, 1024] [1, 1] : memref<1024x1024xf32> to memref<1x1024xf32, strided<[1024, 1], offset: ?>> -# CHECK-NEXT: %c0_5 = arith.constant 0 : index -# CHECK-NEXT: %c1024_6 = arith.constant 1024 : index -# CHECK-NEXT: %c1_7 = arith.constant 1 : index -# CHECK-NEXT: scf.for %arg4 = %c0_5 to %c1024_6 step %c1_7 { -# CHECK-NEXT: %subview_8 = memref.subview %subview[0, %arg4] [1, 1] [1, 1] : memref<1x1024xf32, strided<[1024, 1], offset: ?>> to memref<1x1xf32, strided<[1024, 1], offset: ?>> -# CHECK-NEXT: linalg.fill {__xtc_id_C_0_} ins(%cst : f32) outs(%subview_8 : memref<1x1xf32, strided<[1024, 1], offset: ?>>) +# CHECK-NEXT: %1 = scf.for %arg3 = %c0 to %c1024 step %c1 iter_args(%arg4 = %0) -> (tensor<1024x1024xf32>) { +# CHECK-NEXT: %extracted_slice = tensor.extract_slice %arg4[%arg3, 0] [1, 1024] [1, 1] : tensor<1024x1024xf32> to tensor<1x1024xf32> +# CHECK-NEXT: %c0_0 = arith.constant 0 : index +# CHECK-NEXT: %c1024_1 = arith.constant 1024 : index +# CHECK-NEXT: %c1_2 = arith.constant 1 : index +# CHECK-NEXT: %3 = scf.for %arg5 = %c0_0 to %c1024_1 step %c1_2 iter_args(%arg6 = %extracted_slice) -> (tensor<1x1024xf32>) { +# CHECK-NEXT: %extracted_slice_3 = tensor.extract_slice %arg6[0, %arg5] [1, 1] [1, 1] : tensor<1x1024xf32> to tensor<1x1xf32> +# CHECK-NEXT: %4 = linalg.fill {__xtc_id_C_0_} ins(%cst : f32) outs(%extracted_slice_3 : tensor<1x1xf32>) -> tensor<1x1xf32> +# CHECK-NEXT: %inserted_slice_4 = tensor.insert_slice %4 into %arg6[0, %arg5] [1, 1] [1, 1] : tensor<1x1xf32> into tensor<1x1024xf32> +# CHECK-NEXT: scf.yield %inserted_slice_4 : tensor<1x1024xf32> +# CHECK-NEXT: } {"./j"} +# CHECK-NEXT: %inserted_slice = tensor.insert_slice %3 into %arg4[%arg3, 0] [1, 1024] [1, 1] : tensor<1x1024xf32> into tensor<1024x1024xf32> +# CHECK-NEXT: scf.yield %inserted_slice : tensor<1024x1024xf32> +# CHECK-NEXT: } {"./i"} +# CHECK-NEXT: %2 = scf.forall (%arg3, %arg4) in (8, 8) shared_outs(%arg5 = %1) -> (tensor<1024x1024xf32>) { +# CHECK-NEXT: %3 = affine.apply #map(%arg3) +# CHECK-NEXT: %4 = affine.apply #map(%arg4) +# CHECK-NEXT: %extracted_slice = tensor.extract_slice %arg0[%3, 0] [128, 512] [1, 1] : tensor<1024x512xf32> to tensor<128x512xf32> +# CHECK-NEXT: %extracted_slice_0 = tensor.extract_slice %arg1[0, %4] [512, 128] [1, 1] : tensor<512x1024xf32> to tensor<512x128xf32> +# CHECK-NEXT: %extracted_slice_1 = tensor.extract_slice %arg5[%3, %4] [128, 128] [1, 1] : tensor<1024x1024xf32> to tensor<128x128xf32> +# CHECK-NEXT: %5 = scf.forall (%arg6, %arg7) in (4, 4) shared_outs(%arg8 = %extracted_slice_1) -> (tensor<128x128xf32>) { +# CHECK-NEXT: %6 = affine.apply #map1(%arg6) +# CHECK-NEXT: %7 = affine.apply #map1(%arg7) +# CHECK-NEXT: %extracted_slice_2 = tensor.extract_slice %extracted_slice[%6, 0] [32, 512] [1, 1] : tensor<128x512xf32> to tensor<32x512xf32> +# CHECK-NEXT: %extracted_slice_3 = tensor.extract_slice %extracted_slice_0[0, %7] [512, 32] [1, 1] : tensor<512x128xf32> to tensor<512x32xf32> +# CHECK-NEXT: %extracted_slice_4 = tensor.extract_slice %arg8[%6, %7] [32, 32] [1, 1] : tensor<128x128xf32> to tensor<32x32xf32> +# CHECK-NEXT: %c0_5 = arith.constant 0 : index +# CHECK-NEXT: %c512 = arith.constant 512 : index +# CHECK-NEXT: %c64 = arith.constant 64 : index +# CHECK-NEXT: %8 = scf.for %arg9 = %c0_5 to %c512 step %c64 iter_args(%arg10 = %extracted_slice_4) -> (tensor<32x32xf32>) { +# CHECK-NEXT: %extracted_slice_6 = tensor.extract_slice %extracted_slice_2[0, %arg9] [32, 64] [1, 1] : tensor<32x512xf32> to tensor<32x64xf32> +# CHECK-NEXT: %extracted_slice_7 = tensor.extract_slice %extracted_slice_3[%arg9, 0] [64, 32] [1, 1] : tensor<512x32xf32> to tensor<64x32xf32> +# CHECK-NEXT: %extracted_slice_8 = tensor.extract_slice %arg10[0, 0] [32, 32] [1, 1] : tensor<32x32xf32> to tensor<32x32xf32> +# CHECK-NEXT: %c0_9 = arith.constant 0 : index +# CHECK-NEXT: %c64_10 = arith.constant 64 : index +# CHECK-NEXT: %c1_11 = arith.constant 1 : index +# CHECK-NEXT: %9 = scf.for %arg11 = %c0_9 to %c64_10 step %c1_11 iter_args(%arg12 = %extracted_slice_8) -> (tensor<32x32xf32>) { +# CHECK-NEXT: %extracted_slice_12 = tensor.extract_slice %extracted_slice_6[0, %arg11] [32, 1] [1, 1] : tensor<32x64xf32> to tensor<32x1xf32> +# CHECK-NEXT: %extracted_slice_13 = tensor.extract_slice %extracted_slice_7[%arg11, 0] [1, 32] [1, 1] : tensor<64x32xf32> to tensor<1x32xf32> +# CHECK-NEXT: %extracted_slice_14 = tensor.extract_slice %arg12[0, 0] [32, 32] [1, 1] : tensor<32x32xf32> to tensor<32x32xf32> +# CHECK-NEXT: %c0_15 = arith.constant 0 : index +# CHECK-NEXT: %c32 = arith.constant 32 : index +# CHECK-NEXT: %c1_16 = arith.constant 1 : index +# CHECK-NEXT: %10 = scf.for %arg13 = %c0_15 to %c32 step %c1_16 iter_args(%arg14 = %extracted_slice_14) -> (tensor<32x32xf32>) { +# CHECK-NEXT: %extracted_slice_18 = tensor.extract_slice %extracted_slice_12[%arg13, 0] [1, 1] [1, 1] : tensor<32x1xf32> to tensor<1x1xf32> +# CHECK-NEXT: %extracted_slice_19 = tensor.extract_slice %extracted_slice_13[0, 0] [1, 32] [1, 1] : tensor<1x32xf32> to tensor<1x32xf32> +# CHECK-NEXT: %extracted_slice_20 = tensor.extract_slice %arg14[%arg13, 0] [1, 32] [1, 1] : tensor<32x32xf32> to tensor<1x32xf32> +# CHECK-NEXT: %c0_21 = arith.constant 0 : index +# CHECK-NEXT: %c32_22 = arith.constant 32 : index +# CHECK-NEXT: %c1_23 = arith.constant 1 : index +# CHECK-NEXT: %11 = scf.for %arg15 = %c0_21 to %c32_22 step %c1_23 iter_args(%arg16 = %extracted_slice_20) -> (tensor<1x32xf32>) { +# CHECK-NEXT: %extracted_slice_25 = tensor.extract_slice %extracted_slice_18[0, 0] [1, 1] [1, 1] : tensor<1x1xf32> to tensor<1x1xf32> +# CHECK-NEXT: %extracted_slice_26 = tensor.extract_slice %extracted_slice_19[0, %arg15] [1, 1] [1, 1] : tensor<1x32xf32> to tensor<1x1xf32> +# CHECK-NEXT: %extracted_slice_27 = tensor.extract_slice %arg16[0, %arg15] [1, 1] [1, 1] : tensor<1x32xf32> to tensor<1x1xf32> +# CHECK-NEXT: %12 = linalg.matmul {__xtc_id_C_} ins(%extracted_slice_25, %extracted_slice_26 : tensor<1x1xf32>, tensor<1x1xf32>) outs(%extracted_slice_27 : tensor<1x1xf32>) -> tensor<1x1xf32> +# CHECK-NEXT: %inserted_slice_28 = tensor.insert_slice %12 into %arg16[0, %arg15] [1, 1] [1, 1] : tensor<1x1xf32> into tensor<1x32xf32> +# CHECK-NEXT: scf.yield %inserted_slice_28 : tensor<1x32xf32> +# CHECK-NEXT: } {"./j2"} +# CHECK-NEXT: %inserted_slice_24 = tensor.insert_slice %11 into %arg14[%arg13, 0] [1, 32] [1, 1] : tensor<1x32xf32> into tensor<32x32xf32> +# CHECK-NEXT: scf.yield %inserted_slice_24 : tensor<32x32xf32> +# CHECK-NEXT: } {"./i2"} +# CHECK-NEXT: %inserted_slice_17 = tensor.insert_slice %10 into %arg12[0, 0] [32, 32] [1, 1] : tensor<32x32xf32> into tensor<32x32xf32> +# CHECK-NEXT: scf.yield %inserted_slice_17 : tensor<32x32xf32> +# CHECK-NEXT: } {"./k1"} +# CHECK-NEXT: %inserted_slice = tensor.insert_slice %9 into %arg10[0, 0] [32, 32] [1, 1] : tensor<32x32xf32> into tensor<32x32xf32> +# CHECK-NEXT: scf.yield %inserted_slice : tensor<32x32xf32> +# CHECK-NEXT: } {"./k"} +# CHECK-NEXT: scf.forall.in_parallel { +# CHECK-NEXT: tensor.parallel_insert_slice %8 into %arg8[%6, %7] [32, 32] [1, 1] : tensor<32x32xf32> into tensor<128x128xf32> +# CHECK-NEXT: } +# CHECK-NEXT: } {"./i1", mapping = [#gpu.thread, #gpu.thread]} +# CHECK-NEXT: scf.forall.in_parallel { +# CHECK-NEXT: tensor.parallel_insert_slice %5 into %arg5[%3, %4] [128, 128] [1, 1] : tensor<128x128xf32> into tensor<1024x1024xf32> +# CHECK-NEXT: } +# CHECK-NEXT: } {"./i", mapping = [#gpu.block, #gpu.block]} +# CHECK-NEXT: bufferization.materialize_in_destination %2 in restrict writable %arg2 : (tensor<1024x1024xf32>, memref<1024x1024xf32>) -> () +# CHECK-NEXT: return +# CHECK-NEXT: } +# CHECK-NEXT: transform.named_sequence @_vecto(%arg0: !transform.any_op {transform.consumed}) { +# CHECK-NEXT: transform.structured.vectorize %arg0 : !transform.any_op +# CHECK-NEXT: transform.yield +# CHECK-NEXT: } +# CHECK-NEXT: transform.named_sequence @_post_bufferize(%arg0: !transform.any_op {transform.readonly}) { +# CHECK-NEXT: %0 = transform.structured.match attributes {"./i", mapping = [#gpu.block, #gpu.block]} in %arg0 : (!transform.any_op) -> !transform.any_op +# CHECK-NEXT: %1 = transform.gpu.map_forall_to_blocks %0 generate_gpu_launch : (!transform.any_op) -> !transform.any_op +# CHECK-NEXT: %2 = transform.gpu.map_nested_forall_to_threads %1 block_dims = [4, 4, 1] : (!transform.any_op) -> !transform.any_op +# CHECK-NEXT: transform.yield +# CHECK-NEXT: } +# CHECK-NEXT: } +# CHECK-NEXT: +# CHECK-NEXT: // -----// IR Dump After Tensor Lowering //----- // +# CHECK-NEXT: #map = affine_map<(d0) -> (d0 * 128)> +# CHECK-NEXT: #map1 = affine_map<(d0) -> (d0 * 32)> +# CHECK-NEXT: module attributes {transform.with_named_sequence} { +# CHECK-NEXT: func.func @matmul(%arg0: memref<1024x512xf32> {llvm.noalias}, %arg1: memref<512x1024xf32> {llvm.noalias, memref.on_device}, %arg2: memref<1024x1024xf32> {llvm.noalias, memref.on_device}) { +# CHECK-NEXT: %c32 = arith.constant 32 : index +# CHECK-NEXT: %c64 = arith.constant 64 : index +# CHECK-NEXT: %c512 = arith.constant 512 : index +# CHECK-NEXT: %c1 = arith.constant 1 : index +# CHECK-NEXT: %c1024 = arith.constant 1024 : index +# CHECK-NEXT: %c0 = arith.constant 0 : index +# CHECK-NEXT: %cst = arith.constant 0.000000e+00 : f32 +# CHECK-NEXT: %0 = scf.for %arg3 = %c0 to %c1024 step %c1 iter_args(%arg4 = %arg2) -> (memref<1024x1024xf32>) { +# CHECK-NEXT: %subview = memref.subview %arg4[%arg3, 0] [1, 1024] [1, 1] : memref<1024x1024xf32> to memref<1x1024xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %1 = scf.for %arg5 = %c0 to %c1024 step %c1 iter_args(%arg6 = %subview) -> (memref<1x1024xf32, strided<[1024, 1], offset: ?>>) { +# CHECK-NEXT: %subview_6 = memref.subview %arg6[0, %arg5] [1, 1] [1, 1] : memref<1x1024xf32, strided<[1024, 1], offset: ?>> to memref<1x1xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: linalg.fill {__xtc_id_C_0_} ins(%cst : f32) outs(%subview_6 : memref<1x1xf32, strided<[1024, 1], offset: ?>>) +# CHECK-NEXT: %subview_7 = memref.subview %arg6[0, %arg5] [1, 1] [1, 1] : memref<1x1024xf32, strided<[1024, 1], offset: ?>> to memref<1x1xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: memref.copy %subview_6, %subview_7 : memref<1x1xf32, strided<[1024, 1], offset: ?>> to memref<1x1xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: scf.yield %arg6 : memref<1x1024xf32, strided<[1024, 1], offset: ?>> # CHECK-NEXT: } {"./j"} +# CHECK-NEXT: %subview_5 = memref.subview %arg4[%arg3, 0] [1, 1024] [1, 1] : memref<1024x1024xf32> to memref<1x1024xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: memref.copy %1, %subview_5 : memref<1x1024xf32, strided<[1024, 1], offset: ?>> to memref<1x1024xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: scf.yield %arg4 : memref<1024x1024xf32> # CHECK-NEXT: } {"./i"} # CHECK-NEXT: %c1_0 = arith.constant 1 : index # CHECK-NEXT: %c4 = arith.constant 4 : index @@ -114,71 +224,52 @@ # CHECK-NEXT: %block_id_x = gpu.block_id x # CHECK-NEXT: %block_id_y = gpu.block_id y # CHECK-NEXT: %block_id_z = gpu.block_id z -# CHECK-NEXT: %0 = affine.apply #map(%block_id_x) -# CHECK-NEXT: %1 = affine.apply #map(%block_id_y) -# CHECK-NEXT: %subview = memref.subview %arg0[%0, 0] [128, 512] [1, 1] : memref<1024x512xf32> to memref<128x512xf32, strided<[512, 1], offset: ?>> -# CHECK-NEXT: %subview_7 = memref.subview %arg1[0, %1] [512, 128] [1, 1] : memref<512x1024xf32> to memref<512x128xf32, strided<[1024, 1], offset: ?>> -# CHECK-NEXT: %subview_8 = memref.subview %arg2[%0, %1] [128, 128] [1, 1] : memref<1024x1024xf32> to memref<128x128xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %1 = affine.apply #map(%block_id_x) +# CHECK-NEXT: %2 = affine.apply #map(%block_id_y) +# CHECK-NEXT: %subview = memref.subview %arg0[%1, 0] [128, 512] [1, 1] : memref<1024x512xf32> to memref<128x512xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_7 = memref.subview %arg1[0, %2] [512, 128] [1, 1] : memref<512x1024xf32> to memref<512x128xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %subview_8 = memref.subview %0[%1, %2] [128, 128] [1, 1] : memref<1024x1024xf32> to memref<128x128xf32, strided<[1024, 1], offset: ?>> # CHECK-NEXT: %thread_id_x = gpu.thread_id x # CHECK-NEXT: %thread_id_y = gpu.thread_id y # CHECK-NEXT: %thread_id_z = gpu.thread_id z -# CHECK-NEXT: %2 = affine.apply #map1(%thread_id_x) -# CHECK-NEXT: %3 = affine.apply #map1(%thread_id_y) -# CHECK-NEXT: %subview_9 = memref.subview %subview[%2, 0] [32, 512] [1, 1] : memref<128x512xf32, strided<[512, 1], offset: ?>> to memref<32x512xf32, strided<[512, 1], offset: ?>> -# CHECK-NEXT: %subview_10 = memref.subview %subview_7[0, %3] [512, 32] [1, 1] : memref<512x128xf32, strided<[1024, 1], offset: ?>> to memref<512x32xf32, strided<[1024, 1], offset: ?>> -# CHECK-NEXT: %subview_11 = memref.subview %subview_8[%2, %3] [32, 32] [1, 1] : memref<128x128xf32, strided<[1024, 1], offset: ?>> to memref<32x32xf32, strided<[1024, 1], offset: ?>> -# CHECK-NEXT: %c0_12 = arith.constant 0 : index -# CHECK-NEXT: %c512 = arith.constant 512 : index -# CHECK-NEXT: %c64 = arith.constant 64 : index -# CHECK-NEXT: scf.for %arg15 = %c0_12 to %c512 step %c64 { -# CHECK-NEXT: %subview_13 = memref.subview %subview_9[0, %arg15] [32, 64] [1, 1] : memref<32x512xf32, strided<[512, 1], offset: ?>> to memref<32x64xf32, strided<[512, 1], offset: ?>> -# CHECK-NEXT: %subview_14 = memref.subview %subview_10[%arg15, 0] [64, 32] [1, 1] : memref<512x32xf32, strided<[1024, 1], offset: ?>> to memref<64x32xf32, strided<[1024, 1], offset: ?>> -# CHECK-NEXT: %subview_15 = memref.subview %subview_11[0, 0] [32, 32] [1, 1] : memref<32x32xf32, strided<[1024, 1], offset: ?>> to memref<32x32xf32, strided<[1024, 1], offset: ?>> -# CHECK-NEXT: %c0_16 = arith.constant 0 : index -# CHECK-NEXT: %c64_17 = arith.constant 64 : index -# CHECK-NEXT: %c1_18 = arith.constant 1 : index -# CHECK-NEXT: scf.for %arg16 = %c0_16 to %c64_17 step %c1_18 { -# CHECK-NEXT: %subview_19 = memref.subview %subview_13[0, %arg16] [32, 1] [1, 1] : memref<32x64xf32, strided<[512, 1], offset: ?>> to memref<32x1xf32, strided<[512, 1], offset: ?>> -# CHECK-NEXT: %subview_20 = memref.subview %subview_14[%arg16, 0] [1, 32] [1, 1] : memref<64x32xf32, strided<[1024, 1], offset: ?>> to memref<1x32xf32, strided<[1024, 1], offset: ?>> -# CHECK-NEXT: %subview_21 = memref.subview %subview_15[0, 0] [32, 32] [1, 1] : memref<32x32xf32, strided<[1024, 1], offset: ?>> to memref<32x32xf32, strided<[1024, 1], offset: ?>> -# CHECK-NEXT: %c0_22 = arith.constant 0 : index -# CHECK-NEXT: %c32 = arith.constant 32 : index -# CHECK-NEXT: %c1_23 = arith.constant 1 : index -# CHECK-NEXT: %c2 = arith.constant 2 : index -# CHECK-NEXT: scf.for %arg17 = %c0_22 to %c32 step %c2 { -# CHECK-NEXT: %subview_24 = memref.subview %subview_19[%arg17, 0] [1, 1] [1, 1] : memref<32x1xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> -# CHECK-NEXT: %subview_25 = memref.subview %subview_20[0, 0] [1, 32] [1, 1] : memref<1x32xf32, strided<[1024, 1], offset: ?>> to memref<1x32xf32, strided<[1024, 1], offset: ?>> -# CHECK-NEXT: %subview_26 = memref.subview %subview_21[%arg17, 0] [1, 32] [1, 1] : memref<32x32xf32, strided<[1024, 1], offset: ?>> to memref<1x32xf32, strided<[1024, 1], offset: ?>> -# CHECK-NEXT: %c0_27 = arith.constant 0 : index -# CHECK-NEXT: %c32_28 = arith.constant 32 : index -# CHECK-NEXT: %c1_29 = arith.constant 1 : index -# CHECK-NEXT: scf.for %arg18 = %c0_27 to %c32_28 step %c1_29 { -# CHECK-NEXT: %subview_37 = memref.subview %subview_24[0, 0] [1, 1] [1, 1] : memref<1x1xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> -# CHECK-NEXT: %subview_38 = memref.subview %subview_25[0, %arg18] [1, 1] [1, 1] : memref<1x32xf32, strided<[1024, 1], offset: ?>> to memref<1x1xf32, strided<[1024, 1], offset: ?>> -# CHECK-NEXT: %subview_39 = memref.subview %subview_26[0, %arg18] [1, 1] [1, 1] : memref<1x32xf32, strided<[1024, 1], offset: ?>> to memref<1x1xf32, strided<[1024, 1], offset: ?>> -# CHECK-NEXT: linalg.matmul {__xtc_id_C_} ins(%subview_37, %subview_38 : memref<1x1xf32, strided<[512, 1], offset: ?>>, memref<1x1xf32, strided<[1024, 1], offset: ?>>) outs(%subview_39 : memref<1x1xf32, strided<[1024, 1], offset: ?>>) -# CHECK-NEXT: } {"./j2"} -# CHECK-NEXT: %c1_30 = arith.constant 1 : index -# CHECK-NEXT: %4 = arith.muli %c1_23, %c1_30 : index -# CHECK-NEXT: %5 = arith.addi %arg17, %4 : index -# CHECK-NEXT: %subview_31 = memref.subview %subview_19[%5, 0] [1, 1] [1, 1] : memref<32x1xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> -# CHECK-NEXT: %subview_32 = memref.subview %subview_20[0, 0] [1, 32] [1, 1] : memref<1x32xf32, strided<[1024, 1], offset: ?>> to memref<1x32xf32, strided<[1024, 1], offset: ?>> -# CHECK-NEXT: %subview_33 = memref.subview %subview_21[%5, 0] [1, 32] [1, 1] : memref<32x32xf32, strided<[1024, 1], offset: ?>> to memref<1x32xf32, strided<[1024, 1], offset: ?>> -# CHECK-NEXT: %c0_34 = arith.constant 0 : index -# CHECK-NEXT: %c32_35 = arith.constant 32 : index -# CHECK-NEXT: %c1_36 = arith.constant 1 : index -# CHECK-NEXT: scf.for %arg18 = %c0_34 to %c32_35 step %c1_36 { -# CHECK-NEXT: %subview_37 = memref.subview %subview_31[0, 0] [1, 1] [1, 1] : memref<1x1xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> -# CHECK-NEXT: %subview_38 = memref.subview %subview_32[0, %arg18] [1, 1] [1, 1] : memref<1x32xf32, strided<[1024, 1], offset: ?>> to memref<1x1xf32, strided<[1024, 1], offset: ?>> -# CHECK-NEXT: %subview_39 = memref.subview %subview_33[0, %arg18] [1, 1] [1, 1] : memref<1x32xf32, strided<[1024, 1], offset: ?>> to memref<1x1xf32, strided<[1024, 1], offset: ?>> -# CHECK-NEXT: linalg.matmul {__xtc_id_C_} ins(%subview_37, %subview_38 : memref<1x1xf32, strided<[512, 1], offset: ?>>, memref<1x1xf32, strided<[1024, 1], offset: ?>>) outs(%subview_39 : memref<1x1xf32, strided<[1024, 1], offset: ?>>) +# CHECK-NEXT: %3 = affine.apply #map1(%thread_id_x) +# CHECK-NEXT: %4 = affine.apply #map1(%thread_id_y) +# CHECK-NEXT: %subview_9 = memref.subview %subview[%3, 0] [32, 512] [1, 1] : memref<128x512xf32, strided<[512, 1], offset: ?>> to memref<32x512xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_10 = memref.subview %subview_7[0, %4] [512, 32] [1, 1] : memref<512x128xf32, strided<[1024, 1], offset: ?>> to memref<512x32xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %subview_11 = memref.subview %subview_8[%3, %4] [32, 32] [1, 1] : memref<128x128xf32, strided<[1024, 1], offset: ?>> to memref<32x32xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %5 = scf.for %arg15 = %c0 to %c512 step %c64 iter_args(%arg16 = %subview_11) -> (memref<32x32xf32, strided<[1024, 1], offset: ?>>) { +# CHECK-NEXT: %subview_14 = memref.subview %subview_9[0, %arg15] [32, 64] [1, 1] : memref<32x512xf32, strided<[512, 1], offset: ?>> to memref<32x64xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_15 = memref.subview %subview_10[%arg15, 0] [64, 32] [1, 1] : memref<512x32xf32, strided<[1024, 1], offset: ?>> to memref<64x32xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %6 = scf.for %arg17 = %c0 to %c64 step %c1 iter_args(%arg18 = %arg16) -> (memref<32x32xf32, strided<[1024, 1], offset: ?>>) { +# CHECK-NEXT: %subview_16 = memref.subview %subview_14[0, %arg17] [32, 1] [1, 1] : memref<32x64xf32, strided<[512, 1], offset: ?>> to memref<32x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_17 = memref.subview %subview_15[%arg17, 0] [1, 32] [1, 1] : memref<64x32xf32, strided<[1024, 1], offset: ?>> to memref<1x32xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %7 = scf.for %arg19 = %c0 to %c32 step %c1 iter_args(%arg20 = %arg18) -> (memref<32x32xf32, strided<[1024, 1], offset: ?>>) { +# CHECK-NEXT: %subview_18 = memref.subview %subview_16[%arg19, 0] [1, 1] [1, 1] : memref<32x1xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_19 = memref.subview %arg20[%arg19, 0] [1, 32] [1, 1] : memref<32x32xf32, strided<[1024, 1], offset: ?>> to memref<1x32xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %8 = scf.for %arg21 = %c0 to %c32 step %c1 iter_args(%arg22 = %subview_19) -> (memref<1x32xf32, strided<[1024, 1], offset: ?>>) { +# CHECK-NEXT: %subview_21 = memref.subview %subview_17[0, %arg21] [1, 1] [1, 1] : memref<1x32xf32, strided<[1024, 1], offset: ?>> to memref<1x1xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %subview_22 = memref.subview %arg22[0, %arg21] [1, 1] [1, 1] : memref<1x32xf32, strided<[1024, 1], offset: ?>> to memref<1x1xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: linalg.matmul {__xtc_id_C_} ins(%subview_18, %subview_21 : memref<1x1xf32, strided<[512, 1], offset: ?>>, memref<1x1xf32, strided<[1024, 1], offset: ?>>) outs(%subview_22 : memref<1x1xf32, strided<[1024, 1], offset: ?>>) +# CHECK-NEXT: %subview_23 = memref.subview %arg22[0, %arg21] [1, 1] [1, 1] : memref<1x32xf32, strided<[1024, 1], offset: ?>> to memref<1x1xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: memref.copy %subview_22, %subview_23 : memref<1x1xf32, strided<[1024, 1], offset: ?>> to memref<1x1xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: scf.yield %arg22 : memref<1x32xf32, strided<[1024, 1], offset: ?>> # CHECK-NEXT: } {"./j2"} +# CHECK-NEXT: %subview_20 = memref.subview %arg20[%arg19, 0] [1, 32] [1, 1] : memref<32x32xf32, strided<[1024, 1], offset: ?>> to memref<1x32xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: memref.copy %8, %subview_20 : memref<1x32xf32, strided<[1024, 1], offset: ?>> to memref<1x32xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: scf.yield %arg20 : memref<32x32xf32, strided<[1024, 1], offset: ?>> # CHECK-NEXT: } {"./i2"} +# CHECK-NEXT: scf.yield %7 : memref<32x32xf32, strided<[1024, 1], offset: ?>> # CHECK-NEXT: } {"./k1"} +# CHECK-NEXT: scf.yield %6 : memref<32x32xf32, strided<[1024, 1], offset: ?>> # CHECK-NEXT: } {"./k"} +# CHECK-NEXT: %subview_12 = memref.subview %subview_8[%3, %4] [32, 32] [1, 1] : memref<128x128xf32, strided<[1024, 1], offset: ?>> to memref<32x32xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: memref.copy %5, %subview_12 : memref<32x32xf32, strided<[1024, 1], offset: ?>> to memref<32x32xf32, strided<[1024, 1], offset: ?>> # CHECK-NEXT: gpu.barrier +# CHECK-NEXT: %subview_13 = memref.subview %0[%1, %2] [128, 128] [1, 1] : memref<1024x1024xf32> to memref<128x128xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: memref.copy %subview_8, %subview_13 : memref<128x128xf32, strided<[1024, 1], offset: ?>> to memref<128x128xf32, strided<[1024, 1], offset: ?>> # CHECK-NEXT: gpu.terminator # CHECK-NEXT: } +# CHECK-NEXT: memref.copy %0, %arg2 : memref<1024x1024xf32> to memref<1024x1024xf32> # CHECK-NEXT: return # CHECK-NEXT: } # CHECK-NEXT: } diff --git a/tests/filecheck/evaluation/test_matmul_pmu_counters_gpu.py b/tests/filecheck/evaluation/test_matmul_pmu_counters_gpu.py index ab671deab..cb04ff23a 100644 --- a/tests/filecheck/evaluation/test_matmul_pmu_counters_gpu.py +++ b/tests/filecheck/evaluation/test_matmul_pmu_counters_gpu.py @@ -5,7 +5,7 @@ from xtc.backends.mlir import Backend from sys import platform -I, J, K, dtype = 32, 32, 512, "float32" +I, J, K, dtype = 256, 32, 512, "float32" a = O.tensor((I, K), dtype, name="A") b = O.tensor((K, J), dtype, name="B") @@ -17,11 +17,11 @@ impl = Backend(graph) sch = impl.get_scheduler() -sch.tile("i", {"i1": 16}) +sch.tile("i", {"i1": 128, "i2": 16}) sch.tile("j", {"j1": 16}) sch.vectorize(["j1"]) -sch.unroll({"i1": 2}) -sch.parallelize(["i"]) +sch.gpu_block(["i"]) +sch.gpu_thread(["i1"]) sched = sch.schedule() comp = impl.get_compiler( diff --git a/tests/filecheck/schedules/test_matmul_descript_gpu.py b/tests/filecheck/schedules/test_matmul_descript_gpu.py index 7a1080d50..28c991b66 100644 --- a/tests/filecheck/schedules/test_matmul_descript_gpu.py +++ b/tests/filecheck/schedules/test_matmul_descript_gpu.py @@ -26,11 +26,11 @@ node_name = "C", abstract_dims = ["I","J","K"], spec = { - "I": {"parallelize": True, "gpu_block": 0}, - "J": {"parallelize": True, "gpu_block": 1}, + "I": {"gpu_block": 0}, + "J": {"gpu_block": 1}, "K": {}, - "I#128": {"parallelize": True, "gpu_thread": 0}, - "J#128": {"parallelize": True, "gpu_thread": 1}, + "I#128": {"gpu_thread": 0}, + "J#128": {"gpu_thread": 1}, "I#32": {}, "J#32": {}, @@ -53,10 +53,10 @@ # CHECK: // -----// IR Dump Before transform //----- // # CHECK-NEXT: module attributes {transform.with_named_sequence} { -# CHECK-NEXT: func.func @matmul(%arg0: memref<4x512xf32> {llvm.noalias}, %arg1: memref<512x32xf32> {llvm.noalias}, %arg2: memref<4x32xf32> {llvm.noalias}) { +# CHECK-NEXT: func.func @matmul(%arg0: memref<1024x512xf32> {llvm.noalias}, %arg1: memref<512x1024xf32> {llvm.noalias, memref.on_device}, %arg2: memref<1024x1024xf32> {llvm.noalias, memref.on_device}) { # CHECK-NEXT: %cst = arith.constant 0.000000e+00 : f32 -# CHECK-NEXT: linalg.fill {__xtc_id_C_0_} ins(%cst : f32) outs(%arg2 : memref<4x32xf32>) -# CHECK-NEXT: linalg.matmul {__xtc_id_C_} ins(%arg0, %arg1 : memref<4x512xf32>, memref<512x32xf32>) outs(%arg2 : memref<4x32xf32>) +# CHECK-NEXT: linalg.fill {__xtc_id_C_0_} ins(%cst : f32) outs(%arg2 : memref<1024x1024xf32>) +# CHECK-NEXT: linalg.matmul {__xtc_id_C_} ins(%arg0, %arg1 : memref<1024x512xf32>, memref<512x1024xf32>) outs(%arg2 : memref<1024x1024xf32>) # CHECK-NEXT: return # CHECK-NEXT: } # CHECK-NEXT: transform.named_sequence @_vecto(%arg0: !transform.any_op {transform.consumed}) { @@ -70,86 +70,98 @@ # CHECK-NEXT: %tiled_linalg_op_0, %loops_1 = transform.structured.tile_using_for %tiled_linalg_op tile_sizes [0, 1] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) # CHECK-NEXT: transform.annotate %loops_1 "./j" : !transform.any_op # CHECK-NEXT: %1 = transform.structured.match attributes {__xtc_id_C_} in %arg0 : (!transform.any_op) -> !transform.any_op -# CHECK-NEXT: %tiled_linalg_op_2, %loops_3 = transform.structured.tile_using_for %1 tile_sizes [0, 0, 1] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) -# CHECK-NEXT: transform.annotate %loops_3 "C/K" : !transform.any_op -# CHECK-NEXT: %tiled_linalg_op_4, %loops_5 = transform.structured.tile_using_for %tiled_linalg_op_2 tile_sizes [2, 0, 0] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) -# CHECK-NEXT: transform.annotate %loops_5 "C/I" : !transform.any_op -# CHECK-NEXT: %tiled_linalg_op_6, %loops_7 = transform.structured.tile_using_for %tiled_linalg_op_4 tile_sizes [0, 16, 0] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) -# CHECK-NEXT: transform.annotate %loops_7 "C/J" : !transform.any_op -# CHECK-NEXT: %tiled_linalg_op_8, %loops_9 = transform.structured.tile_using_for %tiled_linalg_op_6 tile_sizes [1, 0, 0] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: %tiled_linalg_op_2, %loops_3 = transform.structured.tile_using_for %1 tile_sizes [128, 0, 0] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: transform.annotate %loops_3 "C/I" : !transform.any_op +# CHECK-NEXT: %tiled_linalg_op_4, %loops_5 = transform.structured.tile_using_for %tiled_linalg_op_2 tile_sizes [0, 128, 0] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: transform.annotate %loops_5 "C/J" : !transform.any_op +# CHECK-NEXT: %tiled_linalg_op_6, %loops_7 = transform.structured.tile_using_for %tiled_linalg_op_4 tile_sizes [0, 0, 1] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: transform.annotate %loops_7 "C/K" : !transform.any_op +# CHECK-NEXT: %tiled_linalg_op_8, %loops_9 = transform.structured.tile_using_for %tiled_linalg_op_6 tile_sizes [32, 0, 0] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) # CHECK-NEXT: transform.annotate %loops_9 "C/I0" : !transform.any_op -# CHECK-NEXT: transform.include @_vecto failures(suppress) (%tiled_linalg_op_8) : (!transform.any_op) -> () -# CHECK-NEXT: transform.loop.unroll %loops_9 {factor = 2 : i64} : !transform.any_op -# CHECK-NEXT: %2 = transform.get_parent_op %loops_3 {isolated_from_above} : (!transform.any_op) -> !transform.any_op -# CHECK-NEXT: transform.apply_patterns to %2 { -# CHECK-NEXT: transform.apply_patterns.vector.reduction_to_contract -# CHECK-NEXT: transform.apply_patterns.vector.transfer_permutation_patterns -# CHECK-NEXT: } : !transform.any_op -# CHECK-NEXT: transform.apply_patterns to %2 { -# CHECK-NEXT: transform.apply_patterns.vector.lower_outerproduct -# CHECK-NEXT: transform.apply_patterns.vector.lower_contraction -# CHECK-NEXT: } : !transform.any_op +# CHECK-NEXT: %tiled_linalg_op_10, %loops_11 = transform.structured.tile_using_for %tiled_linalg_op_8 tile_sizes [0, 32, 0] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: transform.annotate %loops_11 "C/J0" : !transform.any_op +# CHECK-NEXT: %tiled_linalg_op_12, %loops_13 = transform.structured.tile_using_for %tiled_linalg_op_10 tile_sizes [1, 0, 0] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: transform.annotate %loops_13 "C/I1" : !transform.any_op +# CHECK-NEXT: %tiled_linalg_op_14, %loops_15 = transform.structured.tile_using_for %tiled_linalg_op_12 tile_sizes [0, 1, 0] : (!transform.any_op) -> (!transform.any_op, !transform.any_op) +# CHECK-NEXT: transform.annotate %loops_15 "C/J1" : !transform.any_op # CHECK-NEXT: transform.yield # CHECK-NEXT: } # CHECK-NEXT: } # CHECK-NEXT: # CHECK-NEXT: // -----// IR Dump After transform //----- // # CHECK-NEXT: module attributes {transform.with_named_sequence} { -# CHECK-NEXT: func.func @matmul(%arg0: memref<4x512xf32> {llvm.noalias}, %arg1: memref<512x32xf32> {llvm.noalias}, %arg2: memref<4x32xf32> {llvm.noalias}) { -# CHECK-NEXT: %cst = arith.constant dense<0.000000e+00> : vector<1x16xf32> -# CHECK-NEXT: %0 = ub.poison : f32 -# CHECK-NEXT: %c16 = arith.constant 16 : index -# CHECK-NEXT: %c2 = arith.constant 2 : index -# CHECK-NEXT: %c512 = arith.constant 512 : index -# CHECK-NEXT: %c32 = arith.constant 32 : index -# CHECK-NEXT: %cst_0 = arith.constant 0.000000e+00 : f32 +# CHECK-NEXT: func.func @matmul(%arg0: memref<1024x512xf32> {llvm.noalias}, %arg1: memref<512x1024xf32> {llvm.noalias, memref.on_device}, %arg2: memref<1024x1024xf32> {llvm.noalias, memref.on_device}) { +# CHECK-NEXT: %cst = arith.constant 0.000000e+00 : f32 # CHECK-NEXT: %c0 = arith.constant 0 : index -# CHECK-NEXT: %c4 = arith.constant 4 : index +# CHECK-NEXT: %c1024 = arith.constant 1024 : index # CHECK-NEXT: %c1 = arith.constant 1 : index -# CHECK-NEXT: scf.for %arg3 = %c0 to %c4 step %c1 { -# CHECK-NEXT: %subview = memref.subview %arg2[%arg3, 0] [1, 32] [1, 1] : memref<4x32xf32> to memref<1x32xf32, strided<[32, 1], offset: ?>> -# CHECK-NEXT: scf.for %arg4 = %c0 to %c32 step %c1 { -# CHECK-NEXT: %subview_1 = memref.subview %subview[0, %arg4] [1, 1] [1, 1] : memref<1x32xf32, strided<[32, 1], offset: ?>> to memref<1x1xf32, strided<[32, 1], offset: ?>> -# CHECK-NEXT: linalg.fill {__xtc_id_C_0_} ins(%cst_0 : f32) outs(%subview_1 : memref<1x1xf32, strided<[32, 1], offset: ?>>) +# CHECK-NEXT: scf.for %arg3 = %c0 to %c1024 step %c1 { +# CHECK-NEXT: %subview = memref.subview %arg2[%arg3, 0] [1, 1024] [1, 1] : memref<1024x1024xf32> to memref<1x1024xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %c0_2 = arith.constant 0 : index +# CHECK-NEXT: %c1024_3 = arith.constant 1024 : index +# CHECK-NEXT: %c1_4 = arith.constant 1 : index +# CHECK-NEXT: scf.for %arg4 = %c0_2 to %c1024_3 step %c1_4 { +# CHECK-NEXT: %subview_5 = memref.subview %subview[0, %arg4] [1, 1] [1, 1] : memref<1x1024xf32, strided<[1024, 1], offset: ?>> to memref<1x1xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: linalg.fill {__xtc_id_C_0_} ins(%cst : f32) outs(%subview_5 : memref<1x1xf32, strided<[1024, 1], offset: ?>>) # CHECK-NEXT: } {"./j"} # CHECK-NEXT: } {"./i"} -# CHECK-NEXT: scf.for %arg3 = %c0 to %c512 step %c1 { -# CHECK-NEXT: %subview = memref.subview %arg0[0, %arg3] [4, 1] [1, 1] : memref<4x512xf32> to memref<4x1xf32, strided<[512, 1], offset: ?>> -# CHECK-NEXT: %subview_1 = memref.subview %arg1[%arg3, 0] [1, 32] [1, 1] : memref<512x32xf32> to memref<1x32xf32, strided<[32, 1], offset: ?>> -# CHECK-NEXT: %subview_2 = memref.subview %arg2[0, 0] [4, 32] [1, 1] : memref<4x32xf32> to memref<4x32xf32, strided<[32, 1]>> -# CHECK-NEXT: scf.for %arg4 = %c0 to %c4 step %c2 { -# CHECK-NEXT: %subview_3 = memref.subview %subview[%arg4, 0] [2, 1] [1, 1] : memref<4x1xf32, strided<[512, 1], offset: ?>> to memref<2x1xf32, strided<[512, 1], offset: ?>> -# CHECK-NEXT: %subview_4 = memref.subview %subview_2[%arg4, 0] [2, 32] [1, 1] : memref<4x32xf32, strided<[32, 1]>> to memref<2x32xf32, strided<[32, 1], offset: ?>> -# CHECK-NEXT: scf.for %arg5 = %c0 to %c32 step %c16 { -# CHECK-NEXT: %subview_5 = memref.subview %subview_1[0, %arg5] [1, 16] [1, 1] : memref<1x32xf32, strided<[32, 1], offset: ?>> to memref<1x16xf32, strided<[32, 1], offset: ?>> -# CHECK-NEXT: %subview_6 = memref.subview %subview_4[0, %arg5] [2, 16] [1, 1] : memref<2x32xf32, strided<[32, 1], offset: ?>> to memref<2x16xf32, strided<[32, 1], offset: ?>> -# CHECK-NEXT: %subview_7 = memref.subview %subview_3[%c0, 0] [1, 1] [1, 1] : memref<2x1xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> -# CHECK-NEXT: %subview_8 = memref.subview %subview_6[%c0, 0] [1, 16] [1, 1] : memref<2x16xf32, strided<[32, 1], offset: ?>> to memref<1x16xf32, strided<[32, 1], offset: ?>> -# CHECK-NEXT: %1 = vector.transfer_read %subview_7[%c0, %c0], %0 {in_bounds = [true, true]} : memref<1x1xf32, strided<[512, 1], offset: ?>>, vector<1x1xf32> -# CHECK-NEXT: %2 = vector.transfer_read %subview_5[%c0, %c0], %0 {in_bounds = [true, true]} : memref<1x16xf32, strided<[32, 1], offset: ?>>, vector<1x16xf32> -# CHECK-NEXT: %3 = vector.transfer_read %subview_8[%c0, %c0], %0 {in_bounds = [true, true]} : memref<1x16xf32, strided<[32, 1], offset: ?>>, vector<1x16xf32> -# CHECK-NEXT: %4 = vector.extract %2[0] : vector<16xf32> from vector<1x16xf32> -# CHECK-NEXT: %5 = vector.extract %1[0, 0] : f32 from vector<1x1xf32> -# CHECK-NEXT: %6 = vector.broadcast %5 : f32 to vector<16xf32> -# CHECK-NEXT: %7 = vector.extract %3[0] : vector<16xf32> from vector<1x16xf32> -# CHECK-NEXT: %8 = vector.fma %6, %4, %7 : vector<16xf32> -# CHECK-NEXT: %9 = vector.insert %8, %cst [0] : vector<16xf32> into vector<1x16xf32> -# CHECK-NEXT: vector.transfer_write %9, %subview_8[%c0, %c0] {in_bounds = [true, true]} : vector<1x16xf32>, memref<1x16xf32, strided<[32, 1], offset: ?>> -# CHECK-NEXT: %subview_9 = memref.subview %subview_3[%c1, 0] [1, 1] [1, 1] : memref<2x1xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> -# CHECK-NEXT: %subview_10 = memref.subview %subview_6[%c1, 0] [1, 16] [1, 1] : memref<2x16xf32, strided<[32, 1], offset: ?>> to memref<1x16xf32, strided<[32, 1], offset: ?>> -# CHECK-NEXT: %10 = vector.transfer_read %subview_9[%c0, %c0], %0 {in_bounds = [true, true]} : memref<1x1xf32, strided<[512, 1], offset: ?>>, vector<1x1xf32> -# CHECK-NEXT: %11 = vector.transfer_read %subview_5[%c0, %c0], %0 {in_bounds = [true, true]} : memref<1x16xf32, strided<[32, 1], offset: ?>>, vector<1x16xf32> -# CHECK-NEXT: %12 = vector.transfer_read %subview_10[%c0, %c0], %0 {in_bounds = [true, true]} : memref<1x16xf32, strided<[32, 1], offset: ?>>, vector<1x16xf32> -# CHECK-NEXT: %13 = vector.extract %11[0] : vector<16xf32> from vector<1x16xf32> -# CHECK-NEXT: %14 = vector.extract %10[0, 0] : f32 from vector<1x1xf32> -# CHECK-NEXT: %15 = vector.broadcast %14 : f32 to vector<16xf32> -# CHECK-NEXT: %16 = vector.extract %12[0] : vector<16xf32> from vector<1x16xf32> -# CHECK-NEXT: %17 = vector.fma %15, %13, %16 : vector<16xf32> -# CHECK-NEXT: %18 = vector.insert %17, %cst [0] : vector<16xf32> into vector<1x16xf32> -# CHECK-NEXT: vector.transfer_write %18, %subview_10[%c0, %c0] {in_bounds = [true, true]} : vector<1x16xf32>, memref<1x16xf32, strided<[32, 1], offset: ?>> -# CHECK-NEXT: } {"C/J"} -# CHECK-NEXT: } {"C/I"} -# CHECK-NEXT: } {"C/K"} +# CHECK-NEXT: %c0_0 = arith.constant 0 : index +# CHECK-NEXT: %c1024_1 = arith.constant 1024 : index +# CHECK-NEXT: %c128 = arith.constant 128 : index +# CHECK-NEXT: scf.for %arg3 = %c0_0 to %c1024_1 step %c128 { +# CHECK-NEXT: %subview = memref.subview %arg0[%arg3, 0] [128, 512] [1, 1] : memref<1024x512xf32> to memref<128x512xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_2 = memref.subview %arg1[0, 0] [512, 1024] [1, 1] : memref<512x1024xf32> to memref<512x1024xf32, strided<[1024, 1]>> +# CHECK-NEXT: %subview_3 = memref.subview %arg2[%arg3, 0] [128, 1024] [1, 1] : memref<1024x1024xf32> to memref<128x1024xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %c0_4 = arith.constant 0 : index +# CHECK-NEXT: %c1024_5 = arith.constant 1024 : index +# CHECK-NEXT: %c128_6 = arith.constant 128 : index +# CHECK-NEXT: scf.for %arg4 = %c0_4 to %c1024_5 step %c128_6 { +# CHECK-NEXT: %subview_7 = memref.subview %subview[0, 0] [128, 512] [1, 1] : memref<128x512xf32, strided<[512, 1], offset: ?>> to memref<128x512xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_8 = memref.subview %subview_2[0, %arg4] [512, 128] [1, 1] : memref<512x1024xf32, strided<[1024, 1]>> to memref<512x128xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %subview_9 = memref.subview %subview_3[0, %arg4] [128, 128] [1, 1] : memref<128x1024xf32, strided<[1024, 1], offset: ?>> to memref<128x128xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %c0_10 = arith.constant 0 : index +# CHECK-NEXT: %c512 = arith.constant 512 : index +# CHECK-NEXT: %c1_11 = arith.constant 1 : index +# CHECK-NEXT: scf.for %arg5 = %c0_10 to %c512 step %c1_11 { +# CHECK-NEXT: %subview_12 = memref.subview %subview_7[0, %arg5] [128, 1] [1, 1] : memref<128x512xf32, strided<[512, 1], offset: ?>> to memref<128x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_13 = memref.subview %subview_8[%arg5, 0] [1, 128] [1, 1] : memref<512x128xf32, strided<[1024, 1], offset: ?>> to memref<1x128xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %subview_14 = memref.subview %subview_9[0, 0] [128, 128] [1, 1] : memref<128x128xf32, strided<[1024, 1], offset: ?>> to memref<128x128xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %c0_15 = arith.constant 0 : index +# CHECK-NEXT: %c128_16 = arith.constant 128 : index +# CHECK-NEXT: %c32 = arith.constant 32 : index +# CHECK-NEXT: scf.for %arg6 = %c0_15 to %c128_16 step %c32 { +# CHECK-NEXT: %subview_17 = memref.subview %subview_12[%arg6, 0] [32, 1] [1, 1] : memref<128x1xf32, strided<[512, 1], offset: ?>> to memref<32x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_18 = memref.subview %subview_13[0, 0] [1, 128] [1, 1] : memref<1x128xf32, strided<[1024, 1], offset: ?>> to memref<1x128xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %subview_19 = memref.subview %subview_14[%arg6, 0] [32, 128] [1, 1] : memref<128x128xf32, strided<[1024, 1], offset: ?>> to memref<32x128xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %c0_20 = arith.constant 0 : index +# CHECK-NEXT: %c128_21 = arith.constant 128 : index +# CHECK-NEXT: %c32_22 = arith.constant 32 : index +# CHECK-NEXT: scf.for %arg7 = %c0_20 to %c128_21 step %c32_22 { +# CHECK-NEXT: %subview_23 = memref.subview %subview_17[0, 0] [32, 1] [1, 1] : memref<32x1xf32, strided<[512, 1], offset: ?>> to memref<32x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_24 = memref.subview %subview_18[0, %arg7] [1, 32] [1, 1] : memref<1x128xf32, strided<[1024, 1], offset: ?>> to memref<1x32xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %subview_25 = memref.subview %subview_19[0, %arg7] [32, 32] [1, 1] : memref<32x128xf32, strided<[1024, 1], offset: ?>> to memref<32x32xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %c0_26 = arith.constant 0 : index +# CHECK-NEXT: %c32_27 = arith.constant 32 : index +# CHECK-NEXT: %c1_28 = arith.constant 1 : index +# CHECK-NEXT: scf.for %arg8 = %c0_26 to %c32_27 step %c1_28 { +# CHECK-NEXT: %subview_29 = memref.subview %subview_23[%arg8, 0] [1, 1] [1, 1] : memref<32x1xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_30 = memref.subview %subview_24[0, 0] [1, 32] [1, 1] : memref<1x32xf32, strided<[1024, 1], offset: ?>> to memref<1x32xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %subview_31 = memref.subview %subview_25[%arg8, 0] [1, 32] [1, 1] : memref<32x32xf32, strided<[1024, 1], offset: ?>> to memref<1x32xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %c0_32 = arith.constant 0 : index +# CHECK-NEXT: %c32_33 = arith.constant 32 : index +# CHECK-NEXT: %c1_34 = arith.constant 1 : index +# CHECK-NEXT: scf.for %arg9 = %c0_32 to %c32_33 step %c1_34 { +# CHECK-NEXT: %subview_35 = memref.subview %subview_29[0, 0] [1, 1] [1, 1] : memref<1x1xf32, strided<[512, 1], offset: ?>> to memref<1x1xf32, strided<[512, 1], offset: ?>> +# CHECK-NEXT: %subview_36 = memref.subview %subview_30[0, %arg9] [1, 1] [1, 1] : memref<1x32xf32, strided<[1024, 1], offset: ?>> to memref<1x1xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: %subview_37 = memref.subview %subview_31[0, %arg9] [1, 1] [1, 1] : memref<1x32xf32, strided<[1024, 1], offset: ?>> to memref<1x1xf32, strided<[1024, 1], offset: ?>> +# CHECK-NEXT: linalg.matmul {__xtc_id_C_} ins(%subview_35, %subview_36 : memref<1x1xf32, strided<[512, 1], offset: ?>>, memref<1x1xf32, strided<[1024, 1], offset: ?>>) outs(%subview_37 : memref<1x1xf32, strided<[1024, 1], offset: ?>>) +# CHECK-NEXT: } {"C/J1"} +# CHECK-NEXT: } {"C/I1"} +# CHECK-NEXT: } {"C/J0"} +# CHECK-NEXT: } {"C/I0"} +# CHECK-NEXT: } {"C/K"} +# CHECK-NEXT: } {"C/J"} +# CHECK-NEXT: } {"C/I"} # CHECK-NEXT: return # CHECK-NEXT: } # CHECK-NEXT: } @@ -157,11 +169,11 @@ # CHECK-NEXT: graph: # CHECK-NEXT: name: matmul # CHECK-NEXT: inputs: -# CHECK-NEXT: - %0 : 4x512xfloat32 -# CHECK-NEXT: - %1 : 512x32xfloat32 +# CHECK-NEXT: - %0 : 1024x512xfloat32 +# CHECK-NEXT: - %1 : 512x1024xfloat32 # CHECK-NEXT: outputs: -# CHECK-NEXT: - %2 : 4x32xfloat32 +# CHECK-NEXT: - %2 : 1024x1024xfloat32 # CHECK-NEXT: nodes: -# CHECK-NEXT: - %2: matmul(%0, %1) {name = 'C'} : [4x512xfloat32, 512x32xfloat32] -> [4x32xfloat32] +# CHECK-NEXT: - %2: matmul(%0, %1) {name = 'C'} : [1024x512xfloat32, 512x1024xfloat32] -> [1024x1024xfloat32] # CHECK-NEXT: # CHECK-NEXT: CODE: 0