feature(zebin): add implicit_arg_buffer_used_by_code exec env support

Resolves: NEO-14667

Signed-off-by: Mateusz Hoppe <mateusz.hoppe@intel.com>
This commit is contained in:
Mateusz Hoppe
2025-05-23 15:50:51 +00:00
committed by Compute-Runtime-Automation
parent 542f47dfe6
commit c4bfe4e487
6 changed files with 94 additions and 3 deletions

View File

@@ -62,6 +62,8 @@ inline constexpr ConstStringRef workGroupWalkOrderDimensions("work_group_walk_or
inline constexpr ConstStringRef threadSchedulingMode("thread_scheduling_mode");
inline constexpr ConstStringRef hasSample("has_sample");
inline constexpr ConstStringRef actualKernelStartOffset("actual_kernel_start_offset");
inline constexpr ConstStringRef implicitArgBufferUsedByCode("implicit_arg_buffer_used_by_code");
namespace ThreadSchedulingMode {
inline constexpr ConstStringRef ageBased("age_based");
inline constexpr ConstStringRef roundRobin("round_robin");
@@ -357,6 +359,7 @@ using SpillSizeT = int32_t;
using LocalRegionSizeT = int32_t;
using WalkOrderT = int32_t;
using PartitionDimT = int32_t;
using HasImplicitArgBufferUsedByCodeT = bool;
namespace Defaults {
inline constexpr BarrierCountT barrierCount = 0;
@@ -391,6 +394,7 @@ inline constexpr SpillSizeT spillSize = 0;
inline constexpr LocalRegionSizeT localRegionSize = -1;
inline constexpr WalkOrderT dispatchWalkOrder = -1;
inline constexpr PartitionDimT partitionDim = -1;
inline constexpr HasImplicitArgBufferUsedByCodeT hasImplicitArgBufferUsedByCode = false;
} // namespace Defaults
inline constexpr ConstStringRef required[] = {
@@ -441,6 +445,7 @@ struct ExecutionEnvBaseT final : NEO::NonCopyableAndNonMovableClass {
LocalRegionSizeT localRegionSize = Defaults::localRegionSize;
WalkOrderT dispatchWalkOrder = Defaults::dispatchWalkOrder;
PartitionDimT partitionDim = Defaults::partitionDim;
HasImplicitArgBufferUsedByCodeT hasImplicitArgBufferUsedByCode = Defaults::hasImplicitArgBufferUsedByCode;
};
static_assert(NEO::NonCopyableAndNonMovable<ExecutionEnvBaseT>);

View File

@@ -686,6 +686,8 @@ DecodeError readZeInfoExecutionEnvironment(const Yaml::YamlParser &parser, const
validExecEnv &= readZeInfoValueChecked(parser, execEnvMetadataNd, outExecEnv.privateSize, context, outErrReason);
} else if (Tags::Kernel::ExecutionEnv::spillSize == key) {
validExecEnv &= readZeInfoValueChecked(parser, execEnvMetadataNd, outExecEnv.spillSize, context, outErrReason);
} else if (Tags::Kernel::ExecutionEnv::implicitArgBufferUsedByCode == key) {
validExecEnv &= readZeInfoValueChecked(parser, execEnvMetadataNd, outExecEnv.hasImplicitArgBufferUsedByCode, context, outErrReason);
} else if (Tags::Kernel::ExecutionEnv::actualKernelStartOffset == key) {
// ignore intentionally - deprecated and redundant key
} else {
@@ -718,6 +720,7 @@ void populateKernelExecutionEnvironment(KernelDescriptor &dst, const KernelExecu
dst.kernelAttributes.flags.usesSystolicPipelineSelectMode = execEnv.hasDpas;
dst.kernelAttributes.flags.usesStatelessWrites = (false == execEnv.hasNoStatelessWrite);
dst.kernelAttributes.flags.hasSample = execEnv.hasSample;
dst.kernelAttributes.flags.requiresImplicitArgs = execEnv.hasImplicitArgBufferUsedByCode;
dst.kernelAttributes.barrierCount = execEnv.barrierCount;
dst.kernelAttributes.bufferAddressingMode = (execEnv.has4GBBuffers) ? KernelDescriptor::Stateless : KernelDescriptor::BindfulAndStateless;
dst.kernelAttributes.inlineDataPayloadSize = static_cast<uint16_t>(execEnv.inlineDataPayloadSize);