1616from devito .symbolics import estimate_cost
1717from devito .tools import as_tuple , filter_ordered , flatten , infer_dtype
1818from devito .types import (
19- CriticalRegion , Fence , ThreadCommit , ThreadPoolSync , ThreadWait , WeakFence
19+ CriticalRegion , Fence , Indexed , PhaseMarker , TensorMove , ThreadArrive , ThreadCommit ,
20+ ThreadPoolSync , ThreadWait , WeakFence
2021)
2122
2223__all__ = ["Cluster" , "ClusterGroup" ]
@@ -302,6 +303,10 @@ def is_fence(self):
302303 def is_weak_fence (self ):
303304 return self ._is_type (WeakFence )
304305
306+ @cached_property
307+ def is_phase_marker (self ):
308+ return self ._is_type (PhaseMarker )
309+
305310 @cached_property
306311 def is_critical_region (self ):
307312 return self ._is_type (CriticalRegion )
@@ -310,14 +315,47 @@ def is_critical_region(self):
310315 def is_thread_pool_sync (self ):
311316 return self ._is_type (ThreadPoolSync )
312317
318+ @cached_property
319+ def is_shm_write (self ):
320+ return all (w ._mem_shared for w in self .scope .writes )
321+
313322 @cached_property
314323 def is_thread_commit (self ):
315324 return self ._is_type (ThreadCommit )
316325
326+ @cached_property
327+ def is_thread_arrive (self ):
328+ return self ._is_type (ThreadArrive )
329+
317330 @cached_property
318331 def is_thread_wait (self ):
319332 return self ._is_type (ThreadWait )
320333
334+ @cached_property
335+ def is_thread_sync (self ):
336+ return self .is_thread_pool_sync or self .is_thread_wait
337+
338+ @cached_property
339+ def is_word_move (self ):
340+ return (self ._is_type (Indexed ) and
341+ all (e .rhs .function ._mem_heap for e in self .exprs ))
342+
343+ @cached_property
344+ def is_tensor_move (self ):
345+ return self ._is_type (TensorMove )
346+
347+ @cached_property
348+ def is_word_move_to_mem_shared (self ):
349+ return self .is_word_move and self .is_shm_write
350+
351+ @cached_property
352+ def is_tensor_move_to_mem_shared (self ):
353+ return self .is_tensor_move and self .is_shm_write
354+
355+ @cached_property
356+ def is_glb_load_to_mem_shared (self ):
357+ return self .is_word_move_to_mem_shared or self .is_tensor_move_to_mem_shared
358+
321359 @cached_property
322360 def is_async (self ):
323361 """
@@ -557,6 +595,10 @@ def dspace(self):
557595 def is_halo_touch (self ):
558596 return all (i .is_halo_touch for i in self )
559597
598+ @cached_property
599+ def is_glb_load_to_mem_shared (self ):
600+ return all (i .is_glb_load_to_mem_shared for i in self )
601+
560602 @cached_property
561603 def dtype (self ):
562604 """
0 commit comments