diff --git a/python/dune/perftool/options.py b/python/dune/perftool/options.py index ffd4551d13211626afe379a606ef894efb384743..ed0e007a73632da3c5110f616687a0286efcd297 100644 --- a/python/dune/perftool/options.py +++ b/python/dune/perftool/options.py @@ -59,6 +59,9 @@ class PerftoolOptionsArray(ImmutableRecord): vectorize_slice = PerftoolOption(default=False, helpstr="whether to generate code with explicit vectorization") vectorize_diagonal = PerftoolOption(default=False, helpstr="whether to generate code with explicit vectorization") vectorize_greedy = PerftoolOption(default=False, helpstr="the heuristic currently in use (to produce paper numbers)") + vectorize_horizontal = PerftoolOption(default=None, helpstr="an explicit value for horizontal vectorization") + vectorize_vertical = PerftoolOption(default=None, helpstr="an explicit value for vertical vectorization") + vectorize_padding = PerftoolOption(default=None, helpstr="an explicit value for padding in vectorization") turn_off_diagonal_jacobian = PerftoolOption(default=False, helpstr="Do not use diagonal_jacobian transformation on the ufl tree and cast result of jacobianInverseTransposed into a FieldMatrix.") architecture = PerftoolOption(default="haswell", helpstr="The architecture to optimize for. Possible values: haswell|knl") grid_offset = PerftoolOption(default=False, helpstr="Set to true if you want a yasp grid where the lower left corner is not in the origin.") diff --git a/python/dune/perftool/sumfact/vectorization.py b/python/dune/perftool/sumfact/vectorization.py index 303092f120d0df2b9f80575de739c7eef64c547b..d6918246cadec81c57cefd3c2b652d82d88f2f6c 100644 --- a/python/dune/perftool/sumfact/vectorization.py +++ b/python/dune/perftool/sumfact/vectorization.py @@ -124,12 +124,25 @@ def horizontal_vectorization_strategy(sumfacts, width, allow_padding=1): def diagonal_vectorization_strategy(sumfacts, width): + # Read explicitly set values + horizontal = get_option("vectorize_horizontal") + vertical = get_option("vectorize_vertical") + padding = get_option("vectorize_padding") + if width == 4: - horizontal, vertical = 2, 2 - padding = 0 + if horizontal is None: + horizontal = 2 + if vertical is None: + vertical = 2 + if padding is None: + padding = 0 elif width == 8: - horizontal, vertical = 4, 2 - padding = 1 + if horizontal is None: + horizontal = 4 + if vertical is None: + vertical = 2 + if padding is None: + padding = 1 else: raise NotImplementedError