From 74459c1a631e43dcc5ef62bc931192360a93a7d3 Mon Sep 17 00:00:00 2001 From: jdsteve2 Date: Sun, 21 Jul 2019 23:52:32 -0500 Subject: [PATCH 1/2] no longer removing no-ops from schedule; generating comment for no-op in codegen --- loopy/check.py | 6 +----- loopy/codegen/instruction.py | 14 +++++++++++++- loopy/schedule/__init__.py | 15 --------------- 3 files changed, 14 insertions(+), 21 deletions(-) diff --git a/loopy/check.py b/loopy/check.py index c31304d87..5fb7a2fb9 100644 --- a/loopy/check.py +++ b/loopy/check.py @@ -822,12 +822,8 @@ def check_that_temporaries_are_defined_in_subkernels_where_used(kernel): # {{{ check that all instructions are scheduled def check_that_all_insns_are_scheduled(kernel): - from loopy.kernel.instruction import NoOpInstruction - all_schedulable_insns = set( - insn.id for insn in kernel.instructions - # nops are not schedulable - if not isinstance(insn, NoOpInstruction)) + all_schedulable_insns = set(insn.id for insn in kernel.instructions) from loopy.schedule import sched_item_to_insn_id scheduled_insns = set( insn_id diff --git a/loopy/codegen/instruction.py b/loopy/codegen/instruction.py index e590502fb..20af0eeec 100644 --- a/loopy/codegen/instruction.py +++ b/loopy/codegen/instruction.py @@ -75,7 +75,9 @@ def to_codegen_result( def generate_instruction_code(codegen_state, insn): kernel = codegen_state.kernel - from loopy.kernel.instruction import Assignment, CallInstruction, CInstruction + from loopy.kernel.instruction import ( + Assignment, CallInstruction, CInstruction, NoOpInstruction + ) if isinstance(insn, Assignment): ast = generate_assignment_instruction_code(codegen_state, insn) @@ -83,6 +85,8 @@ def generate_instruction_code(codegen_state, insn): ast = generate_call_code(codegen_state, insn) elif isinstance(insn, CInstruction): ast = generate_c_instruction_code(codegen_state, insn) + elif isinstance(insn, NoOpInstruction): + ast = generate_nop_instruction_code(codegen_state, insn) else: raise RuntimeError("unexpected instruction type") @@ -275,4 +279,12 @@ def generate_c_instruction_code(codegen_state, insn): return Block(body) +def generate_nop_instruction_code(codegen_state, insn): + if codegen_state.vectorization_info is not None: + raise Unvectorizable("C instructions cannot be vectorized") + #from cgen import Comment + #return Comment("no-op (insn=%s)" % (insn.id)) + return codegen_state.ast_builder.emit_comment( + "no-op (insn=%s)" % (insn.id)) + # vim: foldmethod=marker diff --git a/loopy/schedule/__init__.py b/loopy/schedule/__init__.py index 378a1c0bf..fb0d0e2c1 100644 --- a/loopy/schedule/__init__.py +++ b/loopy/schedule/__init__.py @@ -1320,20 +1320,6 @@ def generate_loop_schedules_internal( # }}} -# {{{ filter nops from schedule - -def filter_nops_from_schedule(kernel, schedule): - from loopy.kernel.instruction import NoOpInstruction - return [ - sched_item - for sched_item in schedule - if (not isinstance(sched_item, RunInstruction) - or not isinstance(kernel.id_to_insn[sched_item.insn_id], - NoOpInstruction))] - -# }}} - - # {{{ convert barrier instructions to proper barriers def convert_barrier_instructions_to_barriers(kernel, schedule): @@ -1969,7 +1955,6 @@ def generate_loop_schedules_inner(kernel, debug_args={}): sched_state, debug=debug, **schedule_gen_kwargs): debug.stop() - gen_sched = filter_nops_from_schedule(kernel, gen_sched) gen_sched = convert_barrier_instructions_to_barriers( kernel, gen_sched) -- GitLab From 0729573b8edd0076d7a48fbf650b64587c6d0326 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Kl=C3=B6ckner?= Date: Tue, 23 Jul 2019 17:14:05 +0200 Subject: [PATCH 2/2] Remove (commented-out) direct usage of cgen in noop code gen --- loopy/codegen/instruction.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/loopy/codegen/instruction.py b/loopy/codegen/instruction.py index 20af0eeec..5e0747246 100644 --- a/loopy/codegen/instruction.py +++ b/loopy/codegen/instruction.py @@ -282,8 +282,6 @@ def generate_c_instruction_code(codegen_state, insn): def generate_nop_instruction_code(codegen_state, insn): if codegen_state.vectorization_info is not None: raise Unvectorizable("C instructions cannot be vectorized") - #from cgen import Comment - #return Comment("no-op (insn=%s)" % (insn.id)) return codegen_state.ast_builder.emit_comment( "no-op (insn=%s)" % (insn.id)) -- GitLab