mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-03 23:03:02 +08:00
fix: usm reuse cleaning unused allocations
mechanism for freeing allocations saved for reuse that have not been used in a given time Related-To: NEO-13425 Signed-off-by: Dominik Dabek <dominik.dabek@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
b2f8da5109
commit
3f646839ca
@@ -18,6 +18,7 @@
|
||||
#include "shared/source/helpers/driver_model_type.h"
|
||||
#include "shared/source/helpers/gfx_core_helper.h"
|
||||
#include "shared/source/helpers/hw_info.h"
|
||||
#include "shared/source/memory_manager/unified_memory_reuse_cleaner.h"
|
||||
#include "shared/source/os_interface/device_factory.h"
|
||||
#include "shared/source/os_interface/driver_info.h"
|
||||
#include "shared/source/os_interface/os_interface.h"
|
||||
@@ -297,6 +298,30 @@ TEST(ExecutionEnvironment, givenEnableDirectSubmissionControllerSetZeroWhenIniti
|
||||
EXPECT_EQ(controller, nullptr);
|
||||
}
|
||||
|
||||
TEST(ExecutionEnvironment, givenExperimentalUSMAllocationReuseCleanerSetWhenInitializeUnifiedMemoryReuseCleanerThenNotNull) {
|
||||
DebugManagerStateRestore restorer;
|
||||
debugManager.flags.ExperimentalUSMAllocationReuseCleaner.set(1);
|
||||
|
||||
VariableBackup<decltype(NEO::Thread::createFunc)> funcBackup{&NEO::Thread::createFunc, [](void *(*func)(void *), void *arg) -> std::unique_ptr<Thread> { return nullptr; }};
|
||||
MockExecutionEnvironment executionEnvironment{};
|
||||
executionEnvironment.initializeUnifiedMemoryReuseCleaner();
|
||||
auto cleaner = executionEnvironment.unifiedMemoryReuseCleaner.get();
|
||||
|
||||
EXPECT_NE(cleaner, nullptr);
|
||||
executionEnvironment.initializeUnifiedMemoryReuseCleaner();
|
||||
EXPECT_EQ(cleaner, executionEnvironment.unifiedMemoryReuseCleaner.get());
|
||||
}
|
||||
|
||||
TEST(ExecutionEnvironment, givenExperimentalUSMAllocationReuseCleanerSetZeroWhenInitializeUnifiedMemoryReuseCleanerThenNull) {
|
||||
DebugManagerStateRestore restorer;
|
||||
debugManager.flags.ExperimentalUSMAllocationReuseCleaner.set(0);
|
||||
|
||||
MockExecutionEnvironment executionEnvironment{};
|
||||
executionEnvironment.initializeUnifiedMemoryReuseCleaner();
|
||||
|
||||
EXPECT_EQ(nullptr, executionEnvironment.unifiedMemoryReuseCleaner.get());
|
||||
}
|
||||
|
||||
TEST(ExecutionEnvironment, givenNeoCalEnabledWhenCreateExecutionEnvironmentThenSetDebugVariables) {
|
||||
const std::unordered_map<std::string, int32_t> config = {
|
||||
{"UseKmdMigration", 0},
|
||||
@@ -364,11 +389,12 @@ TEST(ExecutionEnvironment, givenExecutionEnvironmentWhenInitializeMemoryManagerI
|
||||
|
||||
static_assert(sizeof(ExecutionEnvironment) == sizeof(std::unique_ptr<MemoryManager>) +
|
||||
sizeof(std::unique_ptr<DirectSubmissionController>) +
|
||||
sizeof(std::unique_ptr<UnifiedMemoryReuseCleaner>) +
|
||||
sizeof(std::unique_ptr<OsEnvironment>) +
|
||||
sizeof(std::vector<std::unique_ptr<RootDeviceEnvironment>>) +
|
||||
sizeof(std::unordered_map<uint32_t, std::tuple<uint32_t, uint32_t, uint32_t>>) +
|
||||
sizeof(std::unordered_map<std::thread::id, std::string>) +
|
||||
sizeof(std::mutex) +
|
||||
2 * sizeof(std::mutex) +
|
||||
2 * sizeof(bool) +
|
||||
sizeof(DeviceHierarchyMode) +
|
||||
sizeof(DebuggingMode) +
|
||||
@@ -381,12 +407,15 @@ static_assert(sizeof(ExecutionEnvironment) == sizeof(std::unique_ptr<MemoryManag
|
||||
TEST(ExecutionEnvironment, givenExecutionEnvironmentWithVariousMembersWhenItIsDestroyedThenDeleteSequenceIsSpecified) {
|
||||
uint32_t destructorId = 0u;
|
||||
|
||||
struct MemoryMangerMock : public DestructorCounted<MockMemoryManager, 7> {
|
||||
struct MemoryMangerMock : public DestructorCounted<MockMemoryManager, 8> {
|
||||
MemoryMangerMock(uint32_t &destructorId, ExecutionEnvironment &executionEnvironment) : DestructorCounted(destructorId, executionEnvironment) {
|
||||
callBaseAllocateGraphicsMemoryForNonSvmHostPtr = false;
|
||||
callBasePopulateOsHandles = false;
|
||||
}
|
||||
};
|
||||
struct UnifiedMemoryReuseCleanerMock : public DestructorCounted<UnifiedMemoryReuseCleaner, 7> {
|
||||
UnifiedMemoryReuseCleanerMock(uint32_t &destructorId) : DestructorCounted(destructorId) {}
|
||||
};
|
||||
struct DirectSubmissionControllerMock : public DestructorCounted<DirectSubmissionController, 6> {
|
||||
DirectSubmissionControllerMock(uint32_t &destructorId) : DestructorCounted(destructorId) {}
|
||||
};
|
||||
@@ -418,9 +447,10 @@ TEST(ExecutionEnvironment, givenExecutionEnvironmentWithVariousMembersWhenItIsDe
|
||||
executionEnvironment->rootDeviceEnvironments[0]->builtins = std::make_unique<BuiltinsMock>(destructorId);
|
||||
executionEnvironment->rootDeviceEnvironments[0]->compilerInterface = std::make_unique<CompilerInterfaceMock>(destructorId);
|
||||
executionEnvironment->directSubmissionController = std::make_unique<DirectSubmissionControllerMock>(destructorId);
|
||||
executionEnvironment->unifiedMemoryReuseCleaner = std::make_unique<UnifiedMemoryReuseCleanerMock>(destructorId);
|
||||
|
||||
executionEnvironment.reset(nullptr);
|
||||
EXPECT_EQ(8u, destructorId);
|
||||
EXPECT_EQ(9u, destructorId);
|
||||
}
|
||||
|
||||
TEST(ExecutionEnvironment, givenMultipleRootDevicesWhenTheyAreCreatedThenReuseMemoryManager) {
|
||||
|
||||
Reference in New Issue
Block a user