Пример #1
0
    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)
Пример #2
0
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)
Пример #3
0
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)
Пример #4
0
    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)