feature: make CB event initially signaled

Related-To: NEO-11378

Signed-off-by: Bartosz Dunajski <bartosz.dunajski@intel.com>
This commit is contained in:
Bartosz Dunajski
2024-05-14 13:07:28 +00:00
committed by Compute-Runtime-Automation
parent f10439aea2
commit 21114ddc03
4 changed files with 11 additions and 9 deletions

View File

@@ -2646,16 +2646,16 @@ ze_result_t CommandListCoreFamily<gfxCoreFamily>::appendWaitOnEvents(uint32_t nu
for (uint32_t i = 0; i < numEvents; i++) {
auto event = Event::fromHandle(phEvent[i]);
if (event->isCounterBased() && !event->getInOrderExecInfo().get()) {
return ZE_RESULT_ERROR_INVALID_ARGUMENT; // in-order event not signaled yet
}
if ((isImmediateType() && event->isAlreadyCompleted()) ||
canSkipInOrderEventWait(*event, this->allowCbWaitEventsNoopDispatch)) {
continue;
}
if (event->isCounterBased()) {
if (!event->getInOrderExecInfo().get()) {
return ZE_RESULT_ERROR_INVALID_ARGUMENT; // in-order event not signaled yet
}
// 1. Regular CmdList adds submission counter to base value on each Execute
// 2. Immediate CmdList takes current value (with submission counter)
auto waitValue = !isImmediateType() ? event->getInOrderExecBaseSignalValue() : event->getInOrderExecSignalValueWithSubmissionCounter();

View File

@@ -220,7 +220,7 @@ void EventImp<TagSizeT>::assignKernelEventCompletionData(void *address) {
template <typename TagSizeT>
ze_result_t EventImp<TagSizeT>::queryCounterBasedEventStatus() {
if (!this->inOrderExecInfo.get()) {
return ZE_RESULT_NOT_READY;
return ZE_RESULT_SUCCESS;
}
auto waitValue = getInOrderExecSignalValueWithSubmissionCounter();
@@ -520,7 +520,7 @@ ze_result_t EventImp<TagSizeT>::waitForUserFence(uint64_t timeout) {
}
if (!inOrderExecInfo) {
return ZE_RESULT_NOT_READY;
return ZE_RESULT_SUCCESS;
}
uint64_t waitAddress = castToUint64(ptrOffset(inOrderExecInfo->getBaseHostAddress(), this->inOrderAllocationOffset));

View File

@@ -36,11 +36,13 @@ struct InOrderCmdListFixture : public ::Test<ModuleFixture> {
void makeCounterBasedInitiallyDisabled() {
counterBasedMode = CounterBasedMode::initiallyDisabled;
resetCompletionStatus();
counterBasedFlags = 0;
}
void makeCounterBasedImplicitlyDisabled() {
counterBasedMode = CounterBasedMode::implicitlyDisabled;
resetCompletionStatus();
counterBasedFlags = 0;
}
};

View File

@@ -235,11 +235,11 @@ HWTEST2_F(InOrderCmdListTests, givenIpcPoolEventWhenTryingToImplicitlyConverToCo
EXPECT_EQ(Event::CounterBasedMode::implicitlyDisabled, event1->counterBasedMode);
}
HWTEST2_F(InOrderCmdListTests, givenNotSignaledInOrderWhenWhenCallingQueryStatusThenReturnNotReady, IsAtLeastSkl) {
HWTEST2_F(InOrderCmdListTests, givenNotSignaledInOrderWhenWhenCallingQueryStatusThenReturnSuccess, IsAtLeastSkl) {
auto eventPool = createEvents<FamilyType>(1, false);
events[0]->enableCounterBasedMode(true, eventPool->getCounterBasedFlags());
EXPECT_EQ(ZE_RESULT_NOT_READY, events[0]->queryStatus());
EXPECT_EQ(ZE_RESULT_SUCCESS, events[0]->queryStatus());
}
HWTEST2_F(InOrderCmdListTests, givenCmdListsWhenDispatchingThenUseInternalTaskCountForWaits, IsAtLeastSkl) {
@@ -347,7 +347,7 @@ HWTEST2_F(InOrderCmdListTests, givenDebugFlagSetWhenEventHostSyncCalledThenCallW
EXPECT_TRUE(events[1]->isKmdWaitModeEnabled());
EXPECT_TRUE(events[1]->isInterruptModeEnabled());
EXPECT_EQ(ZE_RESULT_NOT_READY, events[0]->hostSynchronize(2));
EXPECT_EQ(ZE_RESULT_SUCCESS, events[0]->hostSynchronize(2));
immCmdList->appendLaunchKernel(kernel->toHandle(), groupCount, events[0]->toHandle(), 0, nullptr, launchParams, false);