Skip to content

Commit f5de914

Browse files
committed
make SequentialOrderManager no-op for in-order queues
1 parent 52ddad9 commit f5de914

1 file changed

Lines changed: 37 additions & 0 deletions

File tree

dpctl/utils/_order_manager.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,39 @@ def __copy__(self):
6464
return res
6565

6666

67+
class _NoOpOrderManager:
68+
"""Dummy order manager used when queue is in-order."""
69+
70+
def __init__(self, q: SyclQueue):
71+
self._queue = q
72+
73+
def add_event_pair(self, _host_task_ev, _comp_ev):
74+
pass
75+
76+
@property
77+
def num_host_task_events(self):
78+
return 0
79+
80+
@property
81+
def num_submitted_events(self):
82+
return 0
83+
84+
@property
85+
def host_task_events(self):
86+
return []
87+
88+
@property
89+
def submitted_events(self):
90+
return []
91+
92+
def wait(self):
93+
# to imitate SequentialOrderManager, wait on the in-order queue
94+
self._queue.wait()
95+
96+
def __copy__(self):
97+
return _NoOpOrderManager(self._queue)
98+
99+
67100
class SyclQueueToOrderManagerMap:
68101
"""Utility class used to ensure sequential ordering of offloaded tasks
69102
when passed to order manager."""
@@ -76,6 +109,10 @@ def __init__(self):
76109

77110
def __getitem__(self, q: SyclQueue) -> _SequentialOrderManager:
78111
"""Get order manager for given SyclQueue"""
112+
if q.is_in_order:
113+
# we don't need to cache the NoOpOrderManager since it's stateless
114+
return _NoOpOrderManager(q)
115+
79116
_local = self._map.get()
80117
if not isinstance(q, SyclQueue):
81118
raise TypeError(f"Expected `dpctl.SyclQueue`, got {type(q)}")

0 commit comments

Comments
 (0)