Skip to content

Commit 9ca3ec7

Browse files
authored
Merge pull request #2113 from oneapi-src/revert-1698-counter-based-2
Revert "[L0] Phase 2 of Counter-Based Event Implementation"
2 parents 7384e2d + 59e5e40 commit 9ca3ec7

File tree

4 files changed

+33
-88
lines changed

4 files changed

+33
-88
lines changed

source/adapters/level_zero/context.cpp

+4-14
Original file line numberDiff line numberDiff line change
@@ -560,12 +560,9 @@ ur_result_t ur_context_handle_t_::getFreeSlotInExistingOrNewPool(
560560

561561
ur_event_handle_t ur_context_handle_t_::getEventFromContextCache(
562562
bool HostVisible, bool WithProfiling, ur_device_handle_t Device,
563-
bool CounterBasedEventEnabled, bool UsingImmCmdList) {
563+
bool CounterBasedEventEnabled) {
564564
std::scoped_lock<ur_mutex> Lock(EventCacheMutex);
565565
auto Cache = getEventCache(HostVisible, WithProfiling, Device);
566-
if (CounterBasedEventEnabled) {
567-
Cache = getCounterBasedEventCache(WithProfiling, UsingImmCmdList, Device);
568-
}
569566
if (Cache->empty())
570567
return nullptr;
571568

@@ -588,16 +585,9 @@ void ur_context_handle_t_::addEventToContextCache(ur_event_handle_t Event) {
588585
Device = Event->UrQueue->Device;
589586
}
590587

591-
if (Event->CounterBasedEventsEnabled) {
592-
auto Cache = getCounterBasedEventCache(
593-
Event->isProfilingEnabled(),
594-
!(Event->UrQueue) || (Event->UrQueue)->UsingImmCmdLists, Device);
595-
Cache->emplace_back(Event);
596-
} else {
597-
auto Cache = getEventCache(Event->isHostVisible(),
598-
Event->isProfilingEnabled(), Device);
599-
Cache->emplace_back(Event);
600-
}
588+
auto Cache = getEventCache(Event->isHostVisible(),
589+
Event->isProfilingEnabled(), Device);
590+
Cache->emplace_back(Event);
601591
}
602592

603593
ur_result_t

source/adapters/level_zero/context.hpp

+26-71
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,6 @@ struct ur_context_handle_t_ : _ur_object {
3939
: ZeContext{ZeContext}, Devices{Devs, Devs + NumDevices},
4040
NumDevices{NumDevices} {
4141
OwnNativeHandle = OwnZeContext;
42-
for (const auto &Device : Devices) {
43-
for (int i = 0; i < EventCacheTypeCount; i++) {
44-
EventCaches.emplace_back();
45-
EventCachesDeviceMap[i].insert(
46-
std::make_pair(Device, EventCaches.size() - 1));
47-
}
48-
}
4942
}
5043

5144
ur_context_handle_t_(ze_context_handle_t ZeContext) : ZeContext{ZeContext} {}
@@ -154,10 +147,9 @@ struct ur_context_handle_t_ : _ur_object {
154147
// head.
155148
//
156149
// Cache of event pools to which host-visible events are added to.
157-
std::vector<std::list<ze_event_pool_handle_t>> ZeEventPoolCache{
158-
ZeEventPoolCacheTypeCount * 2};
150+
std::vector<std::list<ze_event_pool_handle_t>> ZeEventPoolCache{12};
159151
std::vector<std::unordered_map<ze_device_handle_t, size_t>>
160-
ZeEventPoolCacheDeviceMap{ZeEventPoolCacheTypeCount * 2};
152+
ZeEventPoolCacheDeviceMap{12};
161153

162154
// This map will be used to determine if a pool is full or not
163155
// by storing number of empty slots available in the pool.
@@ -179,9 +171,9 @@ struct ur_context_handle_t_ : _ur_object {
179171

180172
// Caches for events.
181173
using EventCache = std::vector<std::list<ur_event_handle_t>>;
182-
EventCache EventCaches{EventCacheTypeCount};
174+
EventCache EventCaches{4};
183175
std::vector<std::unordered_map<ur_device_handle_t, size_t>>
184-
EventCachesDeviceMap{EventCacheTypeCount};
176+
EventCachesDeviceMap{4};
185177

186178
// Initialize the PI context.
187179
ur_result_t initialize();
@@ -219,39 +211,25 @@ struct ur_context_handle_t_ : _ur_object {
219211
ur_event_handle_t getEventFromContextCache(bool HostVisible,
220212
bool WithProfiling,
221213
ur_device_handle_t Device,
222-
bool CounterBasedEventEnabled,
223-
bool UsingImmCmdList);
214+
bool CounterBasedEventEnabled);
224215

225216
// Add ur_event_handle_t to cache.
226217
void addEventToContextCache(ur_event_handle_t);
227218

228-
enum ZeEventPoolCacheType {
219+
enum EventPoolCacheType {
229220
HostVisibleCacheType,
230221
HostInvisibleCacheType,
231222
HostVisibleCounterBasedRegularCacheType,
232223
HostInvisibleCounterBasedRegularCacheType,
233224
HostVisibleCounterBasedImmediateCacheType,
234-
HostInvisibleCounterBasedImmediateCacheType,
235-
ZeEventPoolCacheTypeCount
236-
};
237-
238-
enum EventCacheType {
239-
HostVisibleProfilingCacheType,
240-
HostVisibleRegularCacheType,
241-
HostInvisibleProfilingCacheType,
242-
HostInvisibleRegularCacheType,
243-
CounterBasedImmediateCacheType,
244-
CounterBasedRegularCacheType,
245-
CounterBasedImmediateProfilingCacheType,
246-
CounterBasedRegularProfilingCacheType,
247-
EventCacheTypeCount
225+
HostInvisibleCounterBasedImmediateCacheType
248226
};
249227

250228
std::list<ze_event_pool_handle_t> *
251229
getZeEventPoolCache(bool HostVisible, bool WithProfiling,
252230
bool CounterBasedEventEnabled, bool UsingImmediateCmdList,
253231
ze_device_handle_t ZeDevice) {
254-
ZeEventPoolCacheType CacheType;
232+
EventPoolCacheType CacheType;
255233

256234
calculateCacheIndex(HostVisible, CounterBasedEventEnabled,
257235
UsingImmediateCmdList, CacheType);
@@ -274,7 +252,7 @@ struct ur_context_handle_t_ : _ur_object {
274252
ur_result_t calculateCacheIndex(bool HostVisible,
275253
bool CounterBasedEventEnabled,
276254
bool UsingImmediateCmdList,
277-
ZeEventPoolCacheType &CacheType) {
255+
EventPoolCacheType &CacheType) {
278256
if (CounterBasedEventEnabled && HostVisible && !UsingImmediateCmdList) {
279257
CacheType = HostVisibleCounterBasedRegularCacheType;
280258
} else if (CounterBasedEventEnabled && !HostVisible &&
@@ -338,57 +316,34 @@ struct ur_context_handle_t_ : _ur_object {
338316
if (HostVisible) {
339317
if (Device) {
340318
auto EventCachesMap =
341-
WithProfiling ? &EventCachesDeviceMap[HostVisibleProfilingCacheType]
342-
: &EventCachesDeviceMap[HostVisibleRegularCacheType];
343-
return &EventCaches[(*EventCachesMap)[Device]];
344-
} else {
345-
return WithProfiling ? &EventCaches[HostVisibleProfilingCacheType]
346-
: &EventCaches[HostVisibleRegularCacheType];
347-
}
348-
} else {
349-
if (Device) {
350-
auto EventCachesMap =
351-
WithProfiling
352-
? &EventCachesDeviceMap[HostInvisibleProfilingCacheType]
353-
: &EventCachesDeviceMap[HostInvisibleRegularCacheType];
354-
return &EventCaches[(*EventCachesMap)[Device]];
355-
} else {
356-
return WithProfiling ? &EventCaches[HostInvisibleProfilingCacheType]
357-
: &EventCaches[HostInvisibleRegularCacheType];
358-
}
359-
}
360-
};
361-
auto getCounterBasedEventCache(bool WithProfiling, bool UsingImmediateCmdList,
362-
ur_device_handle_t Device) {
363-
if (UsingImmediateCmdList) {
364-
if (Device) {
365-
auto EventCachesMap =
366-
WithProfiling
367-
? &EventCachesDeviceMap[CounterBasedImmediateProfilingCacheType]
368-
: &EventCachesDeviceMap[CounterBasedImmediateCacheType];
319+
WithProfiling ? &EventCachesDeviceMap[0] : &EventCachesDeviceMap[1];
320+
if (EventCachesMap->find(Device) == EventCachesMap->end()) {
321+
EventCaches.emplace_back();
322+
EventCachesMap->insert(
323+
std::make_pair(Device, EventCaches.size() - 1));
324+
}
369325
return &EventCaches[(*EventCachesMap)[Device]];
370326
} else {
371-
return WithProfiling
372-
? &EventCaches[CounterBasedImmediateProfilingCacheType]
373-
: &EventCaches[CounterBasedImmediateCacheType];
327+
return WithProfiling ? &EventCaches[0] : &EventCaches[1];
374328
}
375329
} else {
376330
if (Device) {
377331
auto EventCachesMap =
378-
WithProfiling
379-
? &EventCachesDeviceMap[CounterBasedRegularProfilingCacheType]
380-
: &EventCachesDeviceMap[CounterBasedRegularCacheType];
332+
WithProfiling ? &EventCachesDeviceMap[2] : &EventCachesDeviceMap[3];
333+
if (EventCachesMap->find(Device) == EventCachesMap->end()) {
334+
EventCaches.emplace_back();
335+
EventCachesMap->insert(
336+
std::make_pair(Device, EventCaches.size() - 1));
337+
}
381338
return &EventCaches[(*EventCachesMap)[Device]];
382339
} else {
383-
return WithProfiling
384-
? &EventCaches[CounterBasedRegularProfilingCacheType]
385-
: &EventCaches[CounterBasedRegularCacheType];
340+
return WithProfiling ? &EventCaches[2] : &EventCaches[3];
386341
}
387342
}
388343
}
389344
};
390345

391-
// Helper function to release the context, a caller must lock the
392-
// platform-level mutex guarding the container with contexts because the
393-
// context can be removed from the list of tracked contexts.
346+
// Helper function to release the context, a caller must lock the platform-level
347+
// mutex guarding the container with contexts because the context can be removed
348+
// from the list of tracked contexts.
394349
ur_result_t ContextReleaseHelper(ur_context_handle_t Context);

source/adapters/level_zero/event.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -835,6 +835,7 @@ urEventRelease(ur_event_handle_t Event ///< [in] handle of the event object
835835
) {
836836
Event->RefCountExternal--;
837837
UR_CALL(urEventReleaseInternal(Event));
838+
838839
return UR_RESULT_SUCCESS;
839840
}
840841

@@ -1256,8 +1257,7 @@ ur_result_t EventCreate(ur_context_handle_t Context, ur_queue_handle_t Queue,
12561257
}
12571258

12581259
if (auto CachedEvent = Context->getEventFromContextCache(
1259-
HostVisible, ProfilingEnabled, Device, CounterBasedEventEnabled,
1260-
UsingImmediateCommandlists)) {
1260+
HostVisible, ProfilingEnabled, Device, CounterBasedEventEnabled)) {
12611261
*RetEvent = CachedEvent;
12621262
return UR_RESULT_SUCCESS;
12631263
}

source/adapters/level_zero/queue.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -1187,7 +1187,7 @@ ur_queue_handle_t_::ur_queue_handle_t_(
11871187
return std::atoi(UrRet) != 0;
11881188
}();
11891189
this->CounterBasedEventsEnabled =
1190-
isInOrderQueue() && Device->useDriverInOrderLists() &&
1190+
UsingImmCmdLists && isInOrderQueue() && Device->useDriverInOrderLists() &&
11911191
useDriverCounterBasedEvents &&
11921192
Device->Platform->ZeDriverEventPoolCountingEventsExtensionFound;
11931193
}

0 commit comments

Comments
 (0)