* Copyright (c) 2026 Huawei Technologies Co., Ltd.
* This program is free software, you can redistribute it and/or modify it under the terms and conditions of
* CANN Open Software License Agreement Version 2.0 (the "License").
* Please refer to the License for details. You may not use this file except in compliance with the License.
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
* INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
* See LICENSE in the root of the software repository for the full text of the License.
*/
* \file kernel_struct_macro.h
* \brief
*/
#if defined(__NPU_COMPILER_INTERNAL_PURE_SIMT__)
#error "kernel_struct_macro.h cannot be used with compile flag --enable-simt enabled."
#endif
#if !defined(__ASCENDC_INCLUDE_INTERNAL_HEADERS__)
#define __ASCENDC_INCLUDE_INTERNAL_HEADERS__
#define __UNDEF_ASCENDC_INCLUDE_INTERNAL_HEADERS_KERNEL_STRUCT_MACRO_H__
#endif
#ifndef ASCENDC_MODULE_STRUCT_MACRO_H
#define ASCENDC_MODULE_STRUCT_MACRO_H
#if defined(__NPU_ARCH__) && \
(__NPU_ARCH__ == 5101 || __NPU_ARCH__ == 5161 || __NPU_ARCH__ == 5165 || __NPU_ARCH__ == 5163)
#include "../../impl/basic_api/kernel_macros.h"
#include "../../impl/basic_api/utils/kernel_utils_constants.h"
#if defined(ASCENDC_CPU_DEBUG) && ASCENDC_CPU_DEBUG == 1
#include <cstdint>
#include "stub_def.h"
#endif
namespace AscendC {
struct ConvKernelParams {
__aicore__ ConvKernelParams() {}
__aicore__ ConvKernelParams(
const uint8_t wStrideIn, const uint8_t hStrideIn, const uint16_t wKernelIn, const uint16_t hKernelIn,
const uint8_t wDilationIn, const uint8_t hDilationIn, const uint16_t kernelNumIn)
: wStride(wStrideIn),
hStride(hStrideIn),
wKernel(wKernelIn),
hKernel(hKernelIn),
wDilation(wDilationIn),
hDilation(hDilationIn),
kernelNum(kernelNumIn)
{}
uint8_t wStride = 0;
uint8_t hStride = 0;
uint16_t wKernel = 0;
uint16_t hKernel = 0;
uint8_t wDilation = 0;
uint8_t hDilation = 0;
uint16_t kernelNum = 0;
};
struct ConvFMatrixParams {
__aicore__ ConvFMatrixParams() {}
__aicore__ ConvFMatrixParams(
const uint16_t wFmapIn, const uint16_t hFmapIn, const uint8_t leftPaddingSizeIn,
const uint8_t rightPaddingSizeIn, const uint8_t topPaddingSizeIn, const uint8_t bottomPaddingSizeIn)
: wFmap(wFmapIn),
hFmap(hFmapIn),
leftPaddingSize(leftPaddingSizeIn),
rightPaddingSize(rightPaddingSizeIn),
topPaddingSize(topPaddingSizeIn),
bottomPaddingSize(bottomPaddingSizeIn)
{}
uint16_t wFmap = 0;
uint16_t hFmap = 0;
uint8_t leftPaddingSize = 0;
uint8_t rightPaddingSize = 0;
uint8_t topPaddingSize = 0;
uint8_t bottomPaddingSize = 0;
};
struct ConvFMatrixStepPosParams {
__aicore__ ConvFMatrixStepPosParams() {}
__aicore__ ConvFMatrixStepPosParams(
const uint16_t wStartPosIn, const uint16_t hStartPosIn, const uint16_t wStepIn, const uint16_t hStepIn)
: wStartPos(wStartPosIn), hStartPos(hStartPosIn), wStep(wStepIn), hStep(hStepIn)
{}
uint16_t wStartPos = 0;
uint16_t hStartPos = 0;
uint16_t wStep = 0;
uint16_t hStep = 0;
};
struct ConvFMatrixDual0Params {
__aicore__ ConvFMatrixDual0Params() {}
__aicore__ ConvFMatrixDual0Params(const uint32_t secondAddrIn, const uint16_t secondHIn)
: secondAddr(secondAddrIn), secondH(secondHIn)
{}
uint32_t secondAddr = 0;
uint16_t secondH = 0;
};
struct ConvFMatrixDual1Params {
__aicore__ ConvFMatrixDual1Params() {}
__aicore__ ConvFMatrixDual1Params(const uint16_t firstStrideIn, const uint16_t secondStrideIn)
: firstStride(firstStrideIn), secondStride(secondStrideIn)
{}
uint16_t firstStride = 0;
uint16_t secondStride = 0;
};
template <typename T>
struct ConvPaddingParams {
__aicore__ ConvPaddingParams() {}
__aicore__ ConvPaddingParams(const T paddingValueIn, const uint8_t paddingModeIn, const uint16_t paddingAddrIn)
: paddingValue(paddingValueIn), paddingMode(paddingModeIn), paddingAddr(paddingAddrIn)
{}
T paddingValue = 0;
uint8_t paddingMode = 0;
uint16_t paddingAddr = 0;
};
struct FixPipeConfigParams {
__aicore__ FixPipeConfigParams() {}
__aicore__ FixPipeConfigParams(
const uint8_t preReluAddrIn, const uint8_t preQuantAddrIn, const uint8_t postQuantAddrIn,
const uint8_t antiquantAddrIn, const uint8_t shiftValueIn, const uint8_t restorationCtrlIn)
: preReluAddr(preReluAddrIn),
preQuantAddr(preQuantAddrIn),
postQuantAddr(postQuantAddrIn),
antiquantAddr(antiquantAddrIn),
shiftValue(shiftValueIn),
restorationCtrl(restorationCtrlIn)
{}
uint8_t preReluAddr = 0;
uint8_t preQuantAddr = 0;
uint8_t postQuantAddr = 0;
uint8_t antiquantAddr = 0;
uint8_t shiftValue = 0;
uint8_t restorationCtrl = 0;
};
enum class lut_mode_t : uint8_t { Gelu, Silu, Sigmoid, Tanh };
struct FixPipeReluAlphaParams {
__aicore__ FixPipeReluAlphaParams() {}
__aicore__ FixPipeReluAlphaParams(const lut_mode_t lutIn, const uint32_t preValueIn)
: lut(lutIn), preValue(preValueIn)
{}
lut_mode_t lut = lut_mode_t::Gelu;
uint32_t preValue = 0;
};
struct FixPipeAddrParams {
__aicore__ FixPipeAddrParams() {}
__aicore__ FixPipeAddrParams(
const bool c0IndicatorIn, const uint32_t eltSrcAddrIn, const uint32_t srcStride1In, const uint32_t srcStride2In)
: c0Indicator(c0IndicatorIn), eltSrcAddr(eltSrcAddrIn), srcStride1(srcStride1In), srcStride2(srcStride2In)
{}
bool c0Indicator = false;
uint32_t eltSrcAddr = 0;
uint32_t srcStride1 = 0;
uint32_t srcStride2 = 0;
};
struct ConvStrideParams {
__aicore__ ConvStrideParams() {}
__aicore__ ConvStrideParams(const uint16_t loop3DstStrideIn, const uint16_t loop4DstStrideIn)
: loop3DstStride(loop3DstStrideIn), loop4DstStride(loop4DstStrideIn)
{}
uint16_t loop3DstStride = 0;
uint16_t loop4DstStride = 0;
};
struct MatrixParaParams {
__aicore__ MatrixParaParams() {}
__aicore__ MatrixParaParams(const uint16_t mIn, const uint16_t kIn, const uint16_t groupKIn)
: m(mIn), k(kIn), groupK(groupKIn)
{}
uint16_t m = 0;
uint16_t k = 0;
uint16_t groupK = 0;
};
struct MmadStrideParaParams {
__aicore__ MmadStrideParaParams() {}
__aicore__ MmadStrideParaParams(const uint16_t loop4SrcStrideIn, const uint16_t loop4DstStrideIn)
: loop4SrcStride(loop4SrcStrideIn), loop4DstStride(loop4DstStrideIn)
{}
uint16_t loop4SrcStride = 0;
uint16_t loop4DstStride = 0;
};
struct ItaMaxAddrParaParams {
__aicore__ ItaMaxAddrParaParams() {}
__aicore__ ItaMaxAddrParaParams(
const uint16_t hmaxAddrIn, const uint16_t tmaxAddrIn, const uint16_t dmaxAddrIn, const uint16_t m0nStrideIn)
: hmaxAddr(hmaxAddrIn), tmaxAddr(tmaxAddrIn), dmaxAddr(dmaxAddrIn), m0nStride(m0nStrideIn)
{}
uint16_t hmaxAddr = 0;
uint16_t tmaxAddr = 0;
uint16_t dmaxAddr = 0;
uint16_t m0nStride = 0;
};
struct MatrixMxParaParams {
__aicore__ MatrixMxParaParams() {}
__aicore__ MatrixMxParaParams(const uint32_t aMxAddrIn, const uint32_t bMxAddrIn)
: aMxAddr(aMxAddrIn), bMxAddr(bMxAddrIn)
{}
uint32_t aMxAddr = 0;
uint32_t bMxAddr = 0;
};
struct ConvFixParams {
__aicore__ ConvFixParams() {}
__aicore__ ConvFixParams(
const bool biasMatrixInitValIn, const bool biasMatrixBroadcastIn, const pre_quant_t preQuantModeIn,
const pre_relu_t preReluModeIn, const post_quant_t postQuantModeIn, const uint8_t actPostModeIn,
const uint8_t preClipReluModeIn, const eltwise_op_t eltwiseOpIn, const bool eltwiseAntiqEnableIn,
const bool eltwiseBroadcastEnableIn, const lsb_mask_t lsbMaskIn, const bool dualSrcEnableIn,
const bool compactEnableIn, const bool dependEnableIn, const instr_id_t instrIdIn,
const bool postProcHalfEnableIn, const bool nbrcBiasCtrlIn, const uint16_t cinIn)
: biasMatrixInitVal(biasMatrixInitValIn),
biasMatrixBroadcast(biasMatrixBroadcastIn),
preQuantMode(preQuantModeIn),
preReluMode(preReluModeIn),
postQuantMode(postQuantModeIn),
actPostMode(actPostModeIn),
preClipReluMode(preClipReluModeIn),
eltwiseOp(eltwiseOpIn),
eltwiseAntiqEnable(eltwiseAntiqEnableIn),
eltwiseBroadcastEnable(eltwiseBroadcastEnableIn),
lsbMask(lsbMaskIn),
dualSrcEnable(dualSrcEnableIn),
compactEnable(compactEnableIn),
dependEnable(dependEnableIn),
instrId(instrIdIn),
postProcHalfEnable(postProcHalfEnableIn),
nbrcBiasCtrl(nbrcBiasCtrlIn),
cin(cinIn)
{}
bool biasMatrixInitVal = false;
bool biasMatrixBroadcast = false;
pre_quant_t preQuantMode = pre_quant_t::No_Quant;
pre_relu_t preReluMode = pre_relu_t::NoRelu;
post_quant_t postQuantMode = post_quant_t::No_Quant;
uint8_t actPostMode = 0;
uint8_t preClipReluMode = 0;
eltwise_op_t eltwiseOp = eltwise_op_t::No_Eltwise;
bool eltwiseAntiqEnable = false;
bool eltwiseBroadcastEnable = false;
lsb_mask_t lsbMask = lsb_mask_t::Disable;
bool dualSrcEnable = false;
bool compactEnable = false;
bool dependEnable = false;
instr_id_t instrId = instr_id_t::ID_0;
bool postProcHalfEnable = false;
bool nbrcBiasCtrl = false;
uint16_t cin = 0;
};
struct MmadFixParams {
__aicore__ MmadFixParams() {}
__aicore__ MmadFixParams(
const bool biasMatrixInitValIn, const bool biasMatrixBroadcastIn, const pre_quant_t preQuantModeIn,
const pre_relu_t preReluModeIn, const post_quant_t postQuantModeIn, const uint8_t actPostModeIn,
const uint8_t preClipReluModeIn, const eltwise_op_t eltwiseOpIn, const bool eltwiseAntiqEnableIn,
const bool eltwiseBroadcastEnableIn, const bool itaEnableIn, const bool biasS32EnableIn,
const bool hmaxEnableIn, const lsb_mask_t lsbMaskIn, const bool gemvCtrlIn, const uint8_t groupModeIn,
const bool dependEnableIn, const instr_id_t instrIdIn, const bool postProcHalfEnableIn, const bool layoutCtrlIn,
const uint16_t nIn)
: biasMatrixInitVal(biasMatrixInitValIn),
biasMatrixBroadcast(biasMatrixBroadcastIn),
preQuantMode(preQuantModeIn),
preReluMode(preReluModeIn),
postQuantMode(postQuantModeIn),
actPostMode(actPostModeIn),
preClipReluMode(preClipReluModeIn),
eltwiseOp(eltwiseOpIn),
eltwiseAntiqEnable(eltwiseAntiqEnableIn),
eltwiseBroadcastEnable(eltwiseBroadcastEnableIn),
itaEnable(itaEnableIn),
biasS32Enable(biasS32EnableIn),
hmaxEnable(hmaxEnableIn),
lsbMask(lsbMaskIn),
gemvCtrl(gemvCtrlIn),
groupMode(groupModeIn),
dependEnable(dependEnableIn),
instrId(instrIdIn),
postProcHalfEnable(postProcHalfEnableIn),
layoutCtrl(layoutCtrlIn),
n(nIn)
{}
bool biasMatrixInitVal = false;
bool biasMatrixBroadcast = false;
pre_quant_t preQuantMode = pre_quant_t::No_Quant;
pre_relu_t preReluMode = pre_relu_t::NoRelu;
post_quant_t postQuantMode = post_quant_t::No_Quant;
uint8_t actPostMode = 0;
uint8_t preClipReluMode = 0;
eltwise_op_t eltwiseOp = eltwise_op_t::No_Eltwise;
bool eltwiseAntiqEnable = false;
bool eltwiseBroadcastEnable = false;
bool itaEnable = false;
bool biasS32Enable = false;
bool hmaxEnable = false;
lsb_mask_t lsbMask = lsb_mask_t::Disable;
bool gemvCtrl = false;
uint8_t groupMode = 0;
bool dependEnable = false;
instr_id_t instrId = instr_id_t::ID_0;
bool postProcHalfEnable = false;
bool layoutCtrl = false;
uint16_t n = 0;
};
}
#endif
#endif
#if defined(__UNDEF_ASCENDC_INCLUDE_INTERNAL_HEADERS_KERNEL_STRUCT_MACRO_H__)
#undef __ASCENDC_INCLUDE_INTERNAL_HEADERS__
#undef __UNDEF_ASCENDC_INCLUDE_INTERNAL_HEADERS_KERNEL_STRUCT_MACRO_H__
#endif