@@ -346,7 +346,7 @@ def _buffer_exchanges(buffer, intent, *, touches_ghost_points):
346
346
# reductions
347
347
assert intent in {INC , MIN_WRITE , MIN_RW , MAX_WRITE , MAX_RW }
348
348
# We don't need to update roots if performing the same reduction
349
- # again. For example we can increment into an buffer as many times
349
+ # again. For example we can increment into a buffer as many times
350
350
# as we want. The reduction only needs to be done when the
351
351
# data is read.
352
352
if buffer ._roots_valid or intent == buffer ._pending_reduction :
@@ -361,6 +361,20 @@ def _buffer_exchanges(buffer, intent, *, touches_ghost_points):
361
361
initializers .append (buffer ._reduce_leaves_to_roots_begin )
362
362
reductions .append (buffer ._reduce_leaves_to_roots_end )
363
363
364
+ # set leaves to appropriate nil value
365
+ if intent == INC :
366
+ nil = 0
367
+ elif intent in {MIN_WRITE , MIN_RW }:
368
+ nil = dtype_limits (buffer .dtype ).max
369
+ else :
370
+ assert intent in {MAX_WRITE , MAX_RW }
371
+ nil = dtype_limits (buffer .dtype ).min
372
+
373
+ def _init_nil ():
374
+ buffer ._data [buffer .sf .ileaf ] = nil
375
+
376
+ reductions .append (_init_nil )
377
+
364
378
# We are modifying owned values so the leaves must now be wrong
365
379
buffer ._leaves_valid = False
366
380
@@ -370,15 +384,6 @@ def _buffer_exchanges(buffer, intent, *, touches_ghost_points):
370
384
else :
371
385
buffer ._pending_reduction = intent
372
386
373
- # set leaves to appropriate nil value
374
- if intent == INC :
375
- buffer ._data [buffer .sf .ileaf ] = 0
376
- elif intent in {MIN_WRITE , MIN_RW }:
377
- buffer ._data [buffer .sf .ileaf ] = dtype_limits (buffer .dtype ).max
378
- else :
379
- assert intent in {MAX_WRITE , MAX_RW }
380
- buffer ._data [buffer .sf .ileaf ] = dtype_limits (buffer .dtype ).min
381
-
382
387
return tuple (initializers ), tuple (reductions ), tuple (broadcasts )
383
388
384
389
0 commit comments