def find_accessing_instructions_in_subkernel(self, temporary, subkernel): # Find all accessing instructions in the subkernel. If base_storage is # present, this includes instructions that access aliasing memory. aliasing_names = set([temporary]) base_storage = self.kernel.temporary_variables[temporary].base_storage if base_storage is not None: aliasing_names |= self.base_storage_to_temporary_map[base_storage] from loopy.kernel.tools import get_subkernel_to_insn_id_map accessing_insns_in_subkernel = set() subkernel_insns = get_subkernel_to_insn_id_map(self.kernel)[subkernel] for name in aliasing_names: try: accessing_insns_in_subkernel |= (self.kernel.reader_map()[name] & subkernel_insns) except KeyError: pass try: accessing_insns_in_subkernel |= (self.kernel.writer_map()[name] & subkernel_insns) except KeyError: pass return frozenset(accessing_insns_in_subkernel)
def temporaries_written_in_subkernel(kernel, subkernel): from loopy.kernel.tools import get_subkernel_to_insn_id_map insn_ids = get_subkernel_to_insn_id_map(kernel)[subkernel] return frozenset(tv for insn_id in insn_ids for tv in kernel.id_to_insn[insn_id].write_dependency_names() if tv in kernel.temporary_variables)
def temporaries_written_in_subkernel(kernel, subkernel): from loopy.kernel.tools import get_subkernel_to_insn_id_map insn_ids = get_subkernel_to_insn_id_map(kernel)[subkernel] return frozenset( tv for insn_id in insn_ids for tv in kernel.id_to_insn[insn_id].write_dependency_names() if tv in kernel.temporary_variables)
def find_accessing_instructions_in_subkernel(self, temporary, subkernel): # Find all accessing instructions in the subkernel. If base_storage is # present, this includes instructions that access aliasing memory. aliasing_names = set([temporary]) base_storage = self.kernel.temporary_variables[temporary].base_storage if base_storage is not None: aliasing_names |= self.base_storage_to_temporary_map[base_storage] from loopy.kernel.tools import get_subkernel_to_insn_id_map accessing_insns_in_subkernel = set() subkernel_insns = get_subkernel_to_insn_id_map(self.kernel)[subkernel] for name in aliasing_names: try: accessing_insns_in_subkernel |= ( self.kernel.reader_map()[name] & subkernel_insns) except KeyError: pass try: accessing_insns_in_subkernel |= ( self.kernel.writer_map()[name] & subkernel_insns) except KeyError: pass return frozenset(accessing_insns_in_subkernel)