@@ -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} {}
@@ -147,9 +154,10 @@ struct ur_context_handle_t_ : _ur_object {
147
154
// head.
148
155
//
149
156
// Cache of event pools to which host-visible events are added to.
150
- std::vector<std::list<ze_event_pool_handle_t >> ZeEventPoolCache{12 };
157
+ std::vector<std::list<ze_event_pool_handle_t >> ZeEventPoolCache{
158
+ ZeEventPoolCacheTypeCount * 2 };
151
159
std::vector<std::unordered_map<ze_device_handle_t , size_t >>
152
- ZeEventPoolCacheDeviceMap{12 };
160
+ ZeEventPoolCacheDeviceMap{ZeEventPoolCacheTypeCount * 2 };
153
161
154
162
// This map will be used to determine if a pool is full or not
155
163
// by storing number of empty slots available in the pool.
@@ -171,9 +179,9 @@ struct ur_context_handle_t_ : _ur_object {
171
179
172
180
// Caches for events.
173
181
using EventCache = std::vector<std::list<ur_event_handle_t >>;
174
- EventCache EventCaches{4 };
182
+ EventCache EventCaches{EventCacheTypeCount };
175
183
std::vector<std::unordered_map<ur_device_handle_t , size_t >>
176
- EventCachesDeviceMap{4 };
184
+ EventCachesDeviceMap{EventCacheTypeCount };
177
185
178
186
// Initialize the PI context.
179
187
ur_result_t initialize ();
@@ -211,25 +219,39 @@ struct ur_context_handle_t_ : _ur_object {
211
219
ur_event_handle_t getEventFromContextCache (bool HostVisible,
212
220
bool WithProfiling,
213
221
ur_device_handle_t Device,
214
- bool CounterBasedEventEnabled);
222
+ bool CounterBasedEventEnabled,
223
+ bool UsingImmCmdList);
215
224
216
225
// Add ur_event_handle_t to cache.
217
226
void addEventToContextCache (ur_event_handle_t );
218
227
219
- enum EventPoolCacheType {
228
+ enum ZeEventPoolCacheType {
220
229
HostVisibleCacheType,
221
230
HostInvisibleCacheType,
222
231
HostVisibleCounterBasedRegularCacheType,
223
232
HostInvisibleCounterBasedRegularCacheType,
224
233
HostVisibleCounterBasedImmediateCacheType,
225
- HostInvisibleCounterBasedImmediateCacheType
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
226
248
};
227
249
228
250
std::list<ze_event_pool_handle_t > *
229
251
getZeEventPoolCache (bool HostVisible, bool WithProfiling,
230
252
bool CounterBasedEventEnabled, bool UsingImmediateCmdList,
231
253
ze_device_handle_t ZeDevice) {
232
- EventPoolCacheType CacheType;
254
+ ZeEventPoolCacheType CacheType;
233
255
234
256
calculateCacheIndex (HostVisible, CounterBasedEventEnabled,
235
257
UsingImmediateCmdList, CacheType);
@@ -252,7 +274,7 @@ struct ur_context_handle_t_ : _ur_object {
252
274
ur_result_t calculateCacheIndex (bool HostVisible,
253
275
bool CounterBasedEventEnabled,
254
276
bool UsingImmediateCmdList,
255
- EventPoolCacheType &CacheType) {
277
+ ZeEventPoolCacheType &CacheType) {
256
278
if (CounterBasedEventEnabled && HostVisible && !UsingImmediateCmdList) {
257
279
CacheType = HostVisibleCounterBasedRegularCacheType;
258
280
} else if (CounterBasedEventEnabled && !HostVisible &&
@@ -316,34 +338,57 @@ struct ur_context_handle_t_ : _ur_object {
316
338
if (HostVisible) {
317
339
if (Device) {
318
340
auto EventCachesMap =
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
- }
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];
325
369
return &EventCaches[(*EventCachesMap)[Device]];
326
370
} else {
327
- return WithProfiling ? &EventCaches[0 ] : &EventCaches[1 ];
371
+ return WithProfiling
372
+ ? &EventCaches[CounterBasedImmediateProfilingCacheType]
373
+ : &EventCaches[CounterBasedImmediateCacheType];
328
374
}
329
375
} else {
330
376
if (Device) {
331
377
auto EventCachesMap =
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
- }
378
+ WithProfiling
379
+ ? &EventCachesDeviceMap[CounterBasedRegularProfilingCacheType]
380
+ : &EventCachesDeviceMap[CounterBasedRegularCacheType];
338
381
return &EventCaches[(*EventCachesMap)[Device]];
339
382
} else {
340
- return WithProfiling ? &EventCaches[2 ] : &EventCaches[3 ];
383
+ return WithProfiling
384
+ ? &EventCaches[CounterBasedRegularProfilingCacheType]
385
+ : &EventCaches[CounterBasedRegularCacheType];
341
386
}
342
387
}
343
388
}
344
389
};
345
390
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.
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.
349
394
ur_result_t ContextReleaseHelper (ur_context_handle_t Context);
0 commit comments