mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-03 14:55:24 +08:00
Enable state compute mode tracking for XE_HPG
Related-To: NEO-5019 Signed-off-by: Zbigniew Zdanowicz <zbigniew.zdanowicz@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
9c237d99ec
commit
44d7420893
@@ -42,6 +42,11 @@ bool L0HwHelperHw<Family>::platformSupportsFrontEndTracking(const NEO::HardwareI
|
||||
return true;
|
||||
}
|
||||
|
||||
template <>
|
||||
bool L0HwHelperHw<Family>::platformSupportsStateComputeModeTracking(const NEO::HardwareInfo &hwInfo) const {
|
||||
return true;
|
||||
}
|
||||
|
||||
// clang-format off
|
||||
#include "level_zero/core/source/hw_helpers/l0_hw_helper_tgllp_plus.inl"
|
||||
// clang-format on
|
||||
|
||||
@@ -361,27 +361,38 @@ struct ProgramAllFieldsInComputeMode {
|
||||
}
|
||||
};
|
||||
|
||||
HWTEST2_F(CommandListAppendLaunchKernel, GivenComputeModeTraitsSetToFalsePropertiesWhenUpdateStreamPropertiesIsCalledTwiceThenAllFieldsAreDirty, ProgramAllFieldsInComputeMode) {
|
||||
HWTEST2_F(CommandListAppendLaunchKernel,
|
||||
GivenComputeModeTraitsSetToFalsePropertiesWhenUpdateStreamPropertiesIsCalledTwiceThenFieldsAreDirtyWithTrackingAndCleanWithoutTracking,
|
||||
ProgramAllFieldsInComputeMode) {
|
||||
DebugManagerStateRestore restorer;
|
||||
auto &hwInfoConfig = *NEO::HwInfoConfig::get(defaultHwInfo->platform.eProductFamily);
|
||||
|
||||
Mock<::L0::Kernel> kernel;
|
||||
auto pMockModule = std::unique_ptr<Module>(new Mock<Module>(device, nullptr));
|
||||
kernel.module = pMockModule.get();
|
||||
auto mockModule = std::unique_ptr<Module>(new Mock<Module>(device, nullptr));
|
||||
kernel.module = mockModule.get();
|
||||
|
||||
auto pCommandList = std::make_unique<WhiteBox<::L0::CommandListCoreFamily<gfxCoreFamily>>>();
|
||||
auto result = pCommandList->initialize(device, NEO::EngineGroupType::Compute, 0u);
|
||||
auto commandList = std::make_unique<WhiteBox<::L0::CommandListCoreFamily<gfxCoreFamily>>>();
|
||||
auto result = commandList->initialize(device, NEO::EngineGroupType::Compute, 0u);
|
||||
ASSERT_EQ(ZE_RESULT_SUCCESS, result);
|
||||
|
||||
const_cast<NEO::KernelDescriptor *>(&kernel.getKernelDescriptor())->kernelAttributes.numGrfRequired = 0x100;
|
||||
pCommandList->updateStreamProperties(kernel, false);
|
||||
EXPECT_TRUE(pCommandList->finalStreamState.stateComputeMode.isCoherencyRequired.isDirty);
|
||||
EXPECT_EQ(hwInfoConfig.isGrfNumReportedWithScm(), pCommandList->finalStreamState.stateComputeMode.largeGrfMode.isDirty);
|
||||
commandList->updateStreamProperties(kernel, false);
|
||||
if (commandList->stateComputeModeTracking) {
|
||||
EXPECT_FALSE(commandList->finalStreamState.stateComputeMode.isCoherencyRequired.isDirty);
|
||||
if (hwInfoConfig.isGrfNumReportedWithScm()) {
|
||||
EXPECT_NE(-1, commandList->finalStreamState.stateComputeMode.largeGrfMode.value);
|
||||
} else {
|
||||
EXPECT_EQ(-1, commandList->finalStreamState.stateComputeMode.largeGrfMode.value);
|
||||
}
|
||||
} else {
|
||||
EXPECT_TRUE(commandList->finalStreamState.stateComputeMode.isCoherencyRequired.isDirty);
|
||||
EXPECT_EQ(hwInfoConfig.isGrfNumReportedWithScm(), commandList->finalStreamState.stateComputeMode.largeGrfMode.isDirty);
|
||||
}
|
||||
|
||||
const_cast<NEO::KernelDescriptor *>(&kernel.getKernelDescriptor())->kernelAttributes.numGrfRequired = 0x80;
|
||||
pCommandList->updateStreamProperties(kernel, false);
|
||||
EXPECT_EQ(hwInfoConfig.isGrfNumReportedWithScm(), pCommandList->finalStreamState.stateComputeMode.largeGrfMode.isDirty);
|
||||
EXPECT_FALSE(pCommandList->finalStreamState.stateComputeMode.isCoherencyRequired.isDirty);
|
||||
commandList->updateStreamProperties(kernel, false);
|
||||
EXPECT_EQ(hwInfoConfig.isGrfNumReportedWithScm(), commandList->finalStreamState.stateComputeMode.largeGrfMode.isDirty);
|
||||
EXPECT_FALSE(commandList->finalStreamState.stateComputeMode.isCoherencyRequired.isDirty);
|
||||
}
|
||||
|
||||
HWTEST2_F(CommandListAppendLaunchKernel, GivenComputeModePropertiesWhenPropertesNotChangedThenAllFieldsAreNotDirty, IsAtLeastSkl) {
|
||||
|
||||
@@ -321,8 +321,9 @@ HWTEST2_F(CommandListCreate, givenRangeBetweenTwoPagesWhenAppendRangesBarrierThe
|
||||
template <PRODUCT_FAMILY productFamily>
|
||||
struct CommandListAdjustStateComputeMode : public WhiteBox<::L0::CommandListProductFamily<productFamily>> {
|
||||
CommandListAdjustStateComputeMode() : WhiteBox<::L0::CommandListProductFamily<productFamily>>(1) {}
|
||||
using ::L0::CommandListProductFamily<productFamily>::updateStreamProperties;
|
||||
using ::L0::CommandListProductFamily<productFamily>::finalStreamState;
|
||||
using ::L0::CommandListProductFamily<productFamily>::stateComputeModeTracking;
|
||||
using ::L0::CommandListProductFamily<productFamily>::updateStreamProperties;
|
||||
};
|
||||
struct ProgramAllFieldsInComputeMode {
|
||||
template <PRODUCT_FAMILY productFamily>
|
||||
@@ -335,22 +336,34 @@ struct ProgramAllFieldsInComputeMode {
|
||||
}
|
||||
};
|
||||
|
||||
HWTEST2_F(CommandListCreate, GivenComputeModePropertiesWhenUpdateStreamPropertiesIsCalledTwiceThenFieldsChanged, ProgramAllFieldsInComputeMode) {
|
||||
HWTEST2_F(CommandListCreate, GivenComputeModePropertiesWhenUpdateStreamPropertiesIsCalledTwiceThenWithoutTrackingFieldsChangedWithTrackingUpdatedClean, ProgramAllFieldsInComputeMode) {
|
||||
DebugManagerStateRestore restorer;
|
||||
Mock<::L0::Kernel> kernel;
|
||||
auto pMockModule = std::unique_ptr<Module>(new Mock<Module>(device, nullptr));
|
||||
kernel.module = pMockModule.get();
|
||||
auto pCommandList = std::make_unique<CommandListAdjustStateComputeMode<productFamily>>();
|
||||
auto result = pCommandList->initialize(device, NEO::EngineGroupType::Compute, 0u);
|
||||
auto &hwInfoConfig = *NEO::HwInfoConfig::get(defaultHwInfo->platform.eProductFamily);
|
||||
|
||||
auto mockModule = std::unique_ptr<Module>(new Mock<Module>(device, nullptr));
|
||||
kernel.module = mockModule.get();
|
||||
auto commandList = std::make_unique<CommandListAdjustStateComputeMode<productFamily>>();
|
||||
auto result = commandList->initialize(device, NEO::EngineGroupType::Compute, 0u);
|
||||
ASSERT_EQ(ZE_RESULT_SUCCESS, result);
|
||||
|
||||
const_cast<NEO::KernelDescriptor *>(&kernel.getKernelDescriptor())->kernelAttributes.numGrfRequired = 0x100;
|
||||
pCommandList->updateStreamProperties(kernel, false);
|
||||
EXPECT_TRUE(pCommandList->finalStreamState.stateComputeMode.isCoherencyRequired.isDirty);
|
||||
EXPECT_TRUE(pCommandList->finalStreamState.stateComputeMode.largeGrfMode.isDirty);
|
||||
commandList->updateStreamProperties(kernel, false);
|
||||
if (commandList->stateComputeModeTracking) {
|
||||
EXPECT_FALSE(commandList->finalStreamState.stateComputeMode.isCoherencyRequired.isDirty);
|
||||
if (hwInfoConfig.isGrfNumReportedWithScm()) {
|
||||
EXPECT_NE(-1, commandList->finalStreamState.stateComputeMode.largeGrfMode.value);
|
||||
} else {
|
||||
EXPECT_EQ(-1, commandList->finalStreamState.stateComputeMode.largeGrfMode.value);
|
||||
}
|
||||
} else {
|
||||
EXPECT_TRUE(commandList->finalStreamState.stateComputeMode.isCoherencyRequired.isDirty);
|
||||
EXPECT_TRUE(commandList->finalStreamState.stateComputeMode.largeGrfMode.isDirty);
|
||||
}
|
||||
const_cast<NEO::KernelDescriptor *>(&kernel.getKernelDescriptor())->kernelAttributes.numGrfRequired = 0x80;
|
||||
pCommandList->updateStreamProperties(kernel, false);
|
||||
EXPECT_TRUE(pCommandList->finalStreamState.stateComputeMode.largeGrfMode.isDirty);
|
||||
EXPECT_FALSE(pCommandList->finalStreamState.stateComputeMode.isCoherencyRequired.isDirty);
|
||||
commandList->updateStreamProperties(kernel, false);
|
||||
EXPECT_TRUE(commandList->finalStreamState.stateComputeMode.largeGrfMode.isDirty);
|
||||
EXPECT_FALSE(commandList->finalStreamState.stateComputeMode.isCoherencyRequired.isDirty);
|
||||
}
|
||||
struct ProgramDirtyFieldsInComputeMode {
|
||||
template <PRODUCT_FAMILY productFamily>
|
||||
@@ -363,22 +376,28 @@ struct ProgramDirtyFieldsInComputeMode {
|
||||
}
|
||||
};
|
||||
|
||||
HWTEST2_F(CommandListCreate, GivenComputeModePropertiesWhenUpdateStreamPropertiesIsCalledTwiceDirtyFieldsChanged, ProgramDirtyFieldsInComputeMode) {
|
||||
HWTEST2_F(CommandListCreate, GivenComputeModePropertiesWhenUpdateStreamPropertiesIsCalledTwiceDirtyFieldsChangedAndWithTrackingIsCleanAfterFirstCall, ProgramDirtyFieldsInComputeMode) {
|
||||
DebugManagerStateRestore restorer;
|
||||
Mock<::L0::Kernel> kernel;
|
||||
auto pMockModule = std::unique_ptr<Module>(new Mock<Module>(device, nullptr));
|
||||
kernel.module = pMockModule.get();
|
||||
auto pCommandList = std::make_unique<CommandListAdjustStateComputeMode<productFamily>>();
|
||||
auto result = pCommandList->initialize(device, NEO::EngineGroupType::Compute, 0u);
|
||||
auto mockModule = std::unique_ptr<Module>(new Mock<Module>(device, nullptr));
|
||||
kernel.module = mockModule.get();
|
||||
auto commandList = std::make_unique<CommandListAdjustStateComputeMode<productFamily>>();
|
||||
auto result = commandList->initialize(device, NEO::EngineGroupType::Compute, 0u);
|
||||
ASSERT_EQ(ZE_RESULT_SUCCESS, result);
|
||||
const_cast<NEO::KernelDescriptor *>(&kernel.getKernelDescriptor())->kernelAttributes.numGrfRequired = 0x100;
|
||||
pCommandList->updateStreamProperties(kernel, false);
|
||||
EXPECT_TRUE(pCommandList->finalStreamState.stateComputeMode.isCoherencyRequired.isDirty);
|
||||
EXPECT_TRUE(pCommandList->finalStreamState.stateComputeMode.largeGrfMode.isDirty);
|
||||
commandList->updateStreamProperties(kernel, false);
|
||||
if (commandList->stateComputeModeTracking) {
|
||||
EXPECT_FALSE(commandList->finalStreamState.stateComputeMode.isCoherencyRequired.isDirty);
|
||||
EXPECT_FALSE(commandList->finalStreamState.stateComputeMode.largeGrfMode.isDirty);
|
||||
} else {
|
||||
EXPECT_TRUE(commandList->finalStreamState.stateComputeMode.isCoherencyRequired.isDirty);
|
||||
EXPECT_TRUE(commandList->finalStreamState.stateComputeMode.largeGrfMode.isDirty);
|
||||
}
|
||||
|
||||
const_cast<NEO::KernelDescriptor *>(&kernel.getKernelDescriptor())->kernelAttributes.numGrfRequired = 0x80;
|
||||
pCommandList->updateStreamProperties(kernel, false);
|
||||
EXPECT_TRUE(pCommandList->finalStreamState.stateComputeMode.largeGrfMode.isDirty);
|
||||
EXPECT_FALSE(pCommandList->finalStreamState.stateComputeMode.isCoherencyRequired.isDirty);
|
||||
commandList->updateStreamProperties(kernel, false);
|
||||
EXPECT_TRUE(commandList->finalStreamState.stateComputeMode.largeGrfMode.isDirty);
|
||||
EXPECT_FALSE(commandList->finalStreamState.stateComputeMode.isCoherencyRequired.isDirty);
|
||||
}
|
||||
|
||||
using CommandListAppendLaunchKernelXeHpgCore = Test<ModuleFixture>;
|
||||
|
||||
@@ -34,9 +34,9 @@ XE_HPG_CORETEST_F(L0HwHelperTestXeHpg, GivenXeHpgWhenCheckingL0HelperForCmdListH
|
||||
EXPECT_TRUE(L0::L0HwHelperHw<FamilyType>::get().platformSupportsCmdListHeapSharing(hwInfo));
|
||||
}
|
||||
|
||||
XE_HPG_CORETEST_F(L0HwHelperTestXeHpg, GivenXeHpgcWhenCheckingL0HelperForStateComputeModeTrackingSupportThenReturnFalse) {
|
||||
XE_HPG_CORETEST_F(L0HwHelperTestXeHpg, GivenXeHpgcWhenCheckingL0HelperForStateComputeModeTrackingSupportThenReturnTrue) {
|
||||
NEO::HardwareInfo hwInfo = *NEO::defaultHwInfo;
|
||||
EXPECT_FALSE(L0::L0HwHelperHw<FamilyType>::get().platformSupportsStateComputeModeTracking(hwInfo));
|
||||
EXPECT_TRUE(L0::L0HwHelperHw<FamilyType>::get().platformSupportsStateComputeModeTracking(hwInfo));
|
||||
}
|
||||
|
||||
XE_HPG_CORETEST_F(L0HwHelperTestXeHpg, GivenXeHpgWhenCheckingL0HelperForFrontEndTrackingSupportThenReturnTrue) {
|
||||
|
||||
Reference in New Issue
Block a user