diff --git a/python/dune/perftool/sumfact/sumfact.py b/python/dune/perftool/sumfact/sumfact.py index 2d981f07c92d187f65363fdeae3382a18b0900d7..35cb783e2e325efbe89796ccfae89d550300f1b6 100644 --- a/python/dune/perftool/sumfact/sumfact.py +++ b/python/dune/perftool/sumfact/sumfact.py @@ -195,6 +195,12 @@ def generate_accumulation_instruction(visitor, accterm, measure, subdomain_id): replace_dict[Variable(iname)] = i expression = substitute(pymbolic_expr, replace_dict) + # Determine dependencies + from loopy.match import Or, Writes + from pymbolic.mapper.dependency import DependencyMapper + from dune.perftool.tools import get_pymbolic_basename + deps = Or(tuple(Writes(get_pymbolic_basename(expr)) for expr in DependencyMapper()(expression))) + # Issue an instruction in the quadrature loop that fills the buffer # with the evaluation of the contribution at all quadrature points assignee = Subscript(Variable(temp), tuple(Variable(i) for i in quadrature_inames())) @@ -203,6 +209,7 @@ def generate_accumulation_instruction(visitor, accterm, measure, subdomain_id): forced_iname_deps=frozenset(quadrature_inames() + visitor.inames), forced_iname_deps_is_final=True, tags=frozenset({"quadvec"}), + depends_on=frozenset({deps}) ) contribution_ids.append(contrib_dep)