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

@@ -2591,7 +2591,7 @@ void CommandListCoreFamily<gfxCoreFamily>::appendSignalInOrderDependencyCounter(
appendSdiInOrderCounterSignalling(inOrderExecInfo->getHostCounterAllocation()->getGpuAddress(), signalValue);
}
if ((NEO::debugManager.flags.ProgramUserInterruptOnResolvedDependency.get() == 1) && signalEvent && signalEvent->isKmdWaitModeEnabled()) {
if ((NEO::debugManager.flags.ProgramUserInterruptOnResolvedDependency.get() == 1) && signalEvent && signalEvent->isInterruptModeEnabled()) {
NEO::EnodeUserInterrupt<GfxFamily>::encode(*cmdStream);
}
}

View File

@@ -33,5 +33,6 @@ const std::vector<std::pair<std::string, uint32_t>> DriverHandleImp::extensionsS
{ZE_INTEL_DEVICE_MODULE_DP_PROPERTIES_EXP_NAME, ZE_INTEL_DEVICE_MODULE_DP_PROPERTIES_EXP_VERSION_CURRENT},
{ZE_EVENT_POOL_COUNTER_BASED_EXP_NAME, ZE_EVENT_POOL_COUNTER_BASED_EXP_VERSION_CURRENT},
{ZE_INTEL_COMMAND_LIST_MEMORY_SYNC, ZE_INTEL_COMMAND_LIST_MEMORY_SYNC_EXP_VERSION_CURRENT},
{ZE_INTEL_EVENT_SYNC_MODE_EXP_NAME, ZE_INTEL_EVENT_SYNC_MODE_EXP_VERSION_CURRENT},
};
} // namespace L0

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;
}