refactor: extract methods to setup SCM state per context

per context properties are now set explicitly

Related-To: NEO-12803, NEO-13632
Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
Mateusz Jablonski
2025-01-02 13:45:21 +00:00
committed by Compute-Runtime-Automation
parent f762516900
commit 165c294590
4 changed files with 71 additions and 40 deletions

View File

@@ -293,62 +293,87 @@ TEST(StreamPropertiesTests, givenOtherPipelineSelectPropertiesStructWhenSetPrope
verifySettingPropertiesFromOtherStruct<PipelineSelectProperties, getAllPipelineSelectProperties>();
}
TEST(StreamPropertiesTests, givenCoherencyStateAndDevicePreemptionComputeModePropertiesWhenSettingPropertyAndCheckIfSupportedThenExpectCorrectState) {
TEST(StreamPropertiesTests, givenVariousDevicePreemptionComputeModesWhenSettingPropertyPerContextAndCheckIfSupportedThenExpectCorrectState) {
bool clearDirtyState = false;
MockStateComputeModeProperties scmProperties{};
scmProperties.propertiesSupportLoaded = true;
scmProperties.scmPropertiesSupport.coherencyRequired = false;
scmProperties.scmPropertiesSupport.devicePreemptionMode = false;
bool coherencyRequired = false;
PreemptionMode devicePreemptionMode = PreemptionMode::Disabled;
scmProperties.setPropertiesCoherencyDevicePreemption(coherencyRequired, devicePreemptionMode, clearDirtyState);
scmProperties.setPropertiesPerContext(coherencyRequired, devicePreemptionMode, clearDirtyState);
EXPECT_FALSE(scmProperties.isDirty());
EXPECT_EQ(-1, scmProperties.isCoherencyRequired.value);
EXPECT_EQ(-1, scmProperties.devicePreemptionMode.value);
scmProperties.scmPropertiesSupport.coherencyRequired = true;
scmProperties.scmPropertiesSupport.devicePreemptionMode = true;
scmProperties.setPropertiesCoherencyDevicePreemption(coherencyRequired, devicePreemptionMode, clearDirtyState);
scmProperties.setPropertiesPerContext(coherencyRequired, devicePreemptionMode, clearDirtyState);
EXPECT_TRUE(scmProperties.isDirty());
EXPECT_EQ(0, scmProperties.isCoherencyRequired.value);
EXPECT_EQ(static_cast<int32_t>(devicePreemptionMode), scmProperties.devicePreemptionMode.value);
devicePreemptionMode = PreemptionMode::Initial;
scmProperties.setPropertiesAll(coherencyRequired, -1, -1, devicePreemptionMode);
EXPECT_TRUE(scmProperties.isDirty());
EXPECT_EQ(0, scmProperties.isCoherencyRequired.value);
EXPECT_EQ(static_cast<int32_t>(devicePreemptionMode), scmProperties.devicePreemptionMode.value);
scmProperties.setPropertiesCoherencyDevicePreemption(coherencyRequired, devicePreemptionMode, clearDirtyState);
scmProperties.setPropertiesPerContext(coherencyRequired, devicePreemptionMode, clearDirtyState);
EXPECT_FALSE(scmProperties.isDirty());
EXPECT_EQ(0, scmProperties.isCoherencyRequired.value);
EXPECT_EQ(static_cast<int32_t>(devicePreemptionMode), scmProperties.devicePreemptionMode.value);
scmProperties.setPropertiesCoherencyDevicePreemption(coherencyRequired, devicePreemptionMode, clearDirtyState);
EXPECT_FALSE(scmProperties.isDirty());
EXPECT_EQ(0, scmProperties.isCoherencyRequired.value);
EXPECT_EQ(static_cast<int32_t>(devicePreemptionMode), scmProperties.devicePreemptionMode.value);
coherencyRequired = true;
devicePreemptionMode = PreemptionMode::MidThread;
scmProperties.setPropertiesCoherencyDevicePreemption(coherencyRequired, devicePreemptionMode, clearDirtyState);
scmProperties.setPropertiesPerContext(coherencyRequired, devicePreemptionMode, clearDirtyState);
EXPECT_TRUE(scmProperties.isDirty());
EXPECT_EQ(1, scmProperties.isCoherencyRequired.value);
EXPECT_EQ(static_cast<int32_t>(devicePreemptionMode), scmProperties.devicePreemptionMode.value);
scmProperties.setPropertiesCoherencyDevicePreemption(coherencyRequired, devicePreemptionMode, clearDirtyState);
scmProperties.setPropertiesPerContext(coherencyRequired, devicePreemptionMode, clearDirtyState);
EXPECT_FALSE(scmProperties.isDirty());
EXPECT_EQ(1, scmProperties.isCoherencyRequired.value);
EXPECT_EQ(static_cast<int32_t>(devicePreemptionMode), scmProperties.devicePreemptionMode.value);
clearDirtyState = true;
coherencyRequired = false;
devicePreemptionMode = PreemptionMode::ThreadGroup;
scmProperties.setPropertiesCoherencyDevicePreemption(coherencyRequired, devicePreemptionMode, clearDirtyState);
scmProperties.setPropertiesPerContext(coherencyRequired, devicePreemptionMode, clearDirtyState);
EXPECT_FALSE(scmProperties.isDirty());
EXPECT_EQ(static_cast<int32_t>(devicePreemptionMode), scmProperties.devicePreemptionMode.value);
}
TEST(StreamPropertiesTests, givenVariousCoherencyRequirementsWhenSettingPropertyPerContextAndCheckIfSupportedThenExpectCorrectState) {
bool clearDirtyState = false;
MockStateComputeModeProperties scmProperties{};
scmProperties.propertiesSupportLoaded = true;
scmProperties.scmPropertiesSupport.coherencyRequired = false;
bool coherencyRequired = false;
PreemptionMode devicePreemptionMode = PreemptionMode::Disabled;
scmProperties.setPropertiesPerContext(coherencyRequired, devicePreemptionMode, clearDirtyState);
EXPECT_FALSE(scmProperties.isDirty());
EXPECT_EQ(-1, scmProperties.isCoherencyRequired.value);
scmProperties.scmPropertiesSupport.coherencyRequired = true;
scmProperties.setPropertiesPerContext(coherencyRequired, devicePreemptionMode, clearDirtyState);
EXPECT_TRUE(scmProperties.isDirty());
EXPECT_EQ(0, scmProperties.isCoherencyRequired.value);
scmProperties.setPropertiesAll(coherencyRequired, -1, -1, devicePreemptionMode);
EXPECT_FALSE(scmProperties.isDirty());
EXPECT_EQ(0, scmProperties.isCoherencyRequired.value);
scmProperties.setPropertiesPerContext(coherencyRequired, devicePreemptionMode, clearDirtyState);
EXPECT_FALSE(scmProperties.isDirty());
EXPECT_EQ(0, scmProperties.isCoherencyRequired.value);
coherencyRequired = true;
scmProperties.setPropertiesPerContext(coherencyRequired, devicePreemptionMode, clearDirtyState);
EXPECT_TRUE(scmProperties.isDirty());
EXPECT_EQ(1, scmProperties.isCoherencyRequired.value);
scmProperties.setPropertiesPerContext(coherencyRequired, devicePreemptionMode, clearDirtyState);
EXPECT_FALSE(scmProperties.isDirty());
EXPECT_EQ(1, scmProperties.isCoherencyRequired.value);
clearDirtyState = true;
coherencyRequired = false;
scmProperties.setPropertiesPerContext(coherencyRequired, devicePreemptionMode, clearDirtyState);
EXPECT_FALSE(scmProperties.isDirty());
EXPECT_EQ(0, scmProperties.isCoherencyRequired.value);
EXPECT_EQ(static_cast<int32_t>(devicePreemptionMode), scmProperties.devicePreemptionMode.value);
}
TEST(StreamPropertiesTests, givenGrfNumberAndThreadArbitrationStateComputeModePropertiesWhenSettingPropertyAndCheckIfSupportedThenExpectCorrectState) {