summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2019-03-13 16:26:06 +0100
committerDaniel Friesel <derf@finalrewind.org>2019-03-13 16:26:06 +0100
commite8428262c13c6b3727d9cebeb9a51a0dd83a10ca (patch)
tree672c12892c1e6b5edc373f82fdc791147176e2dd /lib
parent0c132a304eb001dcd7ff9ee578854c92686fe15b (diff)
Add simple per-statement C(++) timing analysis wrapper
Diffstat (limited to 'lib')
-rw-r--r--lib/utils.py29
1 files changed, 29 insertions, 0 deletions
diff --git a/lib/utils.py b/lib/utils.py
index e86b85d..c53d531 100644
--- a/lib/utils.py
+++ b/lib/utils.py
@@ -1,4 +1,5 @@
import numpy as np
+import re
arg_support_enabled = True
@@ -168,3 +169,31 @@ def _all_params_are_numeric(data, param_idx):
if len(list(filter(is_numeric, param_values))) == len(param_values):
return True
return False
+
+class TimingAnalysis:
+ def __init__(self, enabled = True):
+ self.enabled = enabled
+ self.index = 1
+
+ def get_header(self):
+ ret = ''
+ if self.enabled:
+ ret += '#define TIMEIT(index, functioncall) '
+ ret += 'counter.start(); '
+ ret += 'functioncall; '
+ ret += 'counter.stop();'
+ ret += 'kout << endl << index << " :: " << counter.value << "/" << counter.overflow << endl;'
+ return ret
+
+ def wrap_codeblock(self, codeblock):
+ if not self.enabled:
+ return codeblock
+ lines = codeblock.split('\n')
+ ret = list()
+ for line in lines:
+ if re.fullmatch('.+;', line):
+ ret.append('TIMEIT( {:d}, {} )'.format(self.index, line))
+ self.index += 1
+ else:
+ ret.append(line)
+ return '\n'.join(ret)