def _make_partree(self, candidates, nthreads=None): """ Parallelize the `candidates` Iterations attaching suitable OpenMP pragmas for GPU offloading. """ assert candidates root = candidates[0] # Get the collapsable Iterations collapsable = self._find_collapsable(root, candidates) ncollapse = 1 + len(collapsable) # Prepare to build a ParallelTree omp_pragma = self.lang['par-for-teams'](ncollapse) # Create a ParallelTree body = root._rebuild(pragmas=root.pragmas + (omp_pragma,), properties=root.properties + (COLLAPSED(ncollapse),)) partree = ParallelTree([], body, nthreads=nthreads) collapsed = [partree] + collapsable return root, partree, collapsed
def _process_properties(cls, **kwargs): properties = as_tuple(kwargs.get('properties')) properties += (COLLAPSED(kwargs.get('ncollapse', 1)), ) return properties