From 5eedbe24a4b588927fdc29e27619e6f053d865e1 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner <inform@tiker.net> Date: Sun, 23 Sep 2012 10:19:30 -0500 Subject: [PATCH] Support instructions all in a single string. --- loopy/kernel.py | 30 +++++++++++++++++++++--------- test/test_linalg.py | 14 ++++++++------ 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/loopy/kernel.py b/loopy/kernel.py index 5add79c78..d1eb4eddd 100644 --- a/loopy/kernel.py +++ b/loopy/kernel.py @@ -902,13 +902,23 @@ class LoopKernel(Record): "instance or a parseable string. got '%s' instead." % type(insn)) - for insn in expand_defines(insn, defines, single_valued=False): - parse_insn(insn) + for insn in insn.split("\n"): + insn = insn.strip() + + if not insn: + continue + if insn.startswith("#"): + continue + + for sub_insn in expand_defines(insn, defines, single_valued=False): + parse_insn(sub_insn) parsed_instructions = [] substitutions = substitutions.copy() + if isinstance(instructions, str): + instructions = [instructions] for insn in instructions: # must construct list one-by-one to facilitate unique id generation parse_if_necessary(insn) @@ -979,13 +989,15 @@ class LoopKernel(Record): processed_args = [] for arg in args: - if isinstance(arg, _ShapedArg): - if arg.shape is not None: - arg = arg.copy(shape=expand_defines_in_expr(arg.shape, defines)) - if arg.strides is not None: - arg = arg.copy(strides=expand_defines_in_expr(arg.strides, defines)) - - processed_args.append(arg) + for name in arg.name.split(","): + new_arg = arg.copy(name=name) + if isinstance(arg, _ShapedArg): + if arg.shape is not None: + new_arg = new_arg.copy(shape=expand_defines_in_expr(arg.shape, defines)) + if arg.strides is not None: + new_arg = new_arg.copy(strides=expand_defines_in_expr(arg.strides, defines)) + + processed_args.append(new_arg) # }}} diff --git a/test/test_linalg.py b/test/test_linalg.py index 84878d972..b6087f442 100644 --- a/test/test_linalg.py +++ b/test/test_linalg.py @@ -273,9 +273,10 @@ def test_variable_size_matrix_mul(ctx_factory): def test_rank_one(ctx_factory): dtype = np.float32 ctx = ctx_factory() - order = "C" + order = "F" - n = int(get_suitable_size(ctx)**(2.7/2)) + #n = int(get_suitable_size(ctx)**(2.7/2)) + n = 16**3 knl = lp.make_kernel(ctx.devices[0], "[n] -> {[i,j]: 0<=i,j<n}", @@ -288,7 +289,8 @@ def test_rank_one(ctx_factory): lp.GlobalArg("c", dtype, shape=("n, n"), order=order), lp.ValueArg("n", np.int32, approximately=n), ], - name="rank_one", assumptions="n >= 16") + name="rank_one", + assumptions="n >= 16") def variant_1(knl): knl = lp.add_prefetch(knl, "a") @@ -337,15 +339,15 @@ def test_rank_one(ctx_factory): seq_knl = knl - for variant in [variant_1, variant_2, variant_3, variant_4]: - #for variant in [variant_1]: + #for variant in [variant_1, variant_2, variant_3, variant_4]: + for variant in [variant_4]: kernel_gen = lp.generate_loop_schedules(variant(knl), loop_priority=["i", "j"]) kernel_gen = lp.check_kernels(kernel_gen, dict(n=n)) lp.auto_test_vs_ref(seq_knl, ctx, kernel_gen, op_count=[np.dtype(dtype).itemsize*n**2/1e9], op_label=["GBytes"], - parameters={"n": n}) + parameters={"n": n}, edit_code=True, do_check=False) -- GitLab