fix: define preferred allocation method per hw release

Related-To: HSD-18033144631
Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
Mateusz Jablonski
2023-09-11 09:05:49 +00:00
committed by Compute-Runtime-Automation
parent 1579c69316
commit aa6b837a67
15 changed files with 126 additions and 40 deletions

View File

@@ -12,6 +12,7 @@
#include "shared/source/os_interface/windows/dxgi_wrapper.h"
#include "shared/source/os_interface/windows/wddm/um_km_data_translator.h"
#include "shared/source/os_interface/windows/windows_wrapper.h"
#include "shared/source/release_helper/release_helper.h"
#include "shared/source/utilities/tag_allocator.h"
#include "shared/test/common/helpers/debug_manager_state_restore.h"
#include "shared/test/common/helpers/execution_environment_helper.h"
@@ -516,11 +517,11 @@ TEST_F(WddmMemoryManagerTests, givenTypeWhenCallIsStatelessAccessRequiredThenPro
}
TEST_F(WddmMemoryManagerTests, givenForcePreferredAllocationMethodFlagSetWhenGettingPreferredAllocationMethodThenValueFlagIsReturned) {
auto &productHelper = executionEnvironment->rootDeviceEnvironments[0]->getProductHelper();
auto releaseHelper = executionEnvironment->rootDeviceEnvironments[0]->releaseHelper.get();
for (auto i = 0; i < static_cast<int>(AllocationType::COUNT); i++) {
AllocationProperties allocationProperties{0u, 0u, static_cast<AllocationType>(i), {}};
if (productHelper.getPreferredAllocationMethod(allocationProperties.allocationType)) {
EXPECT_EQ(*productHelper.getPreferredAllocationMethod(allocationProperties.allocationType), memoryManager->getPreferredAllocationMethod(allocationProperties));
if (releaseHelper && releaseHelper->getPreferredAllocationMethod(allocationProperties.allocationType)) {
EXPECT_EQ(*releaseHelper->getPreferredAllocationMethod(allocationProperties.allocationType), memoryManager->getPreferredAllocationMethod(allocationProperties));
} else {
EXPECT_EQ(preferredAllocationMethod, memoryManager->getPreferredAllocationMethod(allocationProperties));
}

View File

@@ -5,6 +5,7 @@
*
*/
#include "shared/source/memory_manager/allocation_type.h"
#include "shared/source/release_helper/release_helper.h"
#include "gtest/gtest.h"
@@ -63,3 +64,19 @@ TEST(ReleaseHelperTest, givenReleaseHelper1255ThenMediaFrequencyTileIndexIsNotRe
EXPECT_EQ(expectedTileIndex, tileIndex);
}
}
TEST(ReleaseHelperTest, givenReleaseHelper1255WhenCheckPreferredAllocationMethodThenNoPreferenceIsReturned) {
HardwareIpVersion ipVersion{};
ipVersion.architecture = 12;
ipVersion.release = 55;
for (auto &revision : {0, 1, 4, 8}) {
ipVersion.revision = revision;
auto releaseHelper = ReleaseHelper::create(ipVersion);
ASSERT_NE(nullptr, releaseHelper);
for (auto i = 0; i < static_cast<int>(AllocationType::COUNT); i++) {
auto allocationType = static_cast<AllocationType>(i);
auto preferredAllocationMethod = releaseHelper->getPreferredAllocationMethod(allocationType);
EXPECT_FALSE(preferredAllocationMethod.has_value());
}
}
}

View File

@@ -5,6 +5,7 @@
*
*/
#include "shared/source/memory_manager/allocation_type.h"
#include "shared/source/release_helper/release_helper.h"
#include "gtest/gtest.h"
@@ -63,3 +64,19 @@ TEST(ReleaseHelperTest, givenReleaseHelper1256ThenMediaFrequencyTileIndexIsNotRe
EXPECT_EQ(expectedTileIndex, tileIndex);
}
}
TEST(ReleaseHelperTest, givenReleaseHelper1256WhenCheckPreferredAllocationMethodThenNoPreferenceIsReturned) {
HardwareIpVersion ipVersion{};
ipVersion.architecture = 12;
ipVersion.release = 56;
for (auto &revision : {0, 4, 5}) {
ipVersion.revision = revision;
auto releaseHelper = ReleaseHelper::create(ipVersion);
ASSERT_NE(nullptr, releaseHelper);
for (auto i = 0; i < static_cast<int>(AllocationType::COUNT); i++) {
auto allocationType = static_cast<AllocationType>(i);
auto preferredAllocationMethod = releaseHelper->getPreferredAllocationMethod(allocationType);
EXPECT_FALSE(preferredAllocationMethod.has_value());
}
}
}

View File

@@ -5,6 +5,7 @@
*
*/
#include "shared/source/memory_manager/allocation_type.h"
#include "shared/source/release_helper/release_helper.h"
#include "gtest/gtest.h"
@@ -63,3 +64,19 @@ TEST(ReleaseHelperTest, givenReleaseHelper1257ThenMediaFrequencyTileIndexIsNotRe
EXPECT_EQ(expectedTileIndex, tileIndex);
}
}
TEST(ReleaseHelperTest, givenReleaseHelper1257WhenCheckPreferredAllocationMethodThenNoPreferenceIsReturned) {
HardwareIpVersion ipVersion{};
ipVersion.architecture = 12;
ipVersion.release = 57;
for (auto &revision : {0}) {
ipVersion.revision = revision;
auto releaseHelper = ReleaseHelper::create(ipVersion);
ASSERT_NE(nullptr, releaseHelper);
for (auto i = 0; i < static_cast<int>(AllocationType::COUNT); i++) {
auto allocationType = static_cast<AllocationType>(i);
auto preferredAllocationMethod = releaseHelper->getPreferredAllocationMethod(allocationType);
EXPECT_FALSE(preferredAllocationMethod.has_value());
}
}
}

