diff --git a/source/adapters/level_zero/context.hpp b/source/adapters/level_zero/context.hpp index 237e92dfd4..9097278223 100644 --- a/source/adapters/level_zero/context.hpp +++ b/source/adapters/level_zero/context.hpp @@ -304,34 +304,45 @@ struct ur_context_handle_t_ : _ur_object { bool isValidDevice(ur_device_handle_t Device) const; private: + enum EventCacheType { + HostVisibleProfilingCacheType, + HostVisibleRegularCacheType, + HostInvisibleProfilingCacheType, + HostInvisibleRegularCacheType, + CounterBasedRegularCacheType, + CounterBasedImmediateCacheType + }; // Get the cache of events for a provided scope and profiling mode. auto getEventCache(bool HostVisible, bool WithProfiling, ur_device_handle_t Device) { if (HostVisible) { if (Device) { auto EventCachesMap = - WithProfiling ? &EventCachesDeviceMap[0] : &EventCachesDeviceMap[1]; + WithProfiling ? &EventCachesDeviceMap[HostVisibleProfilingCacheType] + : &EventCachesDeviceMap[HostVisibleRegularCacheType]; if (EventCachesMap->find(Device) == EventCachesMap->end()) { EventCaches.emplace_back(); - EventCachesMap->insert( - std::make_pair(Device, EventCaches.size() - 1)); + EventCaches.insert(std::make_pair(Device, EventCaches.size() - 1)); } return &EventCaches[(*EventCachesMap)[Device]]; } else { - return WithProfiling ? &EventCaches[0] : &EventCaches[1]; + return WithProfiling ? &EventCaches[HostVisibleProfilingCacheType] + : &EventCaches[HostVisibleRegularCacheType]; } } else { if (Device) { auto EventCachesMap = - WithProfiling ? &EventCachesDeviceMap[2] : &EventCachesDeviceMap[3]; + WithProfiling + ? &EventCachesDeviceMap[HostInvisibleProfilingCacheType] + : &EventCachesDeviceMap[HostInvisibleRegularCacheType]; if (EventCachesMap->find(Device) == EventCachesMap->end()) { EventCaches.emplace_back(); - EventCachesMap->insert( - std::make_pair(Device, EventCaches.size() - 1)); + EventCaches.insert(std::make_pair(Device, EventCaches.size() - 1)); } return &EventCaches[(*EventCachesMap)[Device]]; } else { - return WithProfiling ? &EventCaches[2] : &EventCaches[3]; + return WithProfiling ? &EventCaches[HostInvisibleProfilingCacheType] + : &EventCaches[HostInvisibleRegularCacheType]; } } }; @@ -339,27 +350,27 @@ struct ur_context_handle_t_ : _ur_object { ur_device_handle_t Device) { if (UsingImmediateCmdList) { if (Device) { - auto EventCachesMap = &EventCachesDeviceMap[4]; + auto EventCachesMap = + &EventCachesDeviceMap[CounterBasedImmediateCacheType]; if (EventCachesMap->find(Device) == EventCachesMap->end()) { EventCaches.emplace_back(); - EventCachesMap->insert( - std::make_pair(Device, EventCaches.size() - 1)); + EventCaches.insert(std::make_pair(Device, EventCaches.size() - 1)); } return &EventCaches[(*EventCachesMap)[Device]]; } else { - return &EventCaches[4]; + return &EventCaches[CounterBasedImmediateCacheType]; } } else { if (Device) { - auto EventCachesMap = &EventCachesDeviceMap[5]; + auto EventCachesMap = + &EventCachesDeviceMap[CounterBasedRegularCacheType]; if (EventCachesMap->find(Device) == EventCachesMap->end()) { EventCaches.emplace_back(); - EventCachesMap->insert( - std::make_pair(Device, EventCaches.size() - 1)); + EventCaches.insert(std::make_pair(Device, EventCaches.size() - 1)); } return &EventCaches[(*EventCachesMap)[Device]]; } else { - return &EventCaches[5]; + return &EventCaches[CounterBasedRegularCacheType]; } } } diff --git a/source/adapters/level_zero/event.cpp b/source/adapters/level_zero/event.cpp index 19af3c8324..4dc5cc64cd 100644 --- a/source/adapters/level_zero/event.cpp +++ b/source/adapters/level_zero/event.cpp @@ -872,7 +872,7 @@ UR_APIEXPORT ur_result_t UR_APICALL urEventRetain( UR_APIEXPORT ur_result_t UR_APICALL urEventRelease( ur_event_handle_t Event ///< [in] handle of the event object ) { - if (Event->CounterBasedEventsEnabled && --Event->RefCountExternal == 0) { + if (--Event->RefCountExternal == 0 && Event->CounterBasedEventsEnabled) { Event->Context->addEventToContextCache(Event); } else { UR_CALL(urEventReleaseInternal(Event));