diff --git a/ipet/Key.py b/ipet/Key.py index 9d9e393..c408435 100644 --- a/ipet/Key.py +++ b/ipet/Key.py @@ -49,11 +49,14 @@ GitHash = "GitHash" LogFileName = "LogFileName" LPSolver = "LPSolver" +MeanFreq = "MeanFreq" MetaData = "MetaData" MaximumDepth = "MaxDepth" Mode = "mode" NodeName = "NodeName" Nodes = "Nodes" +NormalizedFreq = "NormalizedFreq" +NormalizedTime = "NormalizedTime" ObjectiveLimit = "Objlimit" ObjectiveSense = "Objsense" OptimalValue = "OptVal" diff --git a/ipet/parsing/ReaderManager.py b/ipet/parsing/ReaderManager.py index 5695f98..0a631a5 100644 --- a/ipet/parsing/ReaderManager.py +++ b/ipet/parsing/ReaderManager.py @@ -14,7 +14,8 @@ import xml.etree.ElementTree as ElementTree from .StatisticReader import ErrorFileReader, GapReader, TimeLimitReader, ListReader, \ BestSolInfeasibleReader, MaxDepthReader, MetaDataReader, NodeNameReader, NodesReader, RootNodeFixingsReader, \ - SettingsFileReader, TimeToFirstReader, TimeToBestReader, ObjsenseReader, DateTimeReader, SolCheckerReader + SettingsFileReader, TimeToFirstReader, TimeToBestReader, ObjsenseReader, DateTimeReader, SolCheckerReader, \ + PerfDataReader, RawPerfDataReader from .StatisticReader_TableReader import TableReader, CustomTableReader from .StatisticReader_VariableReader import VariableReader from .StatisticReader_CustomReader import CustomReader @@ -198,6 +199,8 @@ def registerDefaultReaders(self): TimeLimitReader(), TimeToFirstReader(), TimeToBestReader(), + PerfDataReader(), + RawPerfDataReader(), TraceFileReader() ]) diff --git a/ipet/parsing/StatisticReader.py b/ipet/parsing/StatisticReader.py index 62281f8..579f658 100644 --- a/ipet/parsing/StatisticReader.py +++ b/ipet/parsing/StatisticReader.py @@ -428,6 +428,47 @@ def extractStatistic(self, line): except TypeError: pass +class PerfDataReader(StatisticReader): + """ + reads the processed perf statistics, like normalized solution time + """ + name = 'PerfDataReader' + datatype = float + regular_expr = re.compile(r'^@10 meanfreq=([0-9\.]*) nmsfreq=([0-9\.]*) normtime=([0-9\.]*)$') + keys = [Key.MeanFreq, Key.NormalizedFreq, Key.NormalizedTime] + + def extractStatistic(self, line): + m = self.regular_expr.match(line) + if m: + for keyidx in range(len(self.keys)): + try: + key = self.keys[keyidx] + value = float(m.group(keyidx+1)) + self.addData(key, value) + except TypeError: + pass + +class RawPerfDataReader(StatisticReader): + """ + reads the raw perf statistics, e.g., @06 cpu-cycles:u=13572052343862 cpu-cycles:k=68612735800 instructions:u=25079950435035 instructions:k=54294963792 cache-references:u=610557529359 cache-misses:u=320070506935 branch-instructions:u=3638145957323 branch-misses:u=36667745269 L1-dcache-loads=9147033741310 L1-dcache-load-misses=756723588525 L1-icache-load-misses=730865048 dTLB-loads=9147044559864 dTLB-load-misses=3092490807 iTLB-load-misses=4470770 minor-faults:u=10452738 minor-faults:k=86 major-faults:u=8 major-faults:k=0 context-switches=3217 cpu-migrations=94 cycle_activity.cycles_mem_any=13078074806121 cycle_activity.stalls_mem_any=4772553217683 cycle_activity.stalls_total=5226003573246 task-clock=7223006.36 + """ + name = 'RawPerfDataReader' + datatype = int + raw_regular_expr = re.compile(r'^@06 (.*)') + + def extractStatistic(self, line): + m = self.raw_regular_expr.match(line) + if m: + for keyval in m.group(1).split() : + keyval = keyval.strip().split('=') + if len(keyval) == 2: + try: + key = 'perf:' + keyval[0].replace('_','-').replace('.','-') + value = int(float(keyval[1])) + self.addData(key, value) + except TypeError: + pass + class ListReader(StatisticReader): """ reads a list matching a regular expression diff --git a/ipet/parsing/__init__.py b/ipet/parsing/__init__.py index 15f03c2..6a6a6f0 100644 --- a/ipet/parsing/__init__.py +++ b/ipet/parsing/__init__.py @@ -17,5 +17,5 @@ from .StatisticReader_TableReader import TableReader, CustomTableReader from .StatisticReader import StatisticReader, ErrorFileReader, GapReader, TimeLimitReader, \ BestSolInfeasibleReader, MaxDepthReader, MetaDataReader, ObjlimitReader, NodesReader, RootNodeFixingsReader, \ - SettingsFileReader, TimeToFirstReader, TimeToBestReader, ListReader, ObjsenseReader, DateTimeReader + SettingsFileReader, TimeToFirstReader, TimeToBestReader, PerfDataReader, RawPerfDataReader, ListReader, ObjsenseReader, DateTimeReader __all__ = [] diff --git a/scripts/evaluation-perf.xml b/scripts/evaluation-perf.xml new file mode 100644 index 0000000..1f22644 --- /dev/null +++ b/scripts/evaluation-perf.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/scripts/evaluation.xml b/scripts/evaluation.xml index f2c5fae..712d69e 100644 --- a/scripts/evaluation.xml +++ b/scripts/evaluation.xml @@ -3,6 +3,9 @@ + + +