@@ -153,27 +153,34 @@ ur_result_t ur_queue_immediate_out_of_order_t::enqueueEventsWaitWithBarrier(
153
153
// we do need to use barrier if profiling is enabled: see
154
154
// zeCommandListAppendWaitOnEvents
155
155
bool needsRealBarrier = (flags & UR_QUEUE_FLAG_PROFILING_ENABLE) != 0 ;
156
- auto appendEventsWaitFn =
157
- needsRealBarrier ? &ur_command_list_manager::appendEventsWaitWithBarrier
156
+ auto barrierFn = needsRealBarrier
157
+ ? &ur_command_list_manager::appendEventsWaitWithBarrier
158
158
: &ur_command_list_manager::appendEventsWait;
159
159
160
160
auto commandListManagersLocked = commandListManagers.lock ();
161
161
162
162
// Enqueue wait for the user-provider events on the first command list.
163
- std::invoke (appendEventsWaitFn, commandListManagersLocked[0 ],
164
- numEventsInWaitList, phEventWaitList, barrierEvents[0 ]);
163
+ UR_CALL ( commandListManagersLocked[0 ]. appendEventsWait (
164
+ numEventsInWaitList, phEventWaitList, barrierEvents[0 ]) );
165
165
166
- // Submit barrier or request barrierEvents[id] to be signaled on remaining
167
- // command lists.
166
+ // Request barrierEvents[id] to be signaled on remaining command lists.
168
167
for (size_t id = 1 ; id < numCommandLists; id++) {
169
- std::invoke (appendEventsWaitFn, commandListManagersLocked[id], 0 , nullptr ,
170
- barrierEvents[id]);
168
+ UR_CALL ( commandListManagersLocked[id]. appendEventsWait ( 0 , nullptr ,
169
+ barrierEvents[id]) );
171
170
}
172
171
172
+ // Enqueue barriers on all command lists by waiting on barrierEvents.
173
+
173
174
if (phEvent) {
174
- UR_CALL (commandListManagersLocked[0 ].appendEventsWait (
175
- numCommandLists, barrierEvents.data (),
176
- createEventIfRequested (eventPool.get (), phEvent, this )));
175
+ UR_CALL (
176
+ std::invoke (barrierFn, commandListManagersLocked[0 ], numCommandLists,
177
+ barrierEvents.data (),
178
+ createEventIfRequested (eventPool.get (), phEvent, this )));
179
+ }
180
+
181
+ for (size_t id = phEvent ? 1 : 0 ; id < numCommandLists; id++) {
182
+ UR_CALL (std::invoke (barrierFn, commandListManagersLocked[0 ],
183
+ numCommandLists, barrierEvents.data (), nullptr ));
177
184
}
178
185
179
186
return UR_RESULT_SUCCESS;
0 commit comments