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:
Dominik Dabek
2025-01-21 11:30:02 +00:00
committed by Compute-Runtime-Automation
parent b2f8da5109
commit 3f646839ca
15 changed files with 407 additions and 38 deletions

View File

@@ -20,6 +20,7 @@
#include "shared/source/helpers/string_helpers.h"
#include "shared/source/memory_manager/memory_manager.h"
#include "shared/source/memory_manager/os_agnostic_memory_manager.h"
#include "shared/source/memory_manager/unified_memory_reuse_cleaner.h"
#include "shared/source/os_interface/debug_env_reader.h"
#include "shared/source/os_interface/driver_info.h"
#include "shared/source/os_interface/os_environment.h"
@@ -50,6 +51,9 @@ ExecutionEnvironment::~ExecutionEnvironment() {
if (directSubmissionController) {
directSubmissionController->stopThread();
}
if (unifiedMemoryReuseCleaner) {
unifiedMemoryReuseCleaner->stopThread();
}
if (memoryManager) {
memoryManager->commonCleanup();
for (const auto &rootDeviceEnvironment : this->rootDeviceEnvironments) {
@@ -143,6 +147,20 @@ DirectSubmissionController *ExecutionEnvironment::initializeDirectSubmissionCont
return directSubmissionController.get();
}
void ExecutionEnvironment::initializeUnifiedMemoryReuseCleaner() {
std::lock_guard<std::mutex> lock(initializeUnifiedMemoryReuseCleanerMutex);
auto initializeUnifiedMemoryReuseCleaner = UnifiedMemoryReuseCleaner::isSupported();
if (debugManager.flags.ExperimentalUSMAllocationReuseCleaner.get() != -1) {
initializeUnifiedMemoryReuseCleaner = debugManager.flags.ExperimentalUSMAllocationReuseCleaner.get() == 1;
}
if (initializeUnifiedMemoryReuseCleaner && nullptr == this->unifiedMemoryReuseCleaner) {
this->unifiedMemoryReuseCleaner = std::make_unique<UnifiedMemoryReuseCleaner>();
this->unifiedMemoryReuseCleaner->startThread();
}
}
void ExecutionEnvironment::prepareRootDeviceEnvironments(uint32_t numRootDevices) {
if (rootDeviceEnvironments.size() < numRootDevices) {
rootDeviceEnvironments.resize(numRootDevices);