def get_bounds_checks(domain, check_inames, implemented_domain, overapproximate): if isinstance(domain, isl.BasicSet): domain = isl.Set.from_basic_set(domain) domain = domain.remove_redundancies() result = domain.eliminate_except(check_inames, [dim_type.set]) if overapproximate: # This is ok, because we're really looking for the # projection, with no remaining constraints from # the eliminated variables. result = result.remove_divs() else: result = result.compute_divs() result, implemented_domain = isl.align_two(result, implemented_domain) result = result.gist(implemented_domain) if overapproximate: result = result.remove_divs() else: result = result.compute_divs() from loopy.isl_helpers import convexify result = convexify(result) return result.get_constraints()
def augment_domain_with_sweep(self, domain, new_non1_storage_axis_names, boxify_sweep=False): renamed_aug_domain = self.aug_domain first_storage_index = (renamed_aug_domain.dim(dim_type.set) - len(self.non1_storage_shape)) inon1 = 0 for i, old_name in enumerate(self.storage_axis_names): if not self.non1_storage_axis_flags[i]: continue new_name = new_non1_storage_axis_names[inon1] assert (renamed_aug_domain.get_dim_name( dim_type.set, first_storage_index + inon1) == old_name) renamed_aug_domain = renamed_aug_domain.set_dim_name( dim_type.set, first_storage_index + inon1, new_name) inon1 += 1 # Order of arguments to align_two matters--'domain' should be the # 'guiding' ordering. renamed_aug_domain, domain = isl.align_two(renamed_aug_domain, domain) domain = domain & renamed_aug_domain from loopy.isl_helpers import convexify, boxify if boxify_sweep: return boxify(self.kernel.cache_manager, domain, new_non1_storage_axis_names, self.kernel.assumptions) else: return convexify(domain)
def augment_domain_with_sweep(self, domain, new_non1_storage_axis_names, boxify_sweep=False): renamed_aug_domain = self.aug_domain first_storage_index = (renamed_aug_domain.dim(dim_type.set) - len(self.non1_storage_shape)) inon1 = 0 for i, old_name in enumerate(self.storage_axis_names): if not self.non1_storage_axis_flags[i]: continue new_name = new_non1_storage_axis_names[inon1] assert ( renamed_aug_domain.get_dim_name( dim_type.set, first_storage_index+inon1) == old_name) renamed_aug_domain = renamed_aug_domain.set_dim_name( dim_type.set, first_storage_index+inon1, new_name) inon1 += 1 # Order of arguments to align_two matters--'domain' should be the # 'guiding' ordering. renamed_aug_domain, domain = isl.align_two(renamed_aug_domain, domain) domain = domain & renamed_aug_domain from loopy.isl_helpers import convexify, boxify if boxify_sweep: return boxify(self.kernel.cache_manager, domain, new_non1_storage_axis_names, self.kernel.assumptions) else: return convexify(domain)