@@ -141,9 +141,8 @@ struct ur_context_handle_t_ : _ur_object {
141141 // head.
142142 //
143143 // Cache of event pools to which host-visible events are added to.
144- std::vector<std::list<ze_event_pool_handle_t > *> ZeEventPoolCache;
145- std::vector<std::unordered_map<ze_device_handle_t ,
146- std::list<ze_event_pool_handle_t > *>>
144+ std::vector<std::list<ze_event_pool_handle_t >> ZeEventPoolCache{4 };
145+ std::vector<std::unordered_map<ze_device_handle_t , size_t >>
147146 ZeEventPoolCacheDeviceMap{4 };
148147
149148 // This map will be used to determine if a pool is full or not
@@ -165,9 +164,9 @@ struct ur_context_handle_t_ : _ur_object {
165164 ur_mutex EventCacheMutex;
166165
167166 // Caches for events.
168- std::vector<std::list<ur_event_handle_t > *> EventCaches ;
169- std::vector<
170- std::unordered_map< ur_device_handle_t , std::list< ur_event_handle_t > * >>
167+ using EventCache = std::vector<std::list<ur_event_handle_t >> ;
168+ EventCache EventCaches{ 4 };
169+ std::vector< std::unordered_map< ur_device_handle_t , size_t >>
171170 EventCachesDeviceMap{4 };
172171
173172 // Initialize the PI context.
@@ -205,46 +204,36 @@ struct ur_context_handle_t_ : _ur_object {
205204 // Add ur_event_handle_t to cache.
206205 void addEventToContextCache (ur_event_handle_t );
207206
208- auto getZeEventPoolCache (bool HostVisible, bool WithProfiling,
209- ze_device_handle_t ZeDevice) {
210- // Adding 4 initial global caches for provided scope and profiling modes:
211- // Host Scope, Device Scope, with Profiling, without Profiling.
212- if (ZeEventPoolCache.empty ()) {
213- for (int i = 0 ; i < 4 ; i++) {
214- std::list<ze_event_pool_handle_t > *deviceZeEventPoolCache =
215- new std::list<ze_event_pool_handle_t >;
216- ZeEventPoolCache.push_back (deviceZeEventPoolCache);
217- }
218- }
207+ std::list<ze_event_pool_handle_t > *
208+ getZeEventPoolCache (bool HostVisible, bool WithProfiling,
209+ ze_device_handle_t ZeDevice) {
219210 if (HostVisible) {
220211 if (ZeDevice) {
221212 auto ZeEventPoolCacheMap = WithProfiling
222213 ? &ZeEventPoolCacheDeviceMap[0 ]
223214 : &ZeEventPoolCacheDeviceMap[1 ];
224215 if (ZeEventPoolCacheMap->find (ZeDevice) == ZeEventPoolCacheMap->end ()) {
225- std::list<ze_event_pool_handle_t > *deviceZeEventPoolCache =
226- new std::list<ze_event_pool_handle_t >;
227- ZeEventPoolCache.push_back (deviceZeEventPoolCache);
228- (*ZeEventPoolCacheMap)[ZeDevice] = deviceZeEventPoolCache;
216+ ZeEventPoolCache.emplace_back ();
217+ ZeEventPoolCacheMap->insert (
218+ std::make_pair (ZeDevice, ZeEventPoolCache.size () - 1 ));
229219 }
230- return (*ZeEventPoolCacheMap)[ZeDevice];
220+ return &ZeEventPoolCache[ (*ZeEventPoolCacheMap)[ZeDevice] ];
231221 } else {
232- return WithProfiling ? ZeEventPoolCache[0 ] : ZeEventPoolCache[1 ];
222+ return WithProfiling ? & ZeEventPoolCache[0 ] : & ZeEventPoolCache[1 ];
233223 }
234224 } else {
235225 if (ZeDevice) {
236226 auto ZeEventPoolCacheMap = WithProfiling
237227 ? &ZeEventPoolCacheDeviceMap[2 ]
238228 : &ZeEventPoolCacheDeviceMap[3 ];
239229 if (ZeEventPoolCacheMap->find (ZeDevice) == ZeEventPoolCacheMap->end ()) {
240- std::list<ze_event_pool_handle_t > *deviceZeEventPoolCache =
241- new std::list<ze_event_pool_handle_t >;
242- ZeEventPoolCache.push_back (deviceZeEventPoolCache);
243- (*ZeEventPoolCacheMap)[ZeDevice] = deviceZeEventPoolCache;
230+ ZeEventPoolCache.emplace_back ();
231+ ZeEventPoolCacheMap->insert (
232+ std::make_pair (ZeDevice, ZeEventPoolCache.size () - 1 ));
244233 }
245- return (*ZeEventPoolCacheMap)[ZeDevice];
234+ return &ZeEventPoolCache[ (*ZeEventPoolCacheMap)[ZeDevice] ];
246235 } else {
247- return WithProfiling ? ZeEventPoolCache[2 ] : ZeEventPoolCache[3 ];
236+ return WithProfiling ? & ZeEventPoolCache[2 ] : & ZeEventPoolCache[3 ];
248237 }
249238 }
250239 }
@@ -287,42 +276,31 @@ struct ur_context_handle_t_ : _ur_object {
287276 // Get the cache of events for a provided scope and profiling mode.
288277 auto getEventCache (bool HostVisible, bool WithProfiling,
289278 ur_device_handle_t Device) {
290- // Adding 4 initial global caches for provided scope and profiling modes:
291- // Host Scope, Device Scope, with Profiling, without Profiling.
292- if (EventCaches.empty ()) {
293- for (int i = 0 ; i < 4 ; i++) {
294- std::list<ur_event_handle_t > *deviceEventCache =
295- new std::list<ur_event_handle_t >;
296- EventCaches.push_back (deviceEventCache);
297- }
298- }
299279 if (HostVisible) {
300280 if (Device) {
301281 auto EventCachesMap =
302282 WithProfiling ? &EventCachesDeviceMap[0 ] : &EventCachesDeviceMap[1 ];
303283 if (EventCachesMap->find (Device) == EventCachesMap->end ()) {
304- std::list<ur_event_handle_t > *deviceEventCache =
305- new std::list<ur_event_handle_t >;
306- EventCaches.push_back (deviceEventCache);
307- (*EventCachesMap)[Device] = deviceEventCache;
284+ EventCaches.emplace_back ();
285+ EventCachesMap->insert (
286+ std::make_pair (Device, EventCaches.size () - 1 ));
308287 }
309- return (*EventCachesMap)[Device];
288+ return &EventCaches[ (*EventCachesMap)[Device] ];
310289 } else {
311- return WithProfiling ? EventCaches[0 ] : EventCaches[1 ];
290+ return WithProfiling ? & EventCaches[0 ] : & EventCaches[1 ];
312291 }
313292 } else {
314293 if (Device) {
315294 auto EventCachesMap =
316295 WithProfiling ? &EventCachesDeviceMap[2 ] : &EventCachesDeviceMap[3 ];
317296 if (EventCachesMap->find (Device) == EventCachesMap->end ()) {
318- std::list<ur_event_handle_t > *deviceEventCache =
319- new std::list<ur_event_handle_t >;
320- EventCaches.push_back (deviceEventCache);
321- (*EventCachesMap)[Device] = deviceEventCache;
297+ EventCaches.emplace_back ();
298+ EventCachesMap->insert (
299+ std::make_pair (Device, EventCaches.size () - 1 ));
322300 }
323- return (*EventCachesMap)[Device];
301+ return &EventCaches[ (*EventCachesMap)[Device] ];
324302 } else {
325- return WithProfiling ? EventCaches[2 ] : EventCaches[3 ];
303+ return WithProfiling ? & EventCaches[2 ] : & EventCaches[3 ];
326304 }
327305 }
328306 }
0 commit comments