feature: api support for Event sync mode

Related-To: NEO-8179

Signed-off-by: Dunajski, Bartosz <bartosz.dunajski@intel.com>
This commit is contained in:
Dunajski, Bartosz
2023-12-08 16:26:30 +00:00
committed by Compute-Runtime-Automation
parent 8b58cbbad8
commit 156154813a
6 changed files with 88 additions and 6 deletions

View File

@@ -256,7 +256,9 @@ struct Event : _ze_event_handle_t {
bool hasKerneMappedTsCapability = false;
std::shared_ptr<InOrderExecInfo> &getInOrderExecInfo() { return inOrderExecInfo; }
void enableKmdWaitMode() { kmdWaitMode = true; }
void enableInterruptMode() { interruptMode = true; }
bool isKmdWaitModeEnabled() const { return kmdWaitMode; }
bool isInterruptModeEnabled() const { return interruptMode; }
void unsetInOrderExecInfo();
protected:
@@ -317,6 +319,7 @@ struct Event : _ze_event_handle_t {
bool signalAllEventPackets = false;
bool isFromIpcPool = false;
bool kmdWaitMode = false;
bool interruptMode = false;
uint64_t timestampRefreshIntervalInNanoSec = 0;
};

View File

@@ -88,10 +88,29 @@ Event *Event::create(EventPool *eventPool, const ze_event_desc_t *desc, Device *
event->enableCounterBasedMode(true);
}
if (NEO::debugManager.flags.WaitForUserFenceOnEventHostSynchronize.get() == 1) {
auto extendedDesc = reinterpret_cast<const ze_base_desc_t *>(desc->pNext);
bool interruptMode = false;
bool kmdWaitMode = false;
if (extendedDesc && (extendedDesc->stype == ZE_INTEL_STRUCTURE_TYPE_EVENT_SYNC_MODE_EXP_DESC)) {
auto eventSyncModeDesc = reinterpret_cast<const ze_intel_event_sync_mode_exp_desc_t *>(extendedDesc);
interruptMode = (eventSyncModeDesc->syncModeFlags & ZE_INTEL_EVENT_SYNC_MODE_EXP_FLAG_SIGNAL_INTERRUPT);
kmdWaitMode = (eventSyncModeDesc->syncModeFlags & ZE_INTEL_EVENT_SYNC_MODE_EXP_FLAG_LOW_POWER_WAIT);
}
interruptMode |= (NEO::debugManager.flags.WaitForUserFenceOnEventHostSynchronize.get() == 1);
kmdWaitMode |= (NEO::debugManager.flags.WaitForUserFenceOnEventHostSynchronize.get() == 1);
if (kmdWaitMode) {
event->enableKmdWaitMode();
}
if (interruptMode) {
event->enableInterruptMode();
}
return event;
}