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