diff --git a/python/dune/perftool/sumfact/vectorization.py b/python/dune/perftool/sumfact/vectorization.py index 6e228abe8a09fe32a27d1ec5d6cecbc6eb248af1..d9ca54c855a9bd304fcc9c7f81ccb26392fa9cff 100644 --- a/python/dune/perftool/sumfact/vectorization.py +++ b/python/dune/perftool/sumfact/vectorization.py @@ -155,6 +155,29 @@ def stringify_vectorization_strategy(strategy): return result +def short_stringify_vectorization_strategy(strategy): + """ A short string decribing the vectorization strategy. This is used + in costmodel validation plots to describe what a data point does + """ + qp, strategy = strategy + + def _short(k): + if isinstance(k, VectorizedSumfactKernel): + return str(k.horizontal_width) + else: + return "scalar" + + stage1 = [] + stage3 = [] + for kernel in strategy.values(): + if kernel.stage == 1: + stage1.append(_short(kernel)) + if kernel.stage == 3: + stage3.append(_short(kernel)) + + return "m0={};S1:{};S3:{}".format(qp[0], "|".join(stage1), "|".join(stage3)) + + def filter_active_inactive_sumfacts(): # Retrieve all sum factorization kernels for stage 1 and 3 from dune.perftool.generation import retrieve_cache_items @@ -261,7 +284,7 @@ def level1_optimal_vectorization_strategy(sumfacts, width): # TODO: Depending on the number of samples, we might need a file lock here. with open(filename, 'a') as f: - f.write("{} {}".format(identifier, cost)) + f.write(" ".join((identifier, str(cost), short_stringify_vectorization_strategy((qp, optimal_strategies[qp])))) + "\n") return qp, optimal_strategies[qp]