mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-03 06:49:52 +08:00
Reverse logic of creating Memory Manager - part 3
-Move a Device::getEnabled64kbPages method's logic to the Memory Manager constructor Change-Id: Ide88898000e5817a79f9a6ad5dfc9d680bec0533 Signed-off-by: Jobczyk, Lukasz <lukasz.jobczyk@intel.com>
This commit is contained in:
committed by
sys_ocldev
parent
cc13045ddd
commit
9ecb3193af
@@ -20,7 +20,7 @@ class TbxStream;
|
||||
|
||||
class TbxMemoryManager : public OsAgnosticMemoryManager {
|
||||
public:
|
||||
TbxMemoryManager(bool enable64kbPages, bool enableLocalMemory, ExecutionEnvironment &executionEnvironment) : OsAgnosticMemoryManager(enable64kbPages, enableLocalMemory, executionEnvironment) {}
|
||||
TbxMemoryManager(ExecutionEnvironment &executionEnvironment) : OsAgnosticMemoryManager(executionEnvironment) {}
|
||||
uint64_t getSystemSharedMemory() override {
|
||||
return 1 * GB;
|
||||
}
|
||||
|
||||
@@ -111,8 +111,6 @@ class Device : public BaseObject<_cl_device_id> {
|
||||
std::vector<unsigned int> simultaneousInterops;
|
||||
std::string deviceExtensions;
|
||||
std::string name;
|
||||
bool getEnabled64kbPages() const;
|
||||
static bool getEnabled64kbPages(const HardwareInfo &hwInfo);
|
||||
bool isSourceLevelDebuggerActive() const;
|
||||
SourceLevelDebugger *getSourceLevelDebugger() { return executionEnvironment->sourceLevelDebugger.get(); }
|
||||
ExecutionEnvironment *getExecutionEnvironment() const { return executionEnvironment; }
|
||||
|
||||
@@ -42,20 +42,6 @@ static constexpr cl_device_fp_config defaultFpFlags = static_cast<cl_device_fp_c
|
||||
CL_FP_DENORM |
|
||||
CL_FP_FMA);
|
||||
|
||||
bool Device::getEnabled64kbPages() const {
|
||||
return getEnabled64kbPages(this->hwInfo);
|
||||
}
|
||||
|
||||
bool Device::getEnabled64kbPages(const HardwareInfo &hwInfo) {
|
||||
if (DebugManager.flags.Enable64kbpages.get() == -1) {
|
||||
// assign value according to os and hw configuration
|
||||
return OSInterface::osEnabled64kbPages && hwInfo.capabilityTable.ftr64KBpages;
|
||||
} else {
|
||||
// force debug settings
|
||||
return (DebugManager.flags.Enable64kbpages.get() != 0);
|
||||
}
|
||||
}
|
||||
|
||||
void Device::setupFp64Flags() {
|
||||
if (DebugManager.flags.OverrideDefaultFP64Settings.get() == -1) {
|
||||
if (hwInfo.capabilityTable.ftrSupportsFP64) {
|
||||
|
||||
@@ -12,10 +12,9 @@
|
||||
#include "runtime/os_interface/os_interface.h"
|
||||
|
||||
namespace OCLRT {
|
||||
std::unique_ptr<MemoryManager> MemoryManager::createMemoryManager(bool enable64KBpages, bool enableLocalMemory, ExecutionEnvironment &executionEnvironment) {
|
||||
std::unique_ptr<MemoryManager> MemoryManager::createMemoryManager(ExecutionEnvironment &executionEnvironment) {
|
||||
return std::make_unique<DrmMemoryManager>(executionEnvironment.osInterface->get()->getDrm(),
|
||||
gemCloseWorkerMode::gemCloseWorkerActive,
|
||||
enableLocalMemory,
|
||||
DebugManager.flags.EnableForcePin.get(),
|
||||
true,
|
||||
executionEnvironment);
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
#include "runtime/os_interface/windows/wddm_memory_manager.h"
|
||||
|
||||
namespace OCLRT {
|
||||
std::unique_ptr<MemoryManager> MemoryManager::createMemoryManager(bool enable64KBpages, bool enableLocalMemory, ExecutionEnvironment &executionEnvironment) {
|
||||
return std::make_unique<WddmMemoryManager>(enable64KBpages, enableLocalMemory, executionEnvironment.osInterface->get()->getWddm(), executionEnvironment);
|
||||
std::unique_ptr<MemoryManager> MemoryManager::createMemoryManager(ExecutionEnvironment &executionEnvironment) {
|
||||
return std::make_unique<WddmMemoryManager>(executionEnvironment.osInterface->get()->getWddm(), executionEnvironment);
|
||||
}
|
||||
} // namespace OCLRT
|
||||
|
||||
@@ -60,7 +60,7 @@ bool ExecutionEnvironment::initializeCommandStreamReceiver(uint32_t deviceIndex,
|
||||
this->commandStreamReceivers[deviceIndex][deviceCsrIndex] = std::move(commandStreamReceiver);
|
||||
return true;
|
||||
}
|
||||
void ExecutionEnvironment::initializeMemoryManager(bool enable64KBpages, bool enableLocalMemory) {
|
||||
void ExecutionEnvironment::initializeMemoryManager() {
|
||||
if (this->memoryManager) {
|
||||
return;
|
||||
}
|
||||
@@ -73,15 +73,15 @@ void ExecutionEnvironment::initializeMemoryManager(bool enable64KBpages, bool en
|
||||
switch (setCommandStreamReceiverType) {
|
||||
case CommandStreamReceiverType::CSR_TBX:
|
||||
case CommandStreamReceiverType::CSR_TBX_WITH_AUB:
|
||||
memoryManager = std::make_unique<TbxMemoryManager>(enable64KBpages, enableLocalMemory, *this);
|
||||
memoryManager = std::make_unique<TbxMemoryManager>(*this);
|
||||
break;
|
||||
case CommandStreamReceiverType::CSR_AUB:
|
||||
memoryManager = std::make_unique<OsAgnosticMemoryManager>(enable64KBpages, enableLocalMemory, *this);
|
||||
memoryManager = std::make_unique<OsAgnosticMemoryManager>(*this);
|
||||
break;
|
||||
case CommandStreamReceiverType::CSR_HW:
|
||||
case CommandStreamReceiverType::CSR_HW_WITH_AUB:
|
||||
default:
|
||||
memoryManager = MemoryManager::createMemoryManager(enable64KBpages, enableLocalMemory, *this);
|
||||
memoryManager = MemoryManager::createMemoryManager(*this);
|
||||
break;
|
||||
}
|
||||
DEBUG_BREAK_IF(!this->memoryManager);
|
||||
|
||||
@@ -48,7 +48,7 @@ class ExecutionEnvironment : public ReferenceTrackedObject<ExecutionEnvironment>
|
||||
void initGmm();
|
||||
bool initializeCommandStreamReceiver(uint32_t deviceIndex, uint32_t deviceCsrIndex);
|
||||
void initializeSpecialCommandStreamReceiver();
|
||||
void initializeMemoryManager(bool enable64KBpages, bool enableLocalMemory);
|
||||
void initializeMemoryManager();
|
||||
void initSourceLevelDebugger();
|
||||
void setHwInfo(const HardwareInfo *hwInfo);
|
||||
const HardwareInfo *getHardwareInfo() const {
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
#include "runtime/gmm_helper/resource_info.h"
|
||||
#include "runtime/helpers/aligned_memory.h"
|
||||
#include "runtime/helpers/basic_math.h"
|
||||
#include "runtime/helpers/hw_helper.h"
|
||||
#include "runtime/helpers/hw_info.h"
|
||||
#include "runtime/helpers/kernel_commands.h"
|
||||
#include "runtime/helpers/options.h"
|
||||
@@ -31,10 +32,21 @@
|
||||
#include <algorithm>
|
||||
|
||||
namespace OCLRT {
|
||||
MemoryManager::MemoryManager(bool enable64kbpages, bool enableLocalMemory, ExecutionEnvironment &executionEnvironment)
|
||||
: allocator32Bit(nullptr), enable64kbpages(enable64kbpages), localMemorySupported(enableLocalMemory),
|
||||
executionEnvironment(executionEnvironment), hostPtrManager(std::make_unique<HostPtrManager>()),
|
||||
multiContextResourceDestructor(std::make_unique<DeferredDeleter>()) {}
|
||||
MemoryManager::MemoryManager(ExecutionEnvironment &executionEnvironment) : allocator32Bit(nullptr),
|
||||
executionEnvironment(executionEnvironment), hostPtrManager(std::make_unique<HostPtrManager>()),
|
||||
multiContextResourceDestructor(std::make_unique<DeferredDeleter>()) {
|
||||
this->localMemorySupported = false;
|
||||
this->enable64kbpages = false;
|
||||
|
||||
auto hwInfo = executionEnvironment.getHardwareInfo();
|
||||
if (hwInfo != nullptr) {
|
||||
this->localMemorySupported = HwHelper::get(hwInfo->pPlatform->eRenderCoreFamily).getEnableLocalMemory(*hwInfo);
|
||||
this->enable64kbpages = OSInterface::osEnabled64kbPages && hwInfo->capabilityTable.ftr64KBpages;
|
||||
}
|
||||
if (DebugManager.flags.Enable64kbpages.get() > -1) {
|
||||
this->enable64kbpages = DebugManager.flags.Enable64kbpages.get() != 0;
|
||||
}
|
||||
}
|
||||
|
||||
MemoryManager::~MemoryManager() {
|
||||
for (auto &engine : registeredEngines) {
|
||||
|
||||
@@ -93,7 +93,7 @@ class MemoryManager {
|
||||
RetryInNonDevicePool
|
||||
};
|
||||
|
||||
MemoryManager(bool enable64kbpages, bool enableLocalMemory, ExecutionEnvironment &executionEnvironment);
|
||||
MemoryManager(ExecutionEnvironment &executionEnvironment);
|
||||
|
||||
virtual ~MemoryManager();
|
||||
MOCKABLE_VIRTUAL void *allocateSystemMemory(size_t size, size_t alignment);
|
||||
@@ -185,7 +185,7 @@ class MemoryManager {
|
||||
void setDefaultEngineIndex(uint32_t index) { defaultEngineIndex = index; }
|
||||
virtual bool copyMemoryToAllocation(GraphicsAllocation *graphicsAllocation, const void *memoryToCopy, uint32_t sizeToCopy) const;
|
||||
static HeapIndex selectHeap(const GraphicsAllocation *allocation, bool hasPointer, bool isFullRangeSVM);
|
||||
static std::unique_ptr<MemoryManager> createMemoryManager(bool enable64KBpages, bool enableLocalMemory, ExecutionEnvironment &exeEnv);
|
||||
static std::unique_ptr<MemoryManager> createMemoryManager(ExecutionEnvironment &executionEnvironment);
|
||||
virtual void *reserveCpuAddressRange(size_t size) = 0;
|
||||
virtual void releaseReservedCpuAddressRange(void *reserved, size_t size) = 0;
|
||||
|
||||
|
||||
@@ -37,10 +37,10 @@ class OsAgnosticMemoryManager : public MemoryManager {
|
||||
public:
|
||||
using MemoryManager::allocateGraphicsMemory;
|
||||
|
||||
OsAgnosticMemoryManager(bool enable64kbPages, bool enableLocalMemory, ExecutionEnvironment &executionEnvironment) : OsAgnosticMemoryManager(enable64kbPages, enableLocalMemory, false, executionEnvironment) {}
|
||||
OsAgnosticMemoryManager(ExecutionEnvironment &executionEnvironment) : OsAgnosticMemoryManager(false, executionEnvironment) {}
|
||||
|
||||
OsAgnosticMemoryManager(bool enable64kbPages, bool enableLocalMemory, bool aubUsage, ExecutionEnvironment &executionEnvironment) : MemoryManager(enable64kbPages, enableLocalMemory, executionEnvironment) {
|
||||
allocator32Bit = std::unique_ptr<Allocator32bit>(create32BitAllocator(aubUsage));
|
||||
OsAgnosticMemoryManager(bool aubUsage, ExecutionEnvironment &executionEnvironment) : MemoryManager(executionEnvironment) {
|
||||
allocator32Bit.reset(create32BitAllocator(aubUsage));
|
||||
gfxPartition.init(platformDevices[0]->capabilityTable.gpuAddressSpace);
|
||||
}
|
||||
|
||||
|
||||
@@ -29,10 +29,9 @@ namespace OCLRT {
|
||||
|
||||
DrmMemoryManager::DrmMemoryManager(Drm *drm,
|
||||
gemCloseWorkerMode mode,
|
||||
bool enableLocalMemory,
|
||||
bool forcePinAllowed,
|
||||
bool validateHostPtrMemory,
|
||||
ExecutionEnvironment &executionEnvironment) : MemoryManager(false, enableLocalMemory, executionEnvironment),
|
||||
ExecutionEnvironment &executionEnvironment) : MemoryManager(executionEnvironment),
|
||||
drm(drm),
|
||||
pinBB(nullptr),
|
||||
forcePinEnabled(forcePinAllowed),
|
||||
|
||||
@@ -25,7 +25,6 @@ class DrmMemoryManager : public MemoryManager {
|
||||
public:
|
||||
DrmMemoryManager(Drm *drm,
|
||||
gemCloseWorkerMode mode,
|
||||
bool enableLocalMemory,
|
||||
bool forcePinAllowed,
|
||||
bool validateHostPtrMemory,
|
||||
ExecutionEnvironment &executionEnvironment);
|
||||
|
||||
@@ -32,7 +32,7 @@ WddmMemoryManager::~WddmMemoryManager() {
|
||||
applyCommonCleanup();
|
||||
}
|
||||
|
||||
WddmMemoryManager::WddmMemoryManager(bool enable64kbPages, bool enableLocalMemory, Wddm *wddm, ExecutionEnvironment &executionEnvironment) : MemoryManager(enable64kbPages, enableLocalMemory, executionEnvironment) {
|
||||
WddmMemoryManager::WddmMemoryManager(Wddm *wddm, ExecutionEnvironment &executionEnvironment) : MemoryManager(executionEnvironment) {
|
||||
DEBUG_BREAK_IF(wddm == nullptr);
|
||||
this->wddm = wddm;
|
||||
allocator32Bit = std::unique_ptr<Allocator32bit>(new Allocator32bit(wddm->getExternalHeapBase(), wddm->getExternalHeapSize()));
|
||||
|
||||
@@ -28,7 +28,7 @@ class WddmMemoryManager : public MemoryManager {
|
||||
using MemoryManager::allocateGraphicsMemoryWithProperties;
|
||||
|
||||
~WddmMemoryManager() override;
|
||||
WddmMemoryManager(bool enable64kbPages, bool enableLocalMemory, Wddm *wddm, ExecutionEnvironment &executionEnvironment);
|
||||
WddmMemoryManager(Wddm *wddm, ExecutionEnvironment &executionEnvironment);
|
||||
|
||||
WddmMemoryManager(const WddmMemoryManager &) = delete;
|
||||
WddmMemoryManager &operator=(const WddmMemoryManager &) = delete;
|
||||
|
||||
@@ -141,10 +141,7 @@ bool Platform::initialize() {
|
||||
return false;
|
||||
}
|
||||
|
||||
auto &hwHelper = HwHelper::get(hwInfo->pPlatform->eRenderCoreFamily);
|
||||
auto enableLocalMemory = hwHelper.getEnableLocalMemory(*hwInfo);
|
||||
|
||||
executionEnvironment->initializeMemoryManager(Device::getEnabled64kbPages(*hwInfo), enableLocalMemory);
|
||||
executionEnvironment->initializeMemoryManager();
|
||||
|
||||
DEBUG_BREAK_IF(this->platformInfo);
|
||||
this->platformInfo.reset(new PlatformInfo);
|
||||
|
||||
Reference in New Issue
Block a user