mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-03 06:49:52 +08:00
feature: dont program redundant in-order semaphore after cmds chaining
Related-To: NEO-7966 Signed-off-by: Dunajski, Bartosz <bartosz.dunajski@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
4be1a8f615
commit
ae8494d379
@@ -173,7 +173,7 @@ struct CommandListCoreFamily : CommandListImp {
|
||||
ze_result_t appendWaitOnEvents(uint32_t numEvents, ze_event_handle_t *phEvent, bool relaxedOrderingAllowed, bool trackDependencies, bool signalInOrderCompletion) override;
|
||||
void appendWaitOnInOrderDependency(std::shared_ptr<InOrderExecInfo> &inOrderExecInfo, uint64_t waitValue, uint32_t offset, bool relaxedOrderingAllowed, bool implicitDependency);
|
||||
void appendSignalInOrderDependencyCounter();
|
||||
void handleInOrderDependencyCounter(Event *signalEvent);
|
||||
void handleInOrderDependencyCounter(Event *signalEvent, bool nonWalkerInOrderCmdsChaining);
|
||||
|
||||
ze_result_t appendWriteGlobalTimestamp(uint64_t *dstptr, ze_event_handle_t hSignalEvent,
|
||||
uint32_t numWaitEvents, ze_event_handle_t *phWaitEvents) override;
|
||||
@@ -340,6 +340,8 @@ struct CommandListCoreFamily : CommandListImp {
|
||||
void addCmdForPatching(std::shared_ptr<InOrderExecInfo> *externalInOrderExecInfo, void *cmd, uint64_t counterValue, InOrderPatchCommandHelpers::PatchCmdType patchCmdType);
|
||||
|
||||
InOrderPatchCommandsContainer<GfxFamily> inOrderPatchCmds;
|
||||
|
||||
bool latestOperationRequiredNonWalkerInOrderCmdsChaining = false;
|
||||
};
|
||||
|
||||
template <PRODUCT_FAMILY gfxProductFamily>
|
||||
|
||||
@@ -152,7 +152,7 @@ ze_result_t CommandListCoreFamily<gfxCoreFamily>::reset() {
|
||||
}
|
||||
|
||||
template <GFXCORE_FAMILY gfxCoreFamily>
|
||||
void CommandListCoreFamily<gfxCoreFamily>::handleInOrderDependencyCounter(Event *signalEvent) {
|
||||
void CommandListCoreFamily<gfxCoreFamily>::handleInOrderDependencyCounter(Event *signalEvent, bool nonWalkerInOrderCmdsChaining) {
|
||||
if (!isQwordInOrderCounter() && ((inOrderExecInfo->inOrderDependencyCounter + 1) == std::numeric_limits<uint32_t>::max())) {
|
||||
CommandListCoreFamily<gfxCoreFamily>::appendWaitOnInOrderDependency(inOrderExecInfo, inOrderExecInfo->inOrderDependencyCounter + 1, inOrderAllocationOffset, false, true);
|
||||
|
||||
@@ -175,6 +175,8 @@ void CommandListCoreFamily<gfxCoreFamily>::handleInOrderDependencyCounter(Event
|
||||
if (signalEvent && signalEvent->isInOrderExecEvent()) {
|
||||
signalEvent->updateInOrderExecState(inOrderExecInfo, inOrderExecInfo->inOrderDependencyCounter, this->inOrderAllocationOffset);
|
||||
}
|
||||
|
||||
this->latestOperationRequiredNonWalkerInOrderCmdsChaining = nonWalkerInOrderCmdsChaining;
|
||||
}
|
||||
|
||||
template <GFXCORE_FAMILY gfxCoreFamily>
|
||||
@@ -362,7 +364,7 @@ ze_result_t CommandListCoreFamily<gfxCoreFamily>::appendLaunchKernel(ze_kernel_h
|
||||
event, launchParams);
|
||||
|
||||
if (isInOrderExecutionEnabled() && !launchParams.skipInOrderNonWalkerSignaling) {
|
||||
handleInOrderDependencyCounter(event);
|
||||
handleInOrderDependencyCounter(event, isInOrderNonWalkerSignalingRequired(event));
|
||||
}
|
||||
|
||||
addToMappedEventList(event);
|
||||
@@ -403,7 +405,7 @@ ze_result_t CommandListCoreFamily<gfxCoreFamily>::appendLaunchCooperativeKernel(
|
||||
addToMappedEventList(event);
|
||||
|
||||
if (this->isInOrderExecutionEnabled()) {
|
||||
handleInOrderDependencyCounter(event);
|
||||
handleInOrderDependencyCounter(event, isInOrderNonWalkerSignalingRequired(event));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
@@ -438,7 +440,7 @@ ze_result_t CommandListCoreFamily<gfxCoreFamily>::appendLaunchKernelIndirect(ze_
|
||||
appendSignalEventPostWalker(event, false);
|
||||
|
||||
if (isInOrderExecutionEnabled()) {
|
||||
handleInOrderDependencyCounter(event);
|
||||
handleInOrderDependencyCounter(event, isInOrderNonWalkerSignalingRequired(event));
|
||||
}
|
||||
|
||||
return ret;
|
||||
@@ -530,7 +532,7 @@ ze_result_t CommandListCoreFamily<gfxCoreFamily>::appendEventReset(ze_event_hand
|
||||
|
||||
if (this->isInOrderExecutionEnabled()) {
|
||||
appendSignalInOrderDependencyCounter();
|
||||
handleInOrderDependencyCounter(event);
|
||||
handleInOrderDependencyCounter(event, false);
|
||||
}
|
||||
|
||||
if (NEO::DebugManager.flags.EnableSWTags.get()) {
|
||||
@@ -569,7 +571,7 @@ ze_result_t CommandListCoreFamily<gfxCoreFamily>::appendMemoryRangesBarrier(uint
|
||||
|
||||
if (this->isInOrderExecutionEnabled()) {
|
||||
appendSignalInOrderDependencyCounter();
|
||||
handleInOrderDependencyCounter(signalEvent);
|
||||
handleInOrderDependencyCounter(signalEvent, false);
|
||||
}
|
||||
|
||||
return ZE_RESULT_SUCCESS;
|
||||
@@ -1479,7 +1481,9 @@ ze_result_t CommandListCoreFamily<gfxCoreFamily>::appendMemoryCopy(void *dstptr,
|
||||
addToMappedEventList(signalEvent);
|
||||
|
||||
if (this->isInOrderExecutionEnabled()) {
|
||||
if (launchParams.isKernelSplitOperation || inOrderCopyOnlySignalingAllowed) {
|
||||
bool emitPipeControl = !isCopyOnly() && eventSignalPipeControl(launchParams.isKernelSplitOperation, signalEvent ? getDcFlushRequired(signalEvent->isSignalScope()) : false);
|
||||
|
||||
if (launchParams.isKernelSplitOperation || inOrderCopyOnlySignalingAllowed || emitPipeControl) {
|
||||
if (!signalEvent && !isCopyOnly()) {
|
||||
NEO::PipeControlArgs args;
|
||||
NEO::MemorySynchronizationCommands<GfxFamily>::addSingleBarrier(*commandContainer.getCommandStream(), args);
|
||||
@@ -1488,7 +1492,8 @@ ze_result_t CommandListCoreFamily<gfxCoreFamily>::appendMemoryCopy(void *dstptr,
|
||||
}
|
||||
|
||||
if (!isCopyOnly() || inOrderCopyOnlySignalingAllowed) {
|
||||
handleInOrderDependencyCounter(signalEvent);
|
||||
bool nonWalkerInOrderCmdChaining = !isCopyOnly() && isInOrderNonWalkerSignalingRequired(signalEvent) && !emitPipeControl;
|
||||
handleInOrderDependencyCounter(signalEvent, nonWalkerInOrderCmdChaining);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1583,7 +1588,8 @@ ze_result_t CommandListCoreFamily<gfxCoreFamily>::appendMemoryCopyRegion(void *d
|
||||
}
|
||||
|
||||
if (!isCopyOnly() || inOrderCopyOnlySignalingAllowed) {
|
||||
handleInOrderDependencyCounter(signalEvent);
|
||||
bool nonWalkerInOrderCmdChaining = !isCopyOnly() && isInOrderNonWalkerSignalingRequired(signalEvent);
|
||||
handleInOrderDependencyCounter(signalEvent, nonWalkerInOrderCmdChaining);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2022,15 +2028,18 @@ ze_result_t CommandListCoreFamily<gfxCoreFamily>::appendMemoryFill(void *ptr,
|
||||
addFlushRequiredCommand(hostPointerNeedsFlush, signalEvent);
|
||||
|
||||
if (this->isInOrderExecutionEnabled()) {
|
||||
bool nonWalkerInOrderCmdChaining = false;
|
||||
if (launchParams.isKernelSplitOperation) {
|
||||
if (!signalEvent) {
|
||||
NEO::PipeControlArgs args;
|
||||
NEO::MemorySynchronizationCommands<GfxFamily>::addSingleBarrier(*commandContainer.getCommandStream(), args);
|
||||
}
|
||||
appendSignalInOrderDependencyCounter();
|
||||
} else {
|
||||
nonWalkerInOrderCmdChaining = isInOrderNonWalkerSignalingRequired(signalEvent);
|
||||
}
|
||||
|
||||
handleInOrderDependencyCounter(signalEvent);
|
||||
handleInOrderDependencyCounter(signalEvent, nonWalkerInOrderCmdChaining);
|
||||
}
|
||||
|
||||
if (NEO::DebugManager.flags.EnableSWTags.get()) {
|
||||
@@ -2093,7 +2102,7 @@ ze_result_t CommandListCoreFamily<gfxCoreFamily>::appendBlitFill(void *ptr,
|
||||
|
||||
if (isInOrderExecutionEnabled()) {
|
||||
appendSignalInOrderDependencyCounter();
|
||||
handleInOrderDependencyCounter(signalEvent);
|
||||
handleInOrderDependencyCounter(signalEvent, false);
|
||||
}
|
||||
}
|
||||
return ZE_RESULT_SUCCESS;
|
||||
@@ -2265,6 +2274,11 @@ void CommandListCoreFamily<gfxCoreFamily>::handleInOrderImplicitDependencies(boo
|
||||
template <GFXCORE_FAMILY gfxCoreFamily>
|
||||
inline ze_result_t CommandListCoreFamily<gfxCoreFamily>::addEventsToCmdList(uint32_t numWaitEvents, ze_event_handle_t *phWaitEvents, bool relaxedOrderingAllowed, bool trackDependencies, bool waitForImplicitInOrderDependency) {
|
||||
bool inOrderDependencies = false;
|
||||
|
||||
if (this->latestOperationRequiredNonWalkerInOrderCmdsChaining && !relaxedOrderingAllowed) {
|
||||
waitForImplicitInOrderDependency = false;
|
||||
}
|
||||
|
||||
if (waitForImplicitInOrderDependency) {
|
||||
handleInOrderImplicitDependencies(relaxedOrderingAllowed);
|
||||
inOrderDependencies = hasInOrderDependencies();
|
||||
@@ -2312,7 +2326,7 @@ ze_result_t CommandListCoreFamily<gfxCoreFamily>::appendSignalEvent(ze_event_han
|
||||
|
||||
if (this->isInOrderExecutionEnabled()) {
|
||||
appendSignalInOrderDependencyCounter();
|
||||
handleInOrderDependencyCounter(event);
|
||||
handleInOrderDependencyCounter(event, false);
|
||||
}
|
||||
|
||||
if (NEO::DebugManager.flags.EnableSWTags.get()) {
|
||||
@@ -2447,7 +2461,7 @@ ze_result_t CommandListCoreFamily<gfxCoreFamily>::appendWaitOnEvents(uint32_t nu
|
||||
|
||||
if (signalInOrderCompletion) {
|
||||
appendSignalInOrderDependencyCounter();
|
||||
handleInOrderDependencyCounter(nullptr);
|
||||
handleInOrderDependencyCounter(nullptr, false);
|
||||
}
|
||||
|
||||
makeResidentDummyAllocation();
|
||||
@@ -2617,7 +2631,7 @@ ze_result_t CommandListCoreFamily<gfxCoreFamily>::appendWriteGlobalTimestamp(
|
||||
|
||||
if (this->isInOrderExecutionEnabled()) {
|
||||
appendSignalInOrderDependencyCounter();
|
||||
handleInOrderDependencyCounter(signalEvent);
|
||||
handleInOrderDependencyCounter(signalEvent, false);
|
||||
}
|
||||
|
||||
addToMappedEventList(signalEvent);
|
||||
@@ -3125,7 +3139,7 @@ ze_result_t CommandListCoreFamily<gfxCoreFamily>::appendBarrier(ze_event_handle_
|
||||
appendSignalEventPostWalker(signalEvent, this->isInOrderExecutionEnabled());
|
||||
|
||||
if (isInOrderExecutionEnabled()) {
|
||||
handleInOrderDependencyCounter(signalEvent);
|
||||
handleInOrderDependencyCounter(signalEvent, false);
|
||||
}
|
||||
|
||||
return ZE_RESULT_SUCCESS;
|
||||
@@ -3272,7 +3286,7 @@ ze_result_t CommandListCoreFamily<gfxCoreFamily>::appendWaitOnMemory(void *desc,
|
||||
|
||||
if (this->isInOrderExecutionEnabled()) {
|
||||
appendSignalInOrderDependencyCounter();
|
||||
handleInOrderDependencyCounter(signalEvent);
|
||||
handleInOrderDependencyCounter(signalEvent, false);
|
||||
}
|
||||
|
||||
return ZE_RESULT_SUCCESS;
|
||||
@@ -3320,7 +3334,7 @@ ze_result_t CommandListCoreFamily<gfxCoreFamily>::appendWriteToMemory(void *desc
|
||||
|
||||
if (this->isInOrderExecutionEnabled()) {
|
||||
appendSignalInOrderDependencyCounter();
|
||||
handleInOrderDependencyCounter(nullptr);
|
||||
handleInOrderDependencyCounter(nullptr, false);
|
||||
}
|
||||
|
||||
return ZE_RESULT_SUCCESS;
|
||||
|
||||
@@ -446,7 +446,7 @@ ze_result_t CommandListCoreFamilyImmediate<gfxCoreFamily>::appendLaunchKernel(
|
||||
auto event = Event::fromHandle(hSignalEvent);
|
||||
|
||||
handleInOrderNonWalkerSignaling(event, stallingCmdsForRelaxedOrdering, relaxedOrderingDispatch, ret);
|
||||
CommandListCoreFamily<gfxCoreFamily>::handleInOrderDependencyCounter(event);
|
||||
CommandListCoreFamily<gfxCoreFamily>::handleInOrderDependencyCounter(event, true);
|
||||
}
|
||||
|
||||
return flushImmediate(ret, true, stallingCmdsForRelaxedOrdering, relaxedOrderingDispatch, true, hSignalEvent);
|
||||
|
||||
@@ -262,7 +262,7 @@ void CommandListImp::addToMappedEventList(Event *event) {
|
||||
}
|
||||
|
||||
void CommandListImp::incRegularCmdListSubmissionCounter() {
|
||||
if (isInOrderExecutionEnabled() && inOrderExecInfo->isRegularCmdList) {
|
||||
if (isInOrderExecutionEnabled()) {
|
||||
inOrderExecInfo->regularCmdListSubmissionCounter++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -133,7 +133,7 @@ struct BcsSplit {
|
||||
|
||||
if (cmdList->isInOrderExecutionEnabled()) {
|
||||
cmdList->appendSignalInOrderDependencyCounter();
|
||||
cmdList->handleInOrderDependencyCounter(signalEvent);
|
||||
cmdList->handleInOrderDependencyCounter(signalEvent, false);
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
Reference in New Issue
Block a user