From 1c3a8a27ee5df46176bbdcd87da3f6d4e2956681 Mon Sep 17 00:00:00 2001
From: Dominic Kempf <dominic.kempf@iwr.uni-heidelberg.de>
Date: Fri, 24 Aug 2018 11:57:09 +0200
Subject: [PATCH] Write a short string identifier of the vectorization
 strategy.

---
 python/dune/perftool/sumfact/vectorization.py | 25 ++++++++++++++++++-
 1 file changed, 24 insertions(+), 1 deletion(-)

diff --git a/python/dune/perftool/sumfact/vectorization.py b/python/dune/perftool/sumfact/vectorization.py
index 6e228abe..d9ca54c8 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]
 
-- 
GitLab