@@ -39,6 +39,13 @@ struct ur_context_handle_t_ : _ur_object {
39
39
: ZeContext{ZeContext}, Devices{Devs, Devs + NumDevices},
40
40
NumDevices{NumDevices} {
41
41
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
+ }
42
49
}
43
50
44
51
ur_context_handle_t_ (ze_context_handle_t ZeContext) : ZeContext{ZeContext} {}
@@ -150,9 +157,10 @@ struct ur_context_handle_t_ : _ur_object {
150
157
// head.
151
158
//
152
159
// Cache of event pools to which host-visible events are added to.
153
- std::vector<std::list<ze_event_pool_handle_t >> ZeEventPoolCache{12 };
160
+ std::vector<std::list<ze_event_pool_handle_t >> ZeEventPoolCache{
161
+ ZeEventPoolCacheTypeCount * 2 };
154
162
std::vector<std::unordered_map<ze_device_handle_t , size_t >>
155
- ZeEventPoolCacheDeviceMap{12 };
163
+ ZeEventPoolCacheDeviceMap{ZeEventPoolCacheTypeCount * 2 };
156
164
157
165
// This map will be used to determine if a pool is full or not
158
166
// by storing number of empty slots available in the pool.
@@ -174,9 +182,9 @@ struct ur_context_handle_t_ : _ur_object {
174
182
175
183
// Caches for events.
176
184
using EventCache = std::vector<std::list<ur_event_handle_t >>;
177
- EventCache EventCaches{4 };
185
+ EventCache EventCaches{EventCacheTypeCount };
178
186
std::vector<std::unordered_map<ur_device_handle_t , size_t >>
179
- EventCachesDeviceMap{4 };
187
+ EventCachesDeviceMap{EventCacheTypeCount };
180
188
181
189
// Initialize the PI context.
182
190
ur_result_t initialize ();
@@ -214,25 +222,39 @@ struct ur_context_handle_t_ : _ur_object {
214
222
ur_event_handle_t getEventFromContextCache (bool HostVisible,
215
223
bool WithProfiling,
216
224
ur_device_handle_t Device,
217
- bool CounterBasedEventEnabled);
225
+ bool CounterBasedEventEnabled,
226
+ bool UsingImmCmdList);
218
227
219
228
// Add ur_event_handle_t to cache.
220
229
void addEventToContextCache (ur_event_handle_t );
221
230
222
- enum EventPoolCacheType {
231
+ enum ZeEventPoolCacheType {
223
232
HostVisibleCacheType,
224
233
HostInvisibleCacheType,
225
234
HostVisibleCounterBasedRegularCacheType,
226
235
HostInvisibleCounterBasedRegularCacheType,
227
236
HostVisibleCounterBasedImmediateCacheType,
228
- HostInvisibleCounterBasedImmediateCacheType
237
+ HostInvisibleCounterBasedImmediateCacheType,
238
+ ZeEventPoolCacheTypeCount
239
+ };
240
+
241
+ enum EventCacheType {
242
+ HostVisibleProfilingCacheType,
243
+ HostVisibleRegularCacheType,
244
+ HostInvisibleProfilingCacheType,
245
+ HostInvisibleRegularCacheType,
246
+ CounterBasedImmediateCacheType,
247
+ CounterBasedRegularCacheType,
248
+ CounterBasedImmediateProfilingCacheType,
249
+ CounterBasedRegularProfilingCacheType,
250
+ EventCacheTypeCount
229
251
};
230
252
231
253
std::list<ze_event_pool_handle_t > *
232
254
getZeEventPoolCache (bool HostVisible, bool WithProfiling,
233
255
bool CounterBasedEventEnabled, bool UsingImmediateCmdList,
234
256
ze_device_handle_t ZeDevice) {
235
- EventPoolCacheType CacheType;
257
+ ZeEventPoolCacheType CacheType;
236
258
237
259
calculateCacheIndex (HostVisible, CounterBasedEventEnabled,
238
260
UsingImmediateCmdList, CacheType);
@@ -255,7 +277,7 @@ struct ur_context_handle_t_ : _ur_object {
255
277
ur_result_t calculateCacheIndex (bool HostVisible,
256
278
bool CounterBasedEventEnabled,
257
279
bool UsingImmediateCmdList,
258
- EventPoolCacheType &CacheType) {
280
+ ZeEventPoolCacheType &CacheType) {
259
281
if (CounterBasedEventEnabled && HostVisible && !UsingImmediateCmdList) {
260
282
CacheType = HostVisibleCounterBasedRegularCacheType;
261
283
} else if (CounterBasedEventEnabled && !HostVisible &&
@@ -319,28 +341,51 @@ struct ur_context_handle_t_ : _ur_object {
319
341
if (HostVisible) {
320
342
if (Device) {
321
343
auto EventCachesMap =
322
- WithProfiling ? &EventCachesDeviceMap[0 ] : &EventCachesDeviceMap[1 ];
323
- if (EventCachesMap->find (Device) == EventCachesMap->end ()) {
324
- EventCaches.emplace_back ();
325
- EventCachesMap->insert (
326
- std::make_pair (Device, EventCaches.size () - 1 ));
327
- }
344
+ WithProfiling ? &EventCachesDeviceMap[HostVisibleProfilingCacheType]
345
+ : &EventCachesDeviceMap[HostVisibleRegularCacheType];
346
+ return &EventCaches[(*EventCachesMap)[Device]];
347
+ } else {
348
+ return WithProfiling ? &EventCaches[HostVisibleProfilingCacheType]
349
+ : &EventCaches[HostVisibleRegularCacheType];
350
+ }
351
+ } else {
352
+ if (Device) {
353
+ auto EventCachesMap =
354
+ WithProfiling
355
+ ? &EventCachesDeviceMap[HostInvisibleProfilingCacheType]
356
+ : &EventCachesDeviceMap[HostInvisibleRegularCacheType];
357
+ return &EventCaches[(*EventCachesMap)[Device]];
358
+ } else {
359
+ return WithProfiling ? &EventCaches[HostInvisibleProfilingCacheType]
360
+ : &EventCaches[HostInvisibleRegularCacheType];
361
+ }
362
+ }
363
+ };
364
+ auto getCounterBasedEventCache (bool WithProfiling, bool UsingImmediateCmdList,
365
+ ur_device_handle_t Device) {
366
+ if (UsingImmediateCmdList) {
367
+ if (Device) {
368
+ auto EventCachesMap =
369
+ WithProfiling
370
+ ? &EventCachesDeviceMap[CounterBasedImmediateProfilingCacheType]
371
+ : &EventCachesDeviceMap[CounterBasedImmediateCacheType];
328
372
return &EventCaches[(*EventCachesMap)[Device]];
329
373
} else {
330
- return WithProfiling ? &EventCaches[0 ] : &EventCaches[1 ];
374
+ return WithProfiling
375
+ ? &EventCaches[CounterBasedImmediateProfilingCacheType]
376
+ : &EventCaches[CounterBasedImmediateCacheType];
331
377
}
332
378
} else {
333
379
if (Device) {
334
380
auto EventCachesMap =
335
- WithProfiling ? &EventCachesDeviceMap[2 ] : &EventCachesDeviceMap[3 ];
336
- if (EventCachesMap->find (Device) == EventCachesMap->end ()) {
337
- EventCaches.emplace_back ();
338
- EventCachesMap->insert (
339
- std::make_pair (Device, EventCaches.size () - 1 ));
340
- }
381
+ WithProfiling
382
+ ? &EventCachesDeviceMap[CounterBasedRegularProfilingCacheType]
383
+ : &EventCachesDeviceMap[CounterBasedRegularCacheType];
341
384
return &EventCaches[(*EventCachesMap)[Device]];
342
385
} else {
343
- return WithProfiling ? &EventCaches[2 ] : &EventCaches[3 ];
386
+ return WithProfiling
387
+ ? &EventCaches[CounterBasedRegularProfilingCacheType]
388
+ : &EventCaches[CounterBasedRegularCacheType];
344
389
}
345
390
}
346
391
}
0 commit comments