From 90439c0b7b94eb71205911e2548e4c3b5c16c8bf Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner <kloeckner@haamster.rice.edu> Date: Mon, 6 Oct 2008 15:14:34 -0500 Subject: [PATCH] Add a flop counter. --- src/mapper/flop_counter.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/mapper/flop_counter.py diff --git a/src/mapper/flop_counter.py b/src/mapper/flop_counter.py new file mode 100644 index 0000000..029f728 --- /dev/null +++ b/src/mapper/flop_counter.py @@ -0,0 +1,31 @@ +from pymbolic.mapper import CombineMapper + + + + +class FlopCounter(CombineMapper): + def combine(self, values): + return sum(values) + + def handle_unsupported_expression(self, expr, *args, **kwargs): + return 0 + + def map_constant(self, expr): + return 0 + + def map_variable(self, expr): + return 0 + + def map_sum(self, expr): + if expr.children: + return len(expr.children) - 1 + sum(self.rec(ch) for ch in expr.children) + else: + return 0 + + map_product = map_sum + + def map_quotient(self, expr, *args): + return 1 + self.rec(expr.numerator) + self.rec(expr.denominator) + + def map_power(self, expr, *args): + return 1 + self.rec(expr.base) + self.rec(expr.exponent) -- GitLab