Refactoring createMemoryManager

Signed-off-by: Jaroslaw Chodor <jaroslaw.chodor@intel.com>
This commit is contained in:
Jaroslaw Chodor
2021-05-25 15:37:44 +00:00
committed by Compute-Runtime-Automation
parent f883376e61
commit 9dbffa8d93
7 changed files with 15 additions and 9 deletions

View File

@ -11,7 +11,7 @@
#include "shared/source/os_interface/os_interface.h" #include "shared/source/os_interface/os_interface.h"
namespace NEO { namespace NEO {
std::unique_ptr<MemoryManager> MemoryManager::createMemoryManager(ExecutionEnvironment &executionEnvironment) { std::unique_ptr<MemoryManager> MemoryManager::createMemoryManager(ExecutionEnvironment &executionEnvironment, DriverModelType driverModel) {
return std::make_unique<DrmMemoryManager>(gemCloseWorkerMode::gemCloseWorkerActive, return std::make_unique<DrmMemoryManager>(gemCloseWorkerMode::gemCloseWorkerActive,
DebugManager.flags.EnableForcePin.get(), DebugManager.flags.EnableForcePin.get(),
true, true,

View File

@ -12,7 +12,7 @@
#include "shared/source/os_interface/windows/wddm_memory_manager.h" #include "shared/source/os_interface/windows/wddm_memory_manager.h"
namespace NEO { namespace NEO {
std::unique_ptr<MemoryManager> MemoryManager::createMemoryManager(ExecutionEnvironment &executionEnvironment) { std::unique_ptr<MemoryManager> MemoryManager::createMemoryManager(ExecutionEnvironment &executionEnvironment, DriverModelType driverModel) {
return std::make_unique<WddmMemoryManager>(executionEnvironment); return std::make_unique<WddmMemoryManager>(executionEnvironment);
} }
} // namespace NEO } // namespace NEO

View File

@ -13,7 +13,7 @@
namespace NEO { namespace NEO {
std::unique_ptr<MemoryManager> MemoryManager::createMemoryManager(ExecutionEnvironment &executionEnvironment) { std::unique_ptr<MemoryManager> MemoryManager::createMemoryManager(ExecutionEnvironment &executionEnvironment, DriverModelType driverModel) {
if (ultHwConfig.forceOsAgnosticMemoryManager) { if (ultHwConfig.forceOsAgnosticMemoryManager) {
return std::make_unique<OsAgnosticMemoryManager>(executionEnvironment); return std::make_unique<OsAgnosticMemoryManager>(executionEnvironment);
} }

View File

@ -13,7 +13,7 @@
namespace NEO { namespace NEO {
std::unique_ptr<MemoryManager> MemoryManager::createMemoryManager(ExecutionEnvironment &executionEnvironment) { std::unique_ptr<MemoryManager> MemoryManager::createMemoryManager(ExecutionEnvironment &executionEnvironment, DriverModelType driverModel) {
if (ultHwConfig.forceOsAgnosticMemoryManager) { if (ultHwConfig.forceOsAgnosticMemoryManager) {
return std::make_unique<OsAgnosticMemoryManager>(executionEnvironment); return std::make_unique<OsAgnosticMemoryManager>(executionEnvironment);
} }

View File

@ -55,9 +55,13 @@ bool ExecutionEnvironment::initializeMemoryManager() {
break; break;
case CommandStreamReceiverType::CSR_HW: case CommandStreamReceiverType::CSR_HW:
case CommandStreamReceiverType::CSR_HW_WITH_AUB: case CommandStreamReceiverType::CSR_HW_WITH_AUB:
default: default: {
memoryManager = MemoryManager::createMemoryManager(*this); auto driverModelType = DriverModelType::UNKNOWN;
break; if (this->rootDeviceEnvironments[0]->osInterface && this->rootDeviceEnvironments[0]->osInterface->getDriverModel()) {
driverModelType = this->rootDeviceEnvironments[0]->osInterface->getDriverModel()->getDriverModelType();
}
memoryManager = MemoryManager::createMemoryManager(*this, driverModelType);
} break;
} }
return memoryManager->isInitialized(); return memoryManager->isInitialized();

View File

@ -19,6 +19,7 @@
#include "shared/source/memory_manager/host_ptr_defines.h" #include "shared/source/memory_manager/host_ptr_defines.h"
#include "shared/source/memory_manager/local_memory_usage.h" #include "shared/source/memory_manager/local_memory_usage.h"
#include "shared/source/memory_manager/multi_graphics_allocation.h" #include "shared/source/memory_manager/multi_graphics_allocation.h"
#include "shared/source/os_interface/os_interface.h"
#include "shared/source/page_fault_manager/cpu_page_fault_manager.h" #include "shared/source/page_fault_manager/cpu_page_fault_manager.h"
#include "engine_node.h" #include "engine_node.h"
@ -191,7 +192,7 @@ class MemoryManager {
void setDefaultEngineIndex(uint32_t rootDeviceIndex, uint32_t engineIndex) { defaultEngineIndex[rootDeviceIndex] = engineIndex; } void setDefaultEngineIndex(uint32_t rootDeviceIndex, uint32_t engineIndex) { defaultEngineIndex[rootDeviceIndex] = engineIndex; }
virtual bool copyMemoryToAllocation(GraphicsAllocation *graphicsAllocation, size_t destinationOffset, const void *memoryToCopy, size_t sizeToCopy); virtual bool copyMemoryToAllocation(GraphicsAllocation *graphicsAllocation, size_t destinationOffset, const void *memoryToCopy, size_t sizeToCopy);
HeapIndex selectHeap(const GraphicsAllocation *allocation, bool hasPointer, bool isFullRangeSVM, bool useFrontWindow); HeapIndex selectHeap(const GraphicsAllocation *allocation, bool hasPointer, bool isFullRangeSVM, bool useFrontWindow);
static std::unique_ptr<MemoryManager> createMemoryManager(ExecutionEnvironment &executionEnvironment); static std::unique_ptr<MemoryManager> createMemoryManager(ExecutionEnvironment &executionEnvironment, DriverModelType driverModel = DriverModelType::UNKNOWN);
virtual void *reserveCpuAddressRange(size_t size, uint32_t rootDeviceIndex) { return nullptr; }; virtual void *reserveCpuAddressRange(size_t size, uint32_t rootDeviceIndex) { return nullptr; };
virtual void releaseReservedCpuAddressRange(void *reserved, size_t size, uint32_t rootDeviceIndex){}; virtual void releaseReservedCpuAddressRange(void *reserved, size_t size, uint32_t rootDeviceIndex){};
void *getReservedMemory(size_t size, size_t alignment); void *getReservedMemory(size_t size, size_t alignment);

View File

@ -16,7 +16,8 @@
namespace NEO { namespace NEO {
class ExecutionEnvironment; class ExecutionEnvironment;
class MemoryManager; class MemoryManager;
enum class DriverModelType { WDDM, enum class DriverModelType { UNKNOWN,
WDDM,
DRM }; DRM };
class HwDeviceId : public NonCopyableClass { class HwDeviceId : public NonCopyableClass {