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:
Jobczyk, Lukasz
2019-03-15 10:22:35 +01:00
committed by sys_ocldev
parent cc13045ddd
commit 9ecb3193af
56 changed files with 215 additions and 249 deletions

View File

@@ -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;
}

View File

@@ -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; }

View File

@@ -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) {

View File

@@ -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);

View File

@@ -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

View File

@@ -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);

View File

@@ -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 {

View File

@@ -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) {

View File

@@ -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;

View File

@@ -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);
}

View File

@@ -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),

View File

@@ -25,7 +25,6 @@ class DrmMemoryManager : public MemoryManager {
public:
DrmMemoryManager(Drm *drm,
gemCloseWorkerMode mode,
bool enableLocalMemory,
bool forcePinAllowed,
bool validateHostPtrMemory,
ExecutionEnvironment &executionEnvironment);

View File

@@ -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()));

View File

@@ -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;

View File

@@ -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);