mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-25 05:24:02 +08:00
feature: Add ftrHeaplessMode flag
Pass hwInfo to isHeaplessModeEnabled and isForceBindlessRequired functions. Related-To: NEO-14526 Signed-off-by: Filip Hazubski <filip.hazubski@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
8961e8b50d
commit
504440fc4d
@@ -125,7 +125,7 @@ size_t SipKernel::getStateSaveAreaSize(Device *device) const {
|
||||
SipKernelType SipKernel::getSipKernelType(Device &device) {
|
||||
if (device.getDebugger() != nullptr) {
|
||||
auto &compilerProductHelper = device.getRootDeviceEnvironment().getHelper<CompilerProductHelper>();
|
||||
if (compilerProductHelper.isHeaplessModeEnabled()) {
|
||||
if (compilerProductHelper.isHeaplessModeEnabled(device.getHardwareInfo())) {
|
||||
return SipKernelType::dbgHeapless;
|
||||
} else {
|
||||
return SipKernelType::dbgBindless;
|
||||
@@ -309,7 +309,7 @@ const SipKernel &SipKernel::getSipKernelImpl(Device &device) {
|
||||
const SipKernel &SipKernel::getDebugSipKernel(Device &device) {
|
||||
SipKernelType debugSipType;
|
||||
auto &compilerProductHelper = device.getRootDeviceEnvironment().getHelper<CompilerProductHelper>();
|
||||
if (compilerProductHelper.isHeaplessModeEnabled()) {
|
||||
if (compilerProductHelper.isHeaplessModeEnabled(device.getHardwareInfo())) {
|
||||
debugSipType = SipKernelType::dbgHeapless;
|
||||
} else {
|
||||
debugSipType = SipKernelType::dbgBindless;
|
||||
@@ -327,7 +327,7 @@ const SipKernel &SipKernel::getDebugSipKernel(Device &device) {
|
||||
const SipKernel &SipKernel::getDebugSipKernel(Device &device, OsContext *context) {
|
||||
SipKernelType debugSipType;
|
||||
auto &compilerProductHelper = device.getRootDeviceEnvironment().getHelper<CompilerProductHelper>();
|
||||
if (compilerProductHelper.isHeaplessModeEnabled()) {
|
||||
if (compilerProductHelper.isHeaplessModeEnabled(device.getHardwareInfo())) {
|
||||
debugSipType = SipKernelType::dbgHeapless;
|
||||
} else {
|
||||
debugSipType = SipKernelType::dbgBindless;
|
||||
|
||||
@@ -65,7 +65,8 @@ uint32_t EncodeStates<Family>::copySamplerState(IndirectHeap *dsh,
|
||||
auto borderColor = reinterpret_cast<const SAMPLER_BORDER_COLOR_STATE *>(ptrOffset(fnDynamicStateHeap, borderColorOffset));
|
||||
|
||||
auto &compilerProductHelper = rootDeviceEnvironment.getHelper<CompilerProductHelper>();
|
||||
bool heaplessEnabled = compilerProductHelper.isHeaplessModeEnabled();
|
||||
auto &hwInfo = *rootDeviceEnvironment.getHardwareInfo();
|
||||
bool heaplessEnabled = compilerProductHelper.isHeaplessModeEnabled(hwInfo);
|
||||
|
||||
if (!bindlessHeapHelper || (!bindlessHeapHelper->isGlobalDshSupported())) {
|
||||
borderColorOffsetInDsh = static_cast<uint32_t>(dsh->getUsed());
|
||||
@@ -98,7 +99,6 @@ uint32_t EncodeStates<Family>::copySamplerState(IndirectHeap *dsh,
|
||||
}
|
||||
|
||||
auto &helper = rootDeviceEnvironment.getHelper<ProductHelper>();
|
||||
auto &hwInfo = *rootDeviceEnvironment.getHardwareInfo();
|
||||
auto srcSamplerState = reinterpret_cast<const SAMPLER_STATE *>(ptrOffset(fnDynamicStateHeap, samplerStateOffset));
|
||||
SAMPLER_STATE state = {};
|
||||
for (uint32_t i = 0; i < samplerCount; i++) {
|
||||
|
||||
@@ -99,7 +99,7 @@ CommandStreamReceiver::CommandStreamReceiver(ExecutionEnvironment &executionEnvi
|
||||
registeredClients.reserve(16);
|
||||
|
||||
auto &compilerProductHelper = rootDeviceEnvironment.getHelper<CompilerProductHelper>();
|
||||
this->heaplessModeEnabled = compilerProductHelper.isHeaplessModeEnabled();
|
||||
this->heaplessModeEnabled = compilerProductHelper.isHeaplessModeEnabled(hwInfo);
|
||||
this->evictionAllocations.reserve(2 * MemoryConstants::kiloByte);
|
||||
}
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@ void PreemptionHelper::programStateSip(LinearStream &preambleCmdStream, Device &
|
||||
bool isMidThreadPreemption = device.getPreemptionMode() == PreemptionMode::MidThread;
|
||||
|
||||
auto &compilerProductHelper = device.getCompilerProductHelper();
|
||||
bool useFullAddress = compilerProductHelper.isHeaplessModeEnabled();
|
||||
bool useFullAddress = compilerProductHelper.isHeaplessModeEnabled(device.getHardwareInfo());
|
||||
|
||||
if (isMidThreadPreemption || debuggingEnabled) {
|
||||
GraphicsAllocation *sipAllocation = SipKernel::getSipKernel(device, context).getSipAllocation();
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
namespace NEO {
|
||||
namespace CompilerOptions {
|
||||
void applyExtraInternalOptions(std::string &internalOptions, const CompilerProductHelper &compilerProductHelper, HeaplessMode heaplessMode) {
|
||||
void applyExtraInternalOptions(std::string &internalOptions, const HardwareInfo &hwInfo, const CompilerProductHelper &compilerProductHelper, HeaplessMode heaplessMode) {
|
||||
}
|
||||
|
||||
} // namespace CompilerOptions
|
||||
|
||||
@@ -11,11 +11,12 @@
|
||||
|
||||
namespace NEO {
|
||||
class CompilerProductHelper;
|
||||
struct HardwareInfo;
|
||||
|
||||
namespace CompilerOptions {
|
||||
enum class HeaplessMode;
|
||||
|
||||
void applyExtraInternalOptions(std::string &internalOptions, const CompilerProductHelper &compilerProductHelper, CompilerOptions::HeaplessMode heaplessMode);
|
||||
void applyExtraInternalOptions(std::string &internalOptions, const HardwareInfo &hwInfo, const CompilerProductHelper &compilerProductHelper, CompilerOptions::HeaplessMode heaplessMode);
|
||||
|
||||
} // namespace CompilerOptions
|
||||
} // namespace NEO
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2020-2024 Intel Corporation
|
||||
* Copyright (C) 2020-2025 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
@@ -25,10 +25,11 @@ bool DebuggerL0::initDebuggingInOs(NEO::OSInterface *osInterface) {
|
||||
|
||||
const bool vmBindAvailable = drm->isVmBindAvailable();
|
||||
const bool perContextVms = drm->isPerContextVMRequired();
|
||||
auto &hwInfo = *drm->getHardwareInfo();
|
||||
bool allowDebug = false;
|
||||
|
||||
if (drm->getRootDeviceEnvironment().executionEnvironment.getDebuggingMode() == DebuggingMode::online) {
|
||||
allowDebug = drm->getRootDeviceEnvironment().getHelper<CompilerProductHelper>().isHeaplessModeEnabled() ? true : perContextVms;
|
||||
allowDebug = drm->getRootDeviceEnvironment().getHelper<CompilerProductHelper>().isHeaplessModeEnabled(hwInfo) ? true : perContextVms;
|
||||
} else if (drm->getRootDeviceEnvironment().executionEnvironment.getDebuggingMode() == DebuggingMode::offline) {
|
||||
allowDebug = true;
|
||||
}
|
||||
|
||||
@@ -563,7 +563,7 @@ bool Device::initializeEngines() {
|
||||
}
|
||||
|
||||
auto &compilerProductHelper = this->getCompilerProductHelper();
|
||||
auto heaplessEnabled = compilerProductHelper.isHeaplessModeEnabled();
|
||||
auto heaplessEnabled = compilerProductHelper.isHeaplessModeEnabled(this->getHardwareInfo());
|
||||
|
||||
bool isHeaplessStateInit = engine.osContext->getIsPrimaryEngine() && compilerProductHelper.isHeaplessStateInitEnabled(heaplessEnabled);
|
||||
bool initializeDevice = (engine.osContext->isPartOfContextGroup() || isHeaplessStateInit) && !firstSubmissionDone;
|
||||
@@ -1181,7 +1181,7 @@ void Device::allocateRTDispatchGlobals(uint32_t maxBvhLevels) {
|
||||
dispatchGlobalsAsArray[7] = 1;
|
||||
|
||||
if (releaseHelper) {
|
||||
bool heaplessEnabled = this->getCompilerProductHelper().isHeaplessModeEnabled();
|
||||
bool heaplessEnabled = this->getCompilerProductHelper().isHeaplessModeEnabled(this->getHardwareInfo());
|
||||
releaseHelper->adjustRTDispatchGlobals(static_cast<void *>(&dispatchGlobals), rtStacksPerDss, heaplessEnabled, maxBvhLevels);
|
||||
}
|
||||
|
||||
|
||||
@@ -79,7 +79,7 @@ DirectSubmissionHw<GfxFamily, Dispatcher>::DirectSubmissionHw(const DirectSubmis
|
||||
miMemFenceRequired = debugManager.flags.DirectSubmissionInsertExtraMiMemFenceCommands.get();
|
||||
}
|
||||
|
||||
if (miMemFenceRequired && compilerProductHelper.isHeaplessStateInitEnabled(compilerProductHelper.isHeaplessModeEnabled())) {
|
||||
if (miMemFenceRequired && compilerProductHelper.isHeaplessStateInitEnabled(compilerProductHelper.isHeaplessModeEnabled(*hwInfo))) {
|
||||
this->systemMemoryFenceAddressSet = true;
|
||||
}
|
||||
|
||||
|
||||
@@ -75,7 +75,8 @@ Drm *Drm::create(std::unique_ptr<HwDeviceIdDrm> &&hwDeviceId, RootDeviceEnvironm
|
||||
|
||||
drm->queryPageFaultSupport();
|
||||
auto &compilerProductHelper = rootDeviceEnvironment.getHelper<CompilerProductHelper>();
|
||||
if (rootDeviceEnvironment.executionEnvironment.isDebuggingEnabled() && !compilerProductHelper.isHeaplessModeEnabled()) {
|
||||
auto &hwInfo = *rootDeviceEnvironment.getHardwareInfo();
|
||||
if (rootDeviceEnvironment.executionEnvironment.isDebuggingEnabled() && !compilerProductHelper.isHeaplessModeEnabled(hwInfo)) {
|
||||
if (drm->getRootDeviceEnvironment().executionEnvironment.getDebuggingMode() == DebuggingMode::offline) {
|
||||
drm->setPerContextVMRequired(false);
|
||||
} else {
|
||||
@@ -94,7 +95,7 @@ Drm *Drm::create(std::unique_ptr<HwDeviceIdDrm> &&hwDeviceId, RootDeviceEnvironm
|
||||
drm->configureGpuFaultCheckThreshold();
|
||||
|
||||
if (!drm->isPerContextVMRequired()) {
|
||||
if (!drm->createVirtualMemoryAddressSpace(GfxCoreHelper::getSubDevicesCount(rootDeviceEnvironment.getHardwareInfo()))) {
|
||||
if (!drm->createVirtualMemoryAddressSpace(GfxCoreHelper::getSubDevicesCount(&hwInfo))) {
|
||||
printDebugString(debugManager.flags.PrintDebugMessages.get(), stderr, "%s", "INFO: Device doesn't support GEM Virtual Memory\n");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -79,14 +79,14 @@ class CompilerProductHelper {
|
||||
virtual std::string getDeviceExtensions(const HardwareInfo &hwInfo, const ReleaseHelper *releaseHelper) const = 0;
|
||||
virtual StackVec<OclCVersion, 5> getDeviceOpenCLCVersions(const HardwareInfo &hwInfo, OclCVersion max) const = 0;
|
||||
virtual void adjustHwInfoForIgc(HardwareInfo &hwInfo) const = 0;
|
||||
virtual bool isHeaplessModeEnabled() const = 0;
|
||||
virtual bool isHeaplessModeEnabled(const HardwareInfo &hwInfo) const = 0;
|
||||
virtual bool isHeaplessStateInitEnabled(bool heaplessModeEnabled) const = 0;
|
||||
virtual void getKernelFp16AtomicCapabilities(const ReleaseHelper *releaseHelper, uint32_t &fp16Caps) const = 0;
|
||||
virtual void getKernelFp32AtomicCapabilities(uint32_t &fp32Caps) const = 0;
|
||||
virtual void getKernelFp64AtomicCapabilities(uint32_t &fp64Caps) const = 0;
|
||||
virtual void getKernelCapabilitiesExtra(const ReleaseHelper *releaseHelper, uint32_t &extraCaps) const = 0;
|
||||
virtual bool isBindlessAddressingDisabled(const ReleaseHelper *releaseHelper) const = 0;
|
||||
virtual bool isForceBindlessRequired() const = 0;
|
||||
virtual bool isForceBindlessRequired(const HardwareInfo &hwInfo) const = 0;
|
||||
virtual const char *getCustomIgcLibraryName() const = 0;
|
||||
virtual const char *getFinalizerLibraryName() const = 0;
|
||||
|
||||
@@ -133,14 +133,14 @@ class CompilerProductHelperHw : public CompilerProductHelper {
|
||||
std::string getDeviceExtensions(const HardwareInfo &hwInfo, const ReleaseHelper *releaseHelper) const override;
|
||||
StackVec<OclCVersion, 5> getDeviceOpenCLCVersions(const HardwareInfo &hwInfo, OclCVersion max) const override;
|
||||
void adjustHwInfoForIgc(HardwareInfo &hwInfo) const override;
|
||||
bool isHeaplessModeEnabled() const override;
|
||||
bool isHeaplessModeEnabled(const HardwareInfo &hwInfo) const override;
|
||||
bool isHeaplessStateInitEnabled(bool heaplessModeEnabled) const override;
|
||||
void getKernelFp16AtomicCapabilities(const ReleaseHelper *releaseHelper, uint32_t &fp16Caps) const override;
|
||||
void getKernelFp32AtomicCapabilities(uint32_t &fp32Caps) const override;
|
||||
void getKernelFp64AtomicCapabilities(uint32_t &fp64Caps) const override;
|
||||
void getKernelCapabilitiesExtra(const ReleaseHelper *releaseHelper, uint32_t &extraCaps) const override;
|
||||
bool isBindlessAddressingDisabled(const ReleaseHelper *releaseHelper) const override;
|
||||
bool isForceBindlessRequired() const override;
|
||||
bool isForceBindlessRequired(const HardwareInfo &hwInfo) const override;
|
||||
const char *getCustomIgcLibraryName() const override;
|
||||
const char *getFinalizerLibraryName() const override;
|
||||
|
||||
|
||||
@@ -224,7 +224,7 @@ StackVec<OclCVersion, 5> CompilerProductHelperHw<gfxProduct>::getDeviceOpenCLCVe
|
||||
}
|
||||
|
||||
template <PRODUCT_FAMILY gfxProduct>
|
||||
bool CompilerProductHelperHw<gfxProduct>::isHeaplessModeEnabled() const {
|
||||
bool CompilerProductHelperHw<gfxProduct>::isHeaplessModeEnabled(const HardwareInfo &hwInfo) const {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -310,8 +310,8 @@ bool CompilerProductHelperHw<gfxProduct>::isBindlessAddressingDisabled(const Rel
|
||||
}
|
||||
|
||||
template <PRODUCT_FAMILY gfxProduct>
|
||||
bool CompilerProductHelperHw<gfxProduct>::isForceBindlessRequired() const {
|
||||
return this->isHeaplessModeEnabled();
|
||||
bool CompilerProductHelperHw<gfxProduct>::isForceBindlessRequired(const HardwareInfo &hwInfo) const {
|
||||
return this->isHeaplessModeEnabled(hwInfo);
|
||||
}
|
||||
|
||||
template <PRODUCT_FAMILY gfxProduct>
|
||||
|
||||
@@ -70,7 +70,8 @@ struct FeatureTableBase {
|
||||
uint32_t ftrXe2PlusTiling : 1;
|
||||
uint32_t ftrL3TransientDataFlush : 1;
|
||||
uint32_t ftrPml5Support : 1;
|
||||
uint32_t reserved : 18;
|
||||
uint32_t ftrHeaplessMode : 1;
|
||||
uint32_t reserved : 17;
|
||||
};
|
||||
|
||||
BcsInfoMask ftrBcsInfo = 1;
|
||||
|
||||
Reference in New Issue
Block a user