CANN/docs Ascend IR算子规格简介

发布时间:2026/7/5 18:35:25
CANN/docs Ascend IR算子规格简介 规格简介【免费下载链接】docs该仓库用于维护cann公共文档项目地址: https://gitcode.com/cann/docs本节介绍基于Ascend IR定义的算子信息算子所在头文件路径为${INSTALL_DIR}/opp/built-in/op_graph/inc。其中${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。以root用户安装为例安装后文件默认存储路径为/usr/local/Ascend/cann。在使用算子之前请先阅读该章节所列的相关说明基础知识说明Format介绍算子规格中所列的Format信息。TensorType详细介绍算子规格中所列的TensorType类型。Type Promotion当部分算子如Add、Mul等输入的Tensor数据类型不一致时算子内部计算会自动提升数据类型。该部分给出数据类型提升的规则。确定性计算列出确定性计算特性涉及和支持的算子。FormatND表示支持任意格式仅有Square、Tanh等这些单输入对自身处理的算子外其它需要慎用。NC1HWC0自研的5维数据格式。其中C0与微架构强相关该值等于cube单元的size例如16C1是将C维度按照C0切分C1C/C0若结果不整除最后一份数据需要padding到C0。FRACTAL_Z卷积的权重的格式。TensorType说明针对OrdinaryType、BasicType、NumberType、ComplexDataType、UnaryDataType中的DT_COMPLEX32数据类型目前只有StridedSlice算子、StridedSliceGrad算子、AsStrided算子支持。struct TensorType { explicit TensorType(DataType dt); TensorType(const std::initializer_listDataType initial_types); static TensorType ALL() { return TensorType{DT_BOOL, DT_COMPLEX128, DT_COMPLEX64, DT_DOUBLE, DT_FLOAT, DT_FLOAT16, DT_INT16, DT_INT32, DT_INT64, DT_INT8, DT_QINT16, DT_QINT32, DT_QINT8, DT_QUINT16, DT_QUINT8, DT_RESOURCE, DT_STRING, DT_UINT16, DT_UINT32, DT_UINT64, DT_UINT8, DT_BF16, DT_COMPLEX32}; } static TensorType QuantifiedType() { return TensorType{DT_QINT16, DT_QINT32, DT_QINT8, DT_QUINT16, DT_QUINT8}; } static TensorType OrdinaryType() { return TensorType{DT_BOOL, DT_COMPLEX128, DT_COMPLEX64, DT_DOUBLE, DT_FLOAT, DT_FLOAT16, DT_INT16, DT_INT32, DT_INT64, DT_INT8, DT_UINT16, DT_UINT32, DT_UINT64, DT_UINT8, DT_BF16, DT_COMPLEX32}; } static TensorType BasicType() { return TensorType{DT_COMPLEX128, DT_COMPLEX64, DT_DOUBLE, DT_FLOAT, DT_FLOAT16, DT_INT16, DT_INT32, DT_INT64, DT_INT8, DT_QINT16, DT_QINT32, DT_QINT8, DT_QUINT16, DT_QUINT8, DT_UINT16, DT_UINT32, DT_UINT64, DT_UINT8, DT_BF16, DT_COMPLEX32}; } static TensorType NumberType() { return TensorType{DT_COMPLEX128, DT_COMPLEX64, DT_DOUBLE, DT_FLOAT, DT_FLOAT16, DT_INT16, DT_INT32, DT_INT64, DT_INT8, DT_QINT32, DT_QINT8, DT_QUINT8, DT_UINT16, DT_UINT32, DT_UINT64, DT_UINT8, DT_BF16, DT_COMPLEX32}; } static TensorType RealNumberType() { return TensorType{DT_DOUBLE, DT_FLOAT, DT_FLOAT16, DT_INT16, DT_INT32, DT_INT64, DT_INT8, DT_UINT16, DT_UINT32, DT_UINT64, DT_UINT8, DT_BF16}; } static TensorType ComplexDataType() { return TensorType{DT_COMPLEX128, DT_COMPLEX64, DT_COMPLEX32}; } static TensorType IntegerDataType() { return TensorType{DT_INT16, DT_INT32, DT_INT64, DT_INT8, DT_UINT16, DT_UINT32, DT_UINT64, DT_UINT8}; } static TensorType SignedDataType() { return TensorType{DT_INT16, DT_INT32, DT_INT64, DT_INT8}; } static TensorType UnsignedDataType() { return TensorType{DT_UINT16, DT_UINT32, DT_UINT64, DT_UINT8}; } static TensorType FloatingDataType() { return TensorType{DT_DOUBLE, DT_FLOAT, DT_FLOAT16}; } static TensorType IndexNumberType() { return TensorType{DT_INT32, DT_INT64}; } static TensorType UnaryDataType() { return TensorType{DT_COMPLEX128, DT_COMPLEX64, DT_DOUBLE, DT_FLOAT, DT_FLOAT16, DT_BF16, DT_COMPLEX32}; } static TensorType FLOAT() { return TensorType{DT_FLOAT, DT_FLOAT16, DT_BF16}; } std::shared_ptrTensorTypeImpl tensor_type_impl_; };Type Promotion当部分算子如Add、Mul等输入的Tensor数据类型不一致时算子内部计算会自动提升数据类型。数据类型提升的规则如下表数据类型f32f16bf16s8u8s16u16s32u32s64u64boolc32c64f32f32f32f32f32f32f32×f32×f32×f32c64c64f16f32f16f32f16f16f16×f16×f16×f16c32c64bf16f32f32bf16bf16bf16bf16×bf16×bf16×bf16c32c64s8f32f16bf16s8s16s16×s32×s64×s8c32c64u8f32f16bf16s16u8s16×s32×s64×u8c32c64s16f32f16bf16s16s16s16×s32×s64×s16c32c64u16××××××u16×××××××s32f32f16bf16s32s32s32×s32×s64×s32c32c64u32××××××××u32×××××s64f32f16bf16s64s64s64×s64×s64×s64c32c64u64××××××××××u64×××boolf32f16bf16s8u8s16×s32×s64×boolc32c64c32c64c32c32c32c32c32×c32×c32×c32c32c64c64c64c64c64c64c64c64×c64×c64×c64c64c64说明为方便描述表格中使用的数据类型是简写形式代表的含义DT_FLOAT(f32)、DT_FLOAT16(f16)、DT_BF16(bf16)、DT_INT8(s8)、DT_UINT8(u8)、DT_INT16(s16)、DT_UINT16(u16)、DT_INT32(s32)、DT_UINT32(u32)、DT_INT64(s64)、DT_UINT64(u64)、DT_BOOL(bool)、DT_COMPLEX32(c32)、DT_COMPLEX64(c64)。当前AI Core引擎的算子精度提升暂不支持DT_DOUBLE类型与DT_COMPLEX128类型。示例当Mul算子输入参数的数据类型分别为(float32, double)无法提升成双double的输入走AI Core引擎会分配到AI CPU引擎。表格中表头和最左侧一列分别表示待推导的两个输入数据类型表格对应位置表示推导出的数据类型。×表示两种数据类型不能进行推导计算。确定性计算算子实现中由于存在异步的多线程执行会导致浮点数累加的顺序变化算子在相同的硬件和输入下多次执行的结果可能不同当开启确定性计算功能时算子在相同的硬件和输入下多次执行将产生相同的输出。如下针对确定性计算特性的算子如果所列算子不在对应的规格清单中则说明当前芯片版本不支持该算子。如下算子涉及但未支持确定性计算resizegradDWeightQuantBatchMatmulV2如下算子涉及且已支持确定性计算AvgPool3DGradBatchMatMulBatchMatMulV2BiasAddGradBinaryCrossEntropyBN3DTrainingReduceBN3DTrainingUpdateGradBNTrainingReduceBNTrainingUpdateGradConv2DBackpropFilter该算子仅 Atlas 训练系列产品 、 Atlas A2 训练系列产品/Atlas A2 推理系列产品 、 Atlas A3 训练系列产品/Atlas A3 推理系列产品 支持。Conv3DBackpropFilter该算子仅 Atlas 训练系列产品 、 Atlas A2 训练系列产品/Atlas A2 推理系列产品 、 Atlas A3 训练系列产品/Atlas A3 推理系列产品 支持。EmbeddingDenseGradFullyConnectionGroupNormGradHistogramInplaceIndexAddKLDivLpNormReduceV2LpNormV2MseLossMatMulMatMulV2NLLLossReduceMeanReduceSumScatterAddScatterElementsScatterNdScatterNdAddUnsortedSegmentSum【免费下载链接】docs该仓库用于维护cann公共文档项目地址: https://gitcode.com/cann/docs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考