View File

@@ -5,6 +5,7 @@
*
*/
#include "shared/source/memory_manager/allocation_type.h"
#include "shared/source/release_helper/release_helper.h"
#include "shared/source/xe_hpg_core/hw_cmds_xe_hpg_core_base.h"
@@ -72,3 +73,25 @@ TEST(ReleaseHelperTest, givenReleaseHelper1270ThenCorrectMediaFrequencyTileIndex
EXPECT_EQ(expectedTileIndex, tileIndex);
}
}
TEST(ReleaseHelperTest, givenReleaseHelper1270WhenCheckPreferredAllocationMethodThenAllocateByKmdIsReturnedExceptTagBufferAndTimestapPacketTagBuffer) {
HardwareIpVersion ipVersion{};
ipVersion.architecture = 12;
ipVersion.release = 70;
for (auto &revision : {0, 4}) {
ipVersion.revision = revision;
auto releaseHelper = ReleaseHelper::create(ipVersion);
ASSERT_NE(nullptr, releaseHelper);
for (auto i = 0; i < static_cast<int>(AllocationType::COUNT); i++) {
auto allocationType = static_cast<AllocationType>(i);
auto preferredAllocationMethod = releaseHelper->getPreferredAllocationMethod(allocationType);
if (allocationType == AllocationType::TAG_BUFFER ||
allocationType == AllocationType::TIMESTAMP_PACKET_TAG_BUFFER) {
EXPECT_FALSE(preferredAllocationMethod.has_value());
} else {
EXPECT_TRUE(preferredAllocationMethod.has_value());
EXPECT_EQ(GfxMemoryAllocationMethod::AllocateByKmd, preferredAllocationMethod.value());
}
}
}
}

View File

@@ -5,6 +5,7 @@
*
*/
#include "shared/source/memory_manager/allocation_type.h"
#include "shared/source/release_helper/release_helper.h"
#include "shared/source/xe_hpg_core/hw_cmds_xe_hpg_core_base.h"
@@ -73,3 +74,25 @@ TEST(ReleaseHelperTest, givenReleaseHelper1271ThenCorrectMediaFrequencyTileIndex
EXPECT_EQ(expectedTileIndex, tileIndex);
}
}
TEST(ReleaseHelperTest, givenReleaseHelper1271WhenCheckPreferredAllocationMethodThenAllocateByKmdIsReturnedExceptTagBufferAndTimestapPacketTagBuffer) {
HardwareIpVersion ipVersion{};
ipVersion.architecture = 12;
ipVersion.release = 71;
for (auto &revision : {0, 4}) {
ipVersion.revision = revision;
auto releaseHelper = ReleaseHelper::create(ipVersion);
ASSERT_NE(nullptr, releaseHelper);
for (auto i = 0; i < static_cast<int>(AllocationType::COUNT); i++) {
auto allocationType = static_cast<AllocationType>(i);
auto preferredAllocationMethod = releaseHelper->getPreferredAllocationMethod(allocationType);
if (allocationType == AllocationType::TAG_BUFFER ||
allocationType == AllocationType::TIMESTAMP_PACKET_TAG_BUFFER) {
EXPECT_FALSE(preferredAllocationMethod.has_value());
} else {
EXPECT_TRUE(preferredAllocationMethod.has_value());
EXPECT_EQ(GfxMemoryAllocationMethod::AllocateByKmd, preferredAllocationMethod.value());
}
}
}
}

View File

@@ -171,20 +171,6 @@ HWTEST2_F(XeLpgHwInfoTests, GivenEmptyHwInfoForUnitTestsWhenSetupHardwareInfoIsC
}
}
HWTEST2_F(XeLpgProductHelperTests, whenCheckPreferredAllocationMethodThenAllocateByKmdIsReturned, IsXeLpg) {
for (auto i = 0; i < static_cast<int>(AllocationType::COUNT); i++) {
auto allocationType = static_cast<AllocationType>(i);
auto preferredAllocationMethod = productHelper->getPreferredAllocationMethod(allocationType);
if (allocationType == AllocationType::TAG_BUFFER ||
allocationType == AllocationType::TIMESTAMP_PACKET_TAG_BUFFER) {
EXPECT_FALSE(preferredAllocationMethod.has_value());
} else {
EXPECT_TRUE(preferredAllocationMethod.has_value());
EXPECT_EQ(GfxMemoryAllocationMethod::AllocateByKmd, preferredAllocationMethod.value());
}
}
}
HWTEST2_F(XeLpgProductHelperTests, givenBooleanUncachedWhenCallOverridePatIndexThenProperPatIndexIsReturned, IsXeLpg) {
uint64_t patIndex = 1u;
bool isUncached = true;