2022-06-30 15:45:19 +00:00
|
|
|
/*
|
2023-05-15 13:22:05 +00:00
|
|
|
* Copyright (C) 2022-2023 Intel Corporation
|
2022-06-30 15:45:19 +00:00
|
|
|
*
|
|
|
|
|
* SPDX-License-Identifier: MIT
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
|
2023-05-29 11:11:44 +00:00
|
|
|
#include "shared/source/gmm_helper/cache_settings_helper.h"
|
2022-06-30 15:45:19 +00:00
|
|
|
#include "shared/source/gmm_helper/gmm.h"
|
|
|
|
|
#include "shared/source/gmm_helper/gmm_helper.h"
|
|
|
|
|
#include "shared/test/common/fixtures/mock_execution_environment_gmm_fixture.h"
|
2023-05-15 13:22:05 +00:00
|
|
|
#include "shared/test/common/helpers/debug_manager_state_restore.h"
|
2022-06-30 15:45:19 +00:00
|
|
|
#include "shared/test/common/mocks/mock_execution_environment.h"
|
|
|
|
|
#include "shared/test/common/mocks/mock_gmm.h"
|
2023-05-29 11:11:44 +00:00
|
|
|
#include "shared/test/common/test_macros/hw_test.h"
|
2022-06-30 15:45:19 +00:00
|
|
|
|
|
|
|
|
namespace NEO {
|
2022-08-12 14:24:49 +00:00
|
|
|
using GmmTests = Test<MockExecutionEnvironmentGmmFixture>;
|
2023-07-26 14:27:51 +00:00
|
|
|
TEST_F(GmmTests, givenResourceUsageTypesCacheableWhenCreateGmmAndFlagEnableCpuCacheForResourcesSetThenFlagCacheableIsTrue) {
|
2023-05-15 13:22:05 +00:00
|
|
|
DebugManagerStateRestore restore;
|
|
|
|
|
DebugManager.flags.EnableCpuCacheForResources.set(1);
|
2022-06-30 15:45:19 +00:00
|
|
|
StorageInfo storageInfo{};
|
2023-07-26 14:27:51 +00:00
|
|
|
auto &productHelper = getGmmHelper()->getRootDeviceEnvironment().getHelper<ProductHelper>();
|
2022-06-30 15:45:19 +00:00
|
|
|
for (auto resourceUsageType : {GMM_RESOURCE_USAGE_OCL_IMAGE,
|
|
|
|
|
GMM_RESOURCE_USAGE_OCL_STATE_HEAP_BUFFER,
|
|
|
|
|
GMM_RESOURCE_USAGE_OCL_BUFFER_CONST,
|
|
|
|
|
GMM_RESOURCE_USAGE_OCL_BUFFER}) {
|
|
|
|
|
auto gmm = std::make_unique<Gmm>(getGmmHelper(), nullptr, 0, 0, resourceUsageType, false, storageInfo, false);
|
2023-07-26 14:27:51 +00:00
|
|
|
EXPECT_FALSE(CacheSettingsHelper::preferNoCpuAccess(resourceUsageType, productHelper, false));
|
2022-06-30 15:45:19 +00:00
|
|
|
EXPECT_TRUE(gmm->resourceParams.Flags.Info.Cacheable);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-07-26 14:27:51 +00:00
|
|
|
TEST_F(GmmTests, givenResourceUsageTypesCacheableWhenCreateGmmAndFlagEnableCpuCacheForResourcesNotSetThenFlagCacheableIsRelatedToValueFromHelperIsCachingOnCpuAvailable) {
|
2023-05-15 13:22:05 +00:00
|
|
|
DebugManagerStateRestore restore;
|
|
|
|
|
DebugManager.flags.EnableCpuCacheForResources.set(0);
|
|
|
|
|
StorageInfo storageInfo{};
|
2023-05-29 11:11:44 +00:00
|
|
|
auto &productHelper = getGmmHelper()->getRootDeviceEnvironment().getHelper<ProductHelper>();
|
2023-05-15 13:22:05 +00:00
|
|
|
for (auto resourceUsageType : {GMM_RESOURCE_USAGE_OCL_IMAGE,
|
|
|
|
|
GMM_RESOURCE_USAGE_OCL_STATE_HEAP_BUFFER,
|
|
|
|
|
GMM_RESOURCE_USAGE_OCL_BUFFER_CONST,
|
|
|
|
|
GMM_RESOURCE_USAGE_OCL_BUFFER}) {
|
|
|
|
|
auto gmm = std::make_unique<Gmm>(getGmmHelper(), nullptr, 0, 0, resourceUsageType, false, storageInfo, false);
|
2023-07-26 14:27:51 +00:00
|
|
|
EXPECT_EQ(productHelper.isCachingOnCpuAvailable(), !CacheSettingsHelper::preferNoCpuAccess(resourceUsageType, productHelper, false));
|
|
|
|
|
EXPECT_EQ(productHelper.isCachingOnCpuAvailable(), !gmm->getPreferNoCpuAccess());
|
2023-05-15 13:22:05 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-06-30 15:45:19 +00:00
|
|
|
TEST_F(GmmTests, givenResourceUsageTypesUnCachedWhenGreateGmmThenFlagCachcableIsFalse) {
|
|
|
|
|
StorageInfo storageInfo{};
|
|
|
|
|
for (auto resourceUsageType : {GMM_RESOURCE_USAGE_OCL_BUFFER_CSR_UC,
|
|
|
|
|
GMM_RESOURCE_USAGE_OCL_SYSTEM_MEMORY_BUFFER_CACHELINE_MISALIGNED,
|
|
|
|
|
GMM_RESOURCE_USAGE_OCL_BUFFER_CACHELINE_MISALIGNED}) {
|
|
|
|
|
auto gmm = std::make_unique<Gmm>(getGmmHelper(), nullptr, 0, 0, resourceUsageType, false, storageInfo, false);
|
|
|
|
|
EXPECT_FALSE(gmm->resourceParams.Flags.Info.Cacheable);
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-05-29 11:11:44 +00:00
|
|
|
|
|
|
|
|
HWTEST_F(GmmTests, givenIsResourceCacheableOnCpuWhenWslFlagThenReturnProperValue) {
|
|
|
|
|
DebugManagerStateRestore restore;
|
|
|
|
|
DebugManager.flags.EnableCpuCacheForResources.set(false);
|
2023-07-26 14:27:51 +00:00
|
|
|
StorageInfo storageInfo{};
|
2023-05-29 11:11:44 +00:00
|
|
|
auto &productHelper = executionEnvironment->rootDeviceEnvironments[0]->getProductHelper();
|
2023-07-26 14:27:51 +00:00
|
|
|
bool isWsl = true;
|
2023-05-29 11:11:44 +00:00
|
|
|
|
2023-07-26 14:27:51 +00:00
|
|
|
GMM_RESOURCE_USAGE_TYPE_ENUM gmmResourceUsageType = GMM_RESOURCE_USAGE_OCL_SYSTEM_MEMORY_BUFFER;
|
|
|
|
|
auto gmm = std::make_unique<Gmm>(getGmmHelper(), nullptr, 0, 0, gmmResourceUsageType, false, storageInfo, false);
|
|
|
|
|
EXPECT_FALSE(CacheSettingsHelper::preferNoCpuAccess(gmmResourceUsageType, productHelper, isWsl));
|
|
|
|
|
EXPECT_TRUE(gmm->resourceParams.Flags.Info.Cacheable);
|
2023-05-29 11:11:44 +00:00
|
|
|
|
|
|
|
|
gmmResourceUsageType = GMM_RESOURCE_USAGE_OCL_BUFFER_CACHELINE_MISALIGNED;
|
2023-07-26 14:27:51 +00:00
|
|
|
gmm = std::make_unique<Gmm>(getGmmHelper(), nullptr, 0, 0, gmmResourceUsageType, false, storageInfo, false);
|
|
|
|
|
EXPECT_FALSE(CacheSettingsHelper::preferNoCpuAccess(gmmResourceUsageType, productHelper, isWsl));
|
|
|
|
|
EXPECT_FALSE(gmm->resourceParams.Flags.Info.Cacheable);
|
2023-05-29 11:11:44 +00:00
|
|
|
}
|
2023-07-26 14:27:51 +00:00
|
|
|
|
|
|
|
|
HWTEST_F(GmmTests, givenVariousResourceUsageTypeWhenCreateGmmThenFlagCacheableIsSetProperly) {
|
|
|
|
|
DebugManagerStateRestore restore;
|
|
|
|
|
DebugManager.flags.EnableCpuCacheForResources.set(false);
|
|
|
|
|
StorageInfo storageInfo{};
|
|
|
|
|
auto &productHelper = executionEnvironment->rootDeviceEnvironments[0]->getProductHelper();
|
|
|
|
|
|
|
|
|
|
for (auto regularResourceUsageType : {GMM_RESOURCE_USAGE_OCL_IMAGE,
|
|
|
|
|
GMM_RESOURCE_USAGE_OCL_STATE_HEAP_BUFFER,
|
|
|
|
|
GMM_RESOURCE_USAGE_OCL_BUFFER_CONST,
|
|
|
|
|
GMM_RESOURCE_USAGE_OCL_BUFFER}) {
|
|
|
|
|
auto gmm = std::make_unique<Gmm>(getGmmHelper(), nullptr, 0, 0, regularResourceUsageType, false, storageInfo, false);
|
|
|
|
|
EXPECT_EQ(productHelper.isCachingOnCpuAvailable(), gmm->resourceParams.Flags.Info.Cacheable);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (auto cpuAccessibleResourceUsageType : {GMM_RESOURCE_USAGE_OCL_SYSTEM_MEMORY_BUFFER}) {
|
|
|
|
|
auto gmm = std::make_unique<Gmm>(getGmmHelper(), nullptr, 0, 0, cpuAccessibleResourceUsageType, false, storageInfo, false);
|
|
|
|
|
EXPECT_TRUE(gmm->resourceParams.Flags.Info.Cacheable);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (auto uncacheableResourceUsageType : {GMM_RESOURCE_USAGE_OCL_BUFFER_CSR_UC,
|
|
|
|
|
GMM_RESOURCE_USAGE_OCL_SYSTEM_MEMORY_BUFFER_CACHELINE_MISALIGNED,
|
|
|
|
|
GMM_RESOURCE_USAGE_OCL_BUFFER_CACHELINE_MISALIGNED}) {
|
|
|
|
|
auto gmm = std::make_unique<Gmm>(getGmmHelper(), nullptr, 0, 0, uncacheableResourceUsageType, false, storageInfo, false);
|
|
|
|
|
EXPECT_FALSE(gmm->resourceParams.Flags.Info.Cacheable);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-06-30 15:45:19 +00:00
|
|
|
} // namespace NEO
|