feature: allow removal of heapful code paths

Related-To: NEO-13007

Signed-off-by: Jack Myers <jack.myers@intel.com>
This commit is contained in:
Jack Myers
2025-03-18 00:28:35 +00:00
committed by Compute-Runtime-Automation
parent 0243004907
commit 0aa2c4f0cb
92 changed files with 1409 additions and 928 deletions

View File

@@ -148,7 +148,7 @@ class CompilerProductHelperHw : public CompilerProductHelper {
protected:
uint32_t getProductConfigFromHwInfo(const HardwareInfo &hwInfo) const override;
CompilerProductHelperHw() = default;
CompilerProductHelperHw();
};
template <PRODUCT_FAMILY gfxProduct>

View File

@@ -16,6 +16,9 @@
namespace NEO {
template <PRODUCT_FAMILY gfxProduct>
CompilerProductHelperHw<gfxProduct>::CompilerProductHelperHw() = default;
template <PRODUCT_FAMILY gfxProduct>
bool CompilerProductHelperHw<gfxProduct>::isMidThreadPreemptionSupported(const HardwareInfo &hwInfo) const {
return hwInfo.featureTable.flags.ftrWalkerMTP;

View File

@@ -251,7 +251,9 @@ class GfxCoreHelperHw : public GfxCoreHelper {
size_t getPaddingForISAAllocation() const override;
size_t getKernelIsaPointerAlignment() const override {
return static_cast<size_t>(GfxFamily::cmdInitInterfaceDescriptorData.KERNELSTARTPOINTER_ALIGN_SIZE);
using DefaultWalkerType = typename GfxFamily::DefaultWalkerType;
using InterfaceDescriptorType = typename DefaultWalkerType::InterfaceDescriptorType;
return GfxFamily::template getInitInterfaceDescriptor<InterfaceDescriptorType>().KERNELSTARTPOINTER_ALIGN_SIZE;
}
uint32_t getComputeUnitsUsedForScratch(const RootDeviceEnvironment &rootDeviceEnvironment) const override;

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2023 Intel Corporation
* Copyright (C) 2023-2025 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
@@ -16,7 +16,7 @@ struct HwMapper {};
// Utility conversion
template <PRODUCT_FAMILY productFamily>
struct ToGfxCoreFamily {
static const GFXCORE_FAMILY gfxCoreFamily =
static constexpr GFXCORE_FAMILY gfxCoreFamily =
static_cast<GFXCORE_FAMILY>(NEO::HwMapper<productFamily>::gfxFamily);
static constexpr GFXCORE_FAMILY get() { return gfxCoreFamily; }
};
@@ -24,4 +24,4 @@ struct ToGfxCoreFamily {
template <GFXCORE_FAMILY gfxFamily>
struct GfxFamilyMapper {};
} // namespace NEO
} // namespace NEO

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2018-2024 Intel Corporation
* Copyright (C) 2018-2025 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
@@ -27,7 +27,6 @@ template <typename GfxFamily>
struct PreambleHelper {
using MI_LOAD_REGISTER_IMM = typename GfxFamily::MI_LOAD_REGISTER_IMM;
using PIPE_CONTROL = typename GfxFamily::PIPE_CONTROL;
using FrontEndStateCommand = typename GfxFamily::FrontEndStateCommand;
static void programL3(LinearStream *pCommandStream, uint32_t l3Config, bool isBcs);
static void programPipelineSelect(LinearStream *pCommandStream,

View File

@@ -43,13 +43,14 @@ void PreambleHelper<Family>::programPipelineSelect(LinearStream *pCommandStream,
template <typename Family>
void PreambleHelper<Family>::appendProgramVFEState(const RootDeviceEnvironment &rootDeviceEnvironment, const StreamProperties &streamProperties, void *cmd) {
using CFE_STATE = typename Family::CFE_STATE;
using STACK_ID_CONTROL = typename CFE_STATE::STACK_ID_CONTROL;
auto command = static_cast<CFE_STATE *>(cmd);
if constexpr (Family::isHeaplessRequired() == false) {
using CFE_STATE = typename Family::CFE_STATE;
using STACK_ID_CONTROL = typename CFE_STATE::STACK_ID_CONTROL;
auto command = static_cast<CFE_STATE *>(cmd);
if (debugManager.flags.CFEStackIDControl.get() != -1) {
command->setStackIdControl(static_cast<STACK_ID_CONTROL>(debugManager.flags.CFEStackIDControl.get()));
if (debugManager.flags.CFEStackIDControl.get() != -1) {
command->setStackIdControl(static_cast<STACK_ID_CONTROL>(debugManager.flags.CFEStackIDControl.get()));
}
}
}
} // namespace NEO

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2021-2024 Intel Corporation
* Copyright (C) 2021-2025 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
@@ -33,8 +33,12 @@ template <typename GfxFamily>
void *PreambleHelper<GfxFamily>::getSpaceForVfeState(LinearStream *pCommandStream,
const HardwareInfo &hwInfo,
EngineGroupType engineGroupType) {
using CFE_STATE = typename Family::CFE_STATE;
return pCommandStream->getSpace(sizeof(CFE_STATE));
if constexpr (GfxFamily::isHeaplessRequired() == false) {
using CFE_STATE = typename GfxFamily::CFE_STATE;
return pCommandStream->getSpace(sizeof(CFE_STATE));
} else {
return nullptr;
}
}
template <typename GfxFamily>
@@ -44,33 +48,35 @@ void PreambleHelper<GfxFamily>::programVfeState(void *pVfeState,
uint64_t scratchAddress,
uint32_t maxFrontEndThreads,
const StreamProperties &streamProperties) {
using CFE_STATE = typename Family::CFE_STATE;
if constexpr (GfxFamily::isHeaplessRequired() == false) {
using CFE_STATE = typename GfxFamily::CFE_STATE;
auto cfeState = reinterpret_cast<CFE_STATE *>(pVfeState);
CFE_STATE cmd = Family::cmdInitCfeState;
auto cfeState = reinterpret_cast<CFE_STATE *>(pVfeState);
CFE_STATE cmd = GfxFamily::cmdInitCfeState;
uint32_t lowAddress = uint32_t(0xFFFFFFFF & scratchAddress);
cmd.setScratchSpaceBuffer(lowAddress);
cmd.setMaximumNumberOfThreads(maxFrontEndThreads);
uint32_t lowAddress = uint32_t(0xFFFFFFFF & scratchAddress);
cmd.setScratchSpaceBuffer(lowAddress);
cmd.setMaximumNumberOfThreads(maxFrontEndThreads);
cmd.setComputeOverdispatchDisable(streamProperties.frontEndState.disableOverdispatch.value == 1);
cmd.setComputeOverdispatchDisable(streamProperties.frontEndState.disableOverdispatch.value == 1);
PreambleHelper<Family>::setSingleSliceDispatchMode(&cmd, streamProperties.frontEndState.singleSliceDispatchCcsMode.value == 1);
PreambleHelper<GfxFamily>::setSingleSliceDispatchMode(&cmd, streamProperties.frontEndState.singleSliceDispatchCcsMode.value == 1);
appendProgramVFEState(rootDeviceEnvironment, streamProperties, &cmd);
appendProgramVFEState(rootDeviceEnvironment, streamProperties, &cmd);
if (debugManager.flags.ComputeOverdispatchDisable.get() != -1) {
cmd.setComputeOverdispatchDisable(debugManager.flags.ComputeOverdispatchDisable.get());
if (debugManager.flags.ComputeOverdispatchDisable.get() != -1) {
cmd.setComputeOverdispatchDisable(debugManager.flags.ComputeOverdispatchDisable.get());
}
if (debugManager.flags.MaximumNumberOfThreads.get() != -1) {
cmd.setMaximumNumberOfThreads(debugManager.flags.MaximumNumberOfThreads.get());
}
if (debugManager.flags.OverDispatchControl.get() != -1) {
cmd.setOverDispatchControl(static_cast<typename CFE_STATE::OVER_DISPATCH_CONTROL>(debugManager.flags.OverDispatchControl.get()));
}
*cfeState = cmd;
}
if (debugManager.flags.MaximumNumberOfThreads.get() != -1) {
cmd.setMaximumNumberOfThreads(debugManager.flags.MaximumNumberOfThreads.get());
}
if (debugManager.flags.OverDispatchControl.get() != -1) {
cmd.setOverDispatchControl(static_cast<typename CFE_STATE::OVER_DISPATCH_CONTROL>(debugManager.flags.OverDispatchControl.get()));
}
*cfeState = cmd;
}
template <typename GfxFamily>
@@ -80,8 +86,12 @@ uint64_t PreambleHelper<GfxFamily>::getScratchSpaceAddressOffsetForVfeState(Line
template <typename GfxFamily>
size_t PreambleHelper<GfxFamily>::getVFECommandsSize() {
using CFE_STATE = typename Family::CFE_STATE;
return sizeof(CFE_STATE);
if constexpr (GfxFamily::isHeaplessRequired() == false) {
using CFE_STATE = typename GfxFamily::CFE_STATE;
return sizeof(CFE_STATE);
} else {
return 0;
}
}
template <typename GfxFamily>
@@ -91,12 +101,14 @@ uint32_t PreambleHelper<GfxFamily>::getL3Config(const HardwareInfo &hwInfo, bool
template <typename GfxFamily>
void PreambleHelper<GfxFamily>::setSingleSliceDispatchMode(void *cmd, bool enable) {
auto cfeState = reinterpret_cast<typename GfxFamily::CFE_STATE *>(cmd);
if constexpr (GfxFamily::isHeaplessRequired() == false) {
auto cfeState = reinterpret_cast<typename GfxFamily::CFE_STATE *>(cmd);
cfeState->setSingleSliceDispatchCcsMode(enable);
cfeState->setSingleSliceDispatchCcsMode(enable);
if (debugManager.flags.CFESingleSliceDispatchCCSMode.get() != -1) {
cfeState->setSingleSliceDispatchCcsMode(debugManager.flags.CFESingleSliceDispatchCCSMode.get());
if (debugManager.flags.CFESingleSliceDispatchCCSMode.get() != -1) {
cfeState->setSingleSliceDispatchCcsMode(debugManager.flags.CFESingleSliceDispatchCCSMode.get());
}
}
}

View File

@@ -1,11 +1,12 @@
/*
* Copyright (C) 2018-2024 Intel Corporation
* Copyright (C) 2018-2025 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#pragma once
#include <cstddef>
#include <cstdint>

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2021-2024 Intel Corporation
* Copyright (C) 2021-2025 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
@@ -102,18 +102,20 @@ void StateBaseAddressHelper<GfxFamily>::appendStateBaseAddressParameters(
template <typename GfxFamily>
void StateBaseAddressHelper<GfxFamily>::programBindingTableBaseAddress(LinearStream &commandStream, uint64_t baseAddress, uint32_t sizeInPages, GmmHelper *gmmHelper) {
using _3DSTATE_BINDING_TABLE_POOL_ALLOC = typename GfxFamily::_3DSTATE_BINDING_TABLE_POOL_ALLOC;
if constexpr (GfxFamily::isHeaplessRequired() == false) {
using _3DSTATE_BINDING_TABLE_POOL_ALLOC = typename GfxFamily::_3DSTATE_BINDING_TABLE_POOL_ALLOC;
auto bindingTablePoolAlloc = commandStream.getSpaceForCmd<_3DSTATE_BINDING_TABLE_POOL_ALLOC>();
_3DSTATE_BINDING_TABLE_POOL_ALLOC cmd = GfxFamily::cmdInitStateBindingTablePoolAlloc;
cmd.setBindingTablePoolBaseAddress(baseAddress);
cmd.setBindingTablePoolBufferSize(sizeInPages);
cmd.setSurfaceObjectControlStateIndexToMocsTables(gmmHelper->getMOCS(GMM_RESOURCE_USAGE_OCL_STATE_HEAP_BUFFER));
if (debugManager.flags.DisableCachingForHeaps.get()) {
cmd.setSurfaceObjectControlStateIndexToMocsTables(gmmHelper->getMOCS(GMM_RESOURCE_USAGE_OCL_SYSTEM_MEMORY_BUFFER_CACHELINE_MISALIGNED));
auto bindingTablePoolAlloc = commandStream.getSpaceForCmd<_3DSTATE_BINDING_TABLE_POOL_ALLOC>();
_3DSTATE_BINDING_TABLE_POOL_ALLOC cmd = GfxFamily::cmdInitStateBindingTablePoolAlloc;
cmd.setBindingTablePoolBaseAddress(baseAddress);
cmd.setBindingTablePoolBufferSize(sizeInPages);
cmd.setSurfaceObjectControlStateIndexToMocsTables(gmmHelper->getMOCS(GMM_RESOURCE_USAGE_OCL_STATE_HEAP_BUFFER));
if (debugManager.flags.DisableCachingForHeaps.get()) {
cmd.setSurfaceObjectControlStateIndexToMocsTables(gmmHelper->getMOCS(GMM_RESOURCE_USAGE_OCL_SYSTEM_MEMORY_BUFFER_CACHELINE_MISALIGNED));
}
*bindingTablePoolAlloc = cmd;
}
*bindingTablePoolAlloc = cmd;
}
template <typename GfxFamily>