From dba33e37e3260d6c586a8578e07e38b980057ef3 Mon Sep 17 00:00:00 2001 From: Kaushik Kulkarni <kaushikcfd@gmail.com> Date: Thu, 20 May 2021 15:39:59 -0500 Subject: [PATCH] avoid actx.np.stack, instead use reduce to avoid memory explosion --- grudge/execution.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/grudge/execution.py b/grudge/execution.py index cd136758..4f62a1d3 100644 --- a/grudge/execution.py +++ b/grudge/execution.py @@ -158,18 +158,22 @@ class ExecutionMapper(mappers.Evaluator, def map_nodal_sum(self, op, field_expr): actx = self.array_context - return actx.np.sum(actx.np.stack([actx.np.sum(grp_ary) - for grp_ary in self.rec(field_expr)])) + return sum([actx.np.sum(grp_ary) + for grp_ary in self.rec(field_expr)]) def map_nodal_max(self, op, field_expr): + from functools import reduce actx = self.array_context - return actx.np.max(actx.np.stack([actx.np.max(grp_ary) - for grp_ary in self.rec(field_expr)])) + return reduce(lambda acc, grp_ary: actx.np.maximum(acc, + actx.np.max(grp_ary)), + self.rec(field_expr), -np.inf) def map_nodal_min(self, op, field_expr): + from functools import reduce actx = self.array_context - return actx.np.min(actx.np.stack([actx.np.min(grp_ary) - for grp_ary in self.rec(field_expr)])) + return reduce(lambda acc, grp_ary: actx.np.minimum(acc, + actx.np.min(grp_ary)), + self.rec(field_expr), np.inf) # }}} -- GitLab