mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-03 06:49:52 +08:00
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:
committed by
Compute-Runtime-Automation
parent
8b58cbbad8
commit
156154813a
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user