Skip to content

Commit 13f0d33

Browse files
authored
Merge pull request #649 from OP2/fix-2341
Uniquify args for halo exchanges
2 parents 186fac5 + 6827bdb commit 13f0d33

1 file changed

Lines changed: 17 additions & 10 deletions

File tree

‎pyop2/parloop.py‎

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -286,11 +286,14 @@ def _g2l_end_ops(self):
286286

287287
@cached_property
288288
def _g2l_idxs(self):
289-
return tuple(i for i, wknl_arg
290-
in enumerate(self.global_kernel.arguments)
291-
if isinstance(wknl_arg, DatKernelArg)
292-
and wknl_arg.is_indirect
293-
and self.accesses[i] is not Access.WRITE)
289+
seen = set()
290+
indices = []
291+
for i, (lknl_arg, gknl_arg, pl_arg) in enumerate(self.zipped_arguments):
292+
if (isinstance(gknl_arg, DatKernelArg) and pl_arg.data not in seen
293+
and gknl_arg.is_indirect and lknl_arg.access is not Access.WRITE):
294+
indices.append(i)
295+
seen.add(pl_arg.data)
296+
return tuple(indices)
294297

295298
@mpi.collective
296299
def local_to_global_begin(self):
@@ -324,11 +327,15 @@ def _l2g_end_ops(self):
324327

325328
@cached_property
326329
def _l2g_idxs(self):
327-
return tuple(i for i, arg
328-
in enumerate(self.global_kernel.arguments)
329-
if isinstance(arg, DatKernelArg)
330-
and arg.is_indirect
331-
and self.accesses[i] in {Access.INC, Access.MIN, Access.MAX})
330+
seen = set()
331+
indices = []
332+
for i, (lknl_arg, gknl_arg, pl_arg) in enumerate(self.zipped_arguments):
333+
if (isinstance(gknl_arg, DatKernelArg) and pl_arg.data not in seen
334+
and gknl_arg.is_indirect
335+
and lknl_arg.access in {Access.INC, Access.MIN, Access.MAX}):
336+
indices.append(i)
337+
seen.add(pl_arg.data)
338+
return tuple(indices)
332339

333340
@PETSc.Log.EventDecorator("ParLoopRednBegin")
334341
@mpi.collective

0 commit comments

Comments
 (0)