From 0938a0eaf94eda884fa687c5e5184f5951ff70e8 Mon Sep 17 00:00:00 2001 From: "Chodor, Jaroslaw" Date: Fri, 24 Jan 2025 12:14:19 +0000 Subject: [PATCH] feature: Adding support for extending KernerlDescriptor Related-To: NEO-12747 Signed-off-by: Chodor, Jaroslaw --- shared/offline_compiler/source/CMakeLists.txt | 3 ++- .../device_binary_format/zebin/CMakeLists.txt | 4 ++-- .../source/device_binary_format/zebin/zeinfo.h | 4 +--- .../zebin/zeinfo_decoder.cpp | 3 +++ .../zebin/zeinfo_decoder.h | 4 +++- ...zeinfo_extra.cpp => zeinfo_decoder_ext.cpp} | 3 +++ .../zebin/zeinfo_decoder_ext.h | 16 ++++++++++++++++ shared/source/kernel/CMakeLists.txt | 3 ++- shared/source/kernel/kernel_descriptor.h | 17 ++++++++++++++--- shared/source/kernel/kernel_descriptor_ext.cpp | 18 ++++++++++++++++++ 10 files changed, 64 insertions(+), 11 deletions(-) rename shared/source/device_binary_format/zebin/{zeinfo_extra.cpp => zeinfo_decoder_ext.cpp} (86%) create mode 100644 shared/source/device_binary_format/zebin/zeinfo_decoder_ext.h create mode 100644 shared/source/kernel/kernel_descriptor_ext.cpp diff --git a/shared/offline_compiler/source/CMakeLists.txt b/shared/offline_compiler/source/CMakeLists.txt index 072591c615..f2bb5b9439 100644 --- a/shared/offline_compiler/source/CMakeLists.txt +++ b/shared/offline_compiler/source/CMakeLists.txt @@ -51,7 +51,7 @@ set(CLOC_LIB_SRCS_LIB ${NEO_SHARED_DIRECTORY}/device_binary_format/zebin/zebin_decoder.h ${NEO_SHARED_DIRECTORY}/device_binary_format/zebin/zeinfo_decoder.cpp ${NEO_SHARED_DIRECTORY}/device_binary_format/zebin/zeinfo_decoder.h - ${NEO_SHARED_DIRECTORY}/device_binary_format/zebin/${BRANCH_DIR_SUFFIX}zeinfo_extra.cpp + ${NEO_SHARED_DIRECTORY}/device_binary_format/zebin/${BRANCH_DIR_SUFFIX}zeinfo_decoder_ext.cpp ${NEO_SHARED_DIRECTORY}/dll/devices${BRANCH_DIR_SUFFIX}devices.inl ${NEO_SHARED_DIRECTORY}/dll/devices/devices_base.inl ${NEO_SHARED_DIRECTORY}/dll/devices${BRANCH_DIR_SUFFIX}/product_config.inl @@ -76,6 +76,7 @@ set(CLOC_LIB_SRCS_LIB ${NEO_SHARED_DIRECTORY}/helpers/path.h ${NEO_SHARED_DIRECTORY}/helpers/product_config_helper.cpp ${NEO_SHARED_DIRECTORY}/helpers/product_config_helper.h + ${NEO_SHARED_DIRECTORY}/kernel/${BRANCH_DIR_SUFFIX}kernel_descriptor_ext.cpp ${NEO_SHARED_DIRECTORY}/os_interface/os_library.cpp ${NEO_SHARED_DIRECTORY}/os_interface/os_library.h ${NEO_SHARED_DIRECTORY}/sku_info/definitions${BRANCH_DIR_SUFFIX}sku_info.cpp diff --git a/shared/source/device_binary_format/zebin/CMakeLists.txt b/shared/source/device_binary_format/zebin/CMakeLists.txt index f95b6ea480..b55c7da5b2 100644 --- a/shared/source/device_binary_format/zebin/CMakeLists.txt +++ b/shared/source/device_binary_format/zebin/CMakeLists.txt @@ -1,12 +1,12 @@ # -# Copyright (C) 2024 Intel Corporation +# Copyright (C) 2024-2025 Intel Corporation # # SPDX-License-Identifier: MIT # set(NEO_CORE_ZEINFO_EXTRA ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt - ${CMAKE_CURRENT_SOURCE_DIR}/${BRANCH_DIR_SUFFIX}zeinfo_extra.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/${BRANCH_DIR_SUFFIX}zeinfo_decoder_ext.cpp ) set_property(GLOBAL APPEND PROPERTY NEO_CORE_ZEINFO_EXTRA ${NEO_CORE_ZEINFO_EXTRA}) diff --git a/shared/source/device_binary_format/zebin/zeinfo.h b/shared/source/device_binary_format/zebin/zeinfo.h index 0205701d35..d81a6a6947 100644 --- a/shared/source/device_binary_format/zebin/zeinfo.h +++ b/shared/source/device_binary_format/zebin/zeinfo.h @@ -403,9 +403,7 @@ struct ExecutionEnvBaseT final { execEnvExt = allocateExecEnvExt(); } ~ExecutionEnvBaseT() { - if (execEnvExt) { - freeExecEnvExt(execEnvExt); - } + freeExecEnvExt(execEnvExt); } ExecutionEnvExt *execEnvExt = nullptr; diff --git a/shared/source/device_binary_format/zebin/zeinfo_decoder.cpp b/shared/source/device_binary_format/zebin/zeinfo_decoder.cpp index 710715ef17..c7ca522783 100644 --- a/shared/source/device_binary_format/zebin/zeinfo_decoder.cpp +++ b/shared/source/device_binary_format/zebin/zeinfo_decoder.cpp @@ -10,6 +10,7 @@ #include "shared/source/compiler_interface/external_functions.h" #include "shared/source/debug_settings/debug_settings_manager.h" #include "shared/source/device_binary_format/zebin/zebin_elf.h" +#include "shared/source/device_binary_format/zebin/zeinfo_decoder_ext.h" #include "shared/source/device_binary_format/zebin/zeinfo_enum_lookup.h" #include "shared/source/helpers/aligned_memory.h" #include "shared/source/helpers/basic_math.h" @@ -756,6 +757,8 @@ void populateKernelExecutionEnvironment(KernelDescriptor &dst, const KernelExecu dst.kernelAttributes.threadArbitrationPolicy = ThreadArbitrationPolicy::RoundRobinAfterDependency; break; } + + populateKernelExecutionEnvironmentExt(dst, execEnv, srcZeInfoVersion); } DecodeError decodeZeInfoKernelUserAttributes(KernelDescriptor &dst, Yaml::YamlParser &parser, const ZeInfoKernelSections &kernelSections, std::string &outErrReason, std::string &outWarning) { diff --git a/shared/source/device_binary_format/zebin/zeinfo_decoder.h b/shared/source/device_binary_format/zebin/zeinfo_decoder.h index 95edba3b65..2da2435d6f 100644 --- a/shared/source/device_binary_format/zebin/zeinfo_decoder.h +++ b/shared/source/device_binary_format/zebin/zeinfo_decoder.h @@ -1,10 +1,12 @@ /* - * Copyright (C) 2023-2024 Intel Corporation + * Copyright (C) 2023-2025 Intel Corporation * * SPDX-License-Identifier: MIT * */ +#pragma once + #include "shared/source/device_binary_format/device_binary_formats.h" #include "shared/source/device_binary_format/yaml/yaml_parser.h" #include "shared/source/device_binary_format/zebin/zeinfo.h" diff --git a/shared/source/device_binary_format/zebin/zeinfo_extra.cpp b/shared/source/device_binary_format/zebin/zeinfo_decoder_ext.cpp similarity index 86% rename from shared/source/device_binary_format/zebin/zeinfo_extra.cpp rename to shared/source/device_binary_format/zebin/zeinfo_decoder_ext.cpp index 5e2907b1e4..c7f9d3b561 100644 --- a/shared/source/device_binary_format/zebin/zeinfo_extra.cpp +++ b/shared/source/device_binary_format/zebin/zeinfo_decoder_ext.cpp @@ -25,4 +25,7 @@ void freeExecEnvExt(ExecutionEnvExt *envExt) { } } // namespace Types::Kernel::ExecutionEnv +void populateKernelExecutionEnvironmentExt(KernelDescriptor &dst, const KernelExecutionEnvBaseT &execEnv, const Types::Version &srcZeInfoVersion) { +} + } // namespace NEO::Zebin::ZeInfo diff --git a/shared/source/device_binary_format/zebin/zeinfo_decoder_ext.h b/shared/source/device_binary_format/zebin/zeinfo_decoder_ext.h new file mode 100644 index 0000000000..c1c20505cc --- /dev/null +++ b/shared/source/device_binary_format/zebin/zeinfo_decoder_ext.h @@ -0,0 +1,16 @@ +/* + * Copyright (C) 2025 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#pragma once + +#include "shared/source/device_binary_format/zebin/zeinfo_decoder.h" + +namespace NEO::Zebin::ZeInfo { + +void populateKernelExecutionEnvironmentExt(KernelDescriptor &dst, const KernelExecutionEnvBaseT &execEnv, const Types::Version &srcZeInfoVersion); + +} // namespace NEO::Zebin::ZeInfo diff --git a/shared/source/kernel/CMakeLists.txt b/shared/source/kernel/CMakeLists.txt index bc7b231202..09717e33eb 100644 --- a/shared/source/kernel/CMakeLists.txt +++ b/shared/source/kernel/CMakeLists.txt @@ -1,5 +1,5 @@ # -# Copyright (C) 2019-2023 Intel Corporation +# Copyright (C) 2019-2025 Intel Corporation # # SPDX-License-Identifier: MIT # @@ -15,6 +15,7 @@ set(NEO_CORE_KERNEL ${CMAKE_CURRENT_SOURCE_DIR}/kernel_arg_descriptor.h ${CMAKE_CURRENT_SOURCE_DIR}/kernel_arg_descriptor_extended_vme.h ${CMAKE_CURRENT_SOURCE_DIR}/kernel_arg_metadata.h + ${CMAKE_CURRENT_SOURCE_DIR}/${BRANCH_DIR_SUFFIX}kernel_descriptor_ext.cpp ${CMAKE_CURRENT_SOURCE_DIR}/kernel_descriptor.cpp ${CMAKE_CURRENT_SOURCE_DIR}/kernel_descriptor.h ${CMAKE_CURRENT_SOURCE_DIR}/kernel_descriptor_from_patchtokens.cpp diff --git a/shared/source/kernel/kernel_descriptor.h b/shared/source/kernel/kernel_descriptor.h index db11263ec8..6af6f03c5a 100644 --- a/shared/source/kernel/kernel_descriptor.h +++ b/shared/source/kernel/kernel_descriptor.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020-2024 Intel Corporation + * Copyright (C) 2020-2025 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -28,6 +28,10 @@ using StringMap = std::unordered_map; using BindlessToSurfaceStateMap = std::unordered_map; using InstructionsSegmentOffset = uint16_t; +struct KernelDescriptorExt; +KernelDescriptorExt *allocateKernelDescriptorExt(); +void freeKernelDescriptorExt(KernelDescriptorExt *); + struct KernelDescriptor { static bool isBindlessAddressingKernel(const KernelDescriptor &desc); @@ -40,8 +44,15 @@ struct KernelDescriptor { BindlessAndStateless }; - KernelDescriptor() = default; - virtual ~KernelDescriptor() = default; + KernelDescriptor() { + kernelDescriptorExt = allocateKernelDescriptorExt(); + } + + virtual ~KernelDescriptor() { + freeKernelDescriptorExt(kernelDescriptorExt); + } + + KernelDescriptorExt *kernelDescriptorExt = nullptr; void updateCrossThreadDataSize(); void initBindlessOffsetToSurfaceState(); diff --git a/shared/source/kernel/kernel_descriptor_ext.cpp b/shared/source/kernel/kernel_descriptor_ext.cpp new file mode 100644 index 0000000000..309e9a22e4 --- /dev/null +++ b/shared/source/kernel/kernel_descriptor_ext.cpp @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2025 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#include "shared/source/kernel/kernel_descriptor.h" + +namespace NEO { + +KernelDescriptorExt *allocateKernelDescriptorExt() { + return nullptr; +} +void freeKernelDescriptorExt(KernelDescriptorExt *) { +} + +} // namespace NEO \ No newline at end of file