Skip to content

Commit e142cbd

Browse files
committed
fix barrier impl
1 parent fc033c3 commit e142cbd

File tree

1 file changed

+18
-11
lines changed

1 file changed

+18
-11
lines changed

unified-runtime/source/adapters/level_zero/v2/queue_immediate_out_of_order.cpp

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -153,27 +153,34 @@ ur_result_t ur_queue_immediate_out_of_order_t::enqueueEventsWaitWithBarrier(
153153
// we do need to use barrier if profiling is enabled: see
154154
// zeCommandListAppendWaitOnEvents
155155
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
158158
: &ur_command_list_manager::appendEventsWait;
159159

160160
auto commandListManagersLocked = commandListManagers.lock();
161161

162162
// 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]));
165165

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.
168167
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]));
171170
}
172171

172+
// Enqueue barriers on all command lists by waiting on barrierEvents.
173+
173174
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));
177184
}
178185

179186
return UR_RESULT_SUCCESS;

0 commit comments

Comments
 (0)