refactor: Allow debug key to force USM cleaner with ULLS light

Related-To: NEO-13922

Signed-off-by: Lukasz Jobczyk <lukasz.jobczyk@intel.com>
This commit is contained in:
Lukasz Jobczyk 2025-02-26 11:56:03 +00:00 committed by Compute-Runtime-Automation
parent 1eafbc30f8
commit 20d29207cd
4 changed files with 20 additions and 12 deletions

View File

@ -152,9 +152,9 @@ DirectSubmissionController *ExecutionEnvironment::initializeDirectSubmissionCont
return directSubmissionController.get();
}
void ExecutionEnvironment::initializeUnifiedMemoryReuseCleaner() {
void ExecutionEnvironment::initializeUnifiedMemoryReuseCleaner(bool enable) {
std::lock_guard<std::mutex> lock(initializeUnifiedMemoryReuseCleanerMutex);
auto initializeUnifiedMemoryReuseCleaner = UnifiedMemoryReuseCleaner::isSupported();
auto initializeUnifiedMemoryReuseCleaner = UnifiedMemoryReuseCleaner::isSupported() && enable;
if (debugManager.flags.ExperimentalUSMAllocationReuseCleaner.get() != -1) {
initializeUnifiedMemoryReuseCleaner = debugManager.flags.ExperimentalUSMAllocationReuseCleaner.get() == 1;

View File

@ -66,7 +66,7 @@ class ExecutionEnvironment : public ReferenceTrackedObject<ExecutionEnvironment>
bool isFP64EmulationEnabled() const { return fp64EmulationEnabled; }
DirectSubmissionController *initializeDirectSubmissionController();
void initializeUnifiedMemoryReuseCleaner();
void initializeUnifiedMemoryReuseCleaner(bool enable);
std::unique_ptr<MemoryManager> memoryManager;
std::unique_ptr<UnifiedMemoryReuseCleaner> unifiedMemoryReuseCleaner;

View File

@ -845,9 +845,7 @@ void SVMAllocsManager::initUsmAllocationsCaches(Device &device) {
this->usmDeviceAllocationsCacheEnabled = !!debugManager.flags.ExperimentalEnableDeviceAllocationCache.get();
}
if (this->usmDeviceAllocationsCacheEnabled) {
if (!device.isAnyDirectSubmissionEnabled(true)) {
device.getExecutionEnvironment()->initializeUnifiedMemoryReuseCleaner();
}
device.getExecutionEnvironment()->initializeUnifiedMemoryReuseCleaner(!device.isAnyDirectSubmissionEnabled(true));
this->initUsmDeviceAllocationsCache(device);
}
@ -856,9 +854,7 @@ void SVMAllocsManager::initUsmAllocationsCaches(Device &device) {
this->usmHostAllocationsCacheEnabled = !!debugManager.flags.ExperimentalEnableHostAllocationCache.get();
}
if (this->usmHostAllocationsCacheEnabled) {
if (!device.isAnyDirectSubmissionEnabled(true)) {
device.getExecutionEnvironment()->initializeUnifiedMemoryReuseCleaner();
}
device.getExecutionEnvironment()->initializeUnifiedMemoryReuseCleaner(!device.isAnyDirectSubmissionEnabled(true));
this->initUsmHostAllocationsCache();
}
}

View File

@ -304,11 +304,11 @@ TEST(ExecutionEnvironment, givenExperimentalUSMAllocationReuseCleanerSetWhenInit
VariableBackup<decltype(NEO::Thread::createFunc)> funcBackup{&NEO::Thread::createFunc, [](void *(*func)(void *), void *arg) -> std::unique_ptr<Thread> { return nullptr; }};
MockExecutionEnvironment executionEnvironment{};
executionEnvironment.initializeUnifiedMemoryReuseCleaner();
executionEnvironment.initializeUnifiedMemoryReuseCleaner(true);
auto cleaner = executionEnvironment.unifiedMemoryReuseCleaner.get();
EXPECT_NE(cleaner, nullptr);
executionEnvironment.initializeUnifiedMemoryReuseCleaner();
executionEnvironment.initializeUnifiedMemoryReuseCleaner(true);
EXPECT_EQ(cleaner, executionEnvironment.unifiedMemoryReuseCleaner.get());
}
@ -317,11 +317,23 @@ TEST(ExecutionEnvironment, givenExperimentalUSMAllocationReuseCleanerSetZeroWhen
debugManager.flags.ExperimentalUSMAllocationReuseCleaner.set(0);
MockExecutionEnvironment executionEnvironment{};
executionEnvironment.initializeUnifiedMemoryReuseCleaner();
executionEnvironment.initializeUnifiedMemoryReuseCleaner(true);
EXPECT_EQ(nullptr, executionEnvironment.unifiedMemoryReuseCleaner.get());
}
TEST(ExecutionEnvironment, givenExperimentalUSMAllocationReuseCleanerSetAndNotEnabledWhenInitializeUnifiedMemoryReuseCleanerThenForceInit) {
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(false);
auto cleaner = executionEnvironment.unifiedMemoryReuseCleaner.get();
EXPECT_NE(cleaner, nullptr);
}
TEST(ExecutionEnvironment, givenNeoCalEnabledWhenCreateExecutionEnvironmentThenSetDebugVariables) {
const std::unordered_map<std::string, int32_t> config = {
{"UseKmdMigration", 0},