diff --git a/python/dune/perftool/loopy/transformations/duplicate.py b/python/dune/perftool/loopy/transformations/duplicate.py index eecdd9a8a16523a8b9e0422784734c7a58ab2f24..8d4a3cc0fef258620cd2ebc3d2f3dae64333bc2e 100644 --- a/python/dune/perftool/loopy/transformations/duplicate.py +++ b/python/dune/perftool/loopy/transformations/duplicate.py @@ -1,5 +1,5 @@ """ Iname duplication strategies to make kernels schedulable """ - +from dune.perftool.options import get_option from loopy import (has_schedulable_iname_nesting, get_iname_duplication_options, duplicate_inames, @@ -18,4 +18,18 @@ def heuristic_duplication(kernel): if has_schedulable_iname_nesting(dup_kernel): return dup_kernel + if get_option('blockstructured'): + duplication_options = dict(get_iname_duplication_options(kernel)) + suffixes = ['x','y','z'] + for iname in duplication_options: + if iname[-1] in suffixes: + dup_kernel = kernel + base = iname[:-1] + for s in suffixes: + if base+s in duplication_options: + dup_kernel = duplicate_inames(dup_kernel, base+s, duplication_options[base+s]) + del duplication_options[base+s] + if has_schedulable_iname_nesting(dup_kernel): + return dup_kernel + raise NotImplementedError("Your kernel needs multiple iname duplications! No generic algorithm implemented for that yet! (#39)") diff --git a/test/blockstructured/stokes/stokes.mini b/test/blockstructured/stokes/stokes.mini index c44cc189861c3a1e23963ff21fd56568fdaf4173..8f1ab6ab37cfb0ec17e1723e8fa50f17635902b5 100644 --- a/test/blockstructured/stokes/stokes.mini +++ b/test/blockstructured/stokes/stokes.mini @@ -1,7 +1,7 @@ __name = blockstructured_stokes_{__exec_suffix} __exec_suffix = symdiff, numdiff | expand num -cells = 20 20 +cells = 20 20z extension = 1. 1. [wrapper.vtkcompare]