mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-09 22:43:00 +08:00
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:
committed by
Compute-Runtime-Automation
parent
0243004907
commit
0aa2c4f0cb
@@ -148,7 +148,7 @@ class CompilerProductHelperHw : public CompilerProductHelper {
|
||||
|
||||
protected:
|
||||
uint32_t getProductConfigFromHwInfo(const HardwareInfo &hwInfo) const override;
|
||||
CompilerProductHelperHw() = default;
|
||||
CompilerProductHelperHw();
|
||||
};
|
||||
|
||||
template <PRODUCT_FAMILY gfxProduct>
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user