From faba3cc4991a354be7ea1116dfd035069e552fa6 Mon Sep 17 00:00:00 2001 From: markus holzer <markus.holzer@fau.de> Date: Thu, 18 Feb 2021 11:41:11 +0100 Subject: [PATCH] Changed layout for many summands --- pystencils/backends/cbackend.py | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/pystencils/backends/cbackend.py b/pystencils/backends/cbackend.py index 654b92b8..b1f7899e 100644 --- a/pystencils/backends/cbackend.py +++ b/pystencils/backends/cbackend.py @@ -609,6 +609,20 @@ class VectorizedCustomSympyPrinter(CustomSympyPrinter): return result def _print_Add(self, expr, order=None): + def visit(summands): + if len(summands) == 2: + sign = summands[0].sign * summands[1].sign + func = self.instruction_set['-'] if sign == -1 else self.instruction_set['+'] + return func.format(summands[0].term, summands[1].term) + else: + elements = len(summands) // 2 + if len(summands[:elements]) < 2: + func = self.instruction_set['-'] if summands[0].sign == -1 else self.instruction_set['+'] + return func.format(summands[0].term, visit(summands[elements:])) + else: + func = self.instruction_set['+'] + return func.format(visit(summands[:elements]), visit(summands[elements:])) + result = self._scalarFallback('_print_Add', expr) if result: return result @@ -628,10 +642,13 @@ class VectorizedCustomSympyPrinter(CustomSympyPrinter): summands.insert(0, self.SummandInfo(1, "0")) assert len(summands) >= 2 - processed = summands[0].term - for summand in summands[1:]: - func = self.instruction_set['-'] if summand.sign == -1 else self.instruction_set['+'] - processed = func.format(processed, summand.term) + if len(summands) < 10: + processed = summands[0].term + for summand in summands[1:]: + func = self.instruction_set['-'] if summand.sign == -1 else self.instruction_set['+'] + processed = func.format(processed, summand.term) + else: + processed = visit(summands) return processed def _print_Pow(self, expr): -- GitLab