From 7a81c15f76cc78ccf8d50958fbfc4a29fa19b54b Mon Sep 17 00:00:00 2001 From: Nick Christensen <njchris2@illinois.edu> Date: Wed, 30 Sep 2020 17:58:52 -0500 Subject: [PATCH] Reinstate https://github.com/inducer/grudge/pull/19 --- grudge/execution.py | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/grudge/execution.py b/grudge/execution.py index 102fa108..3afe569b 100644 --- a/grudge/execution.py +++ b/grudge/execution.py @@ -525,14 +525,19 @@ class ExecutionMapper(mappers.Evaluator, if in_grp.nelements == 0: continue - matrices = repr_op.matrices(out_grp, in_grp) - - # FIXME: Should transfer matrices to device and cache them - matrices_ary = np.empty(( - noperators, out_grp.nunit_dofs, in_grp.nunit_dofs)) - for i, op in enumerate(insn.operators): - matrices_ary[i] = matrices[op.rst_axis] - matrices_ary_dev = self.array_context.from_numpy(matrices_ary) + # Cache operator + cache_key = "diff_batch", in_grp, out_grp, tuple(insn.operators),\ + field.dtype + try: + matrices_ary_dev = self.bound_op.operator_data_cache[cache_key] + except KeyError: + matrices = repr_op.matrices(out_grp, in_grp) + matrices_ary = np.empty(( + noperators, out_grp.nunit_dofs, in_grp.nunit_dofs)) + for i, op in enumerate(insn.operators): + matrices_ary[i] = matrices[op.rst_axis] + matrices_ary_dev = self.array_context.from_numpy(matrices_ary) + self.bound_op.operator_data_cache[cache_key] = matrices_ary_dev self.array_context.call_loopy( prg(noperators), -- GitLab