新闻详情

新闻详情

首页 / 资讯中心 / 详情

CANN ops-nn 算子开发必读:aclTensor 数据类型全解与简写形式速查手册

发布时间:2026/9/19 2:31:30来源:尧图网络
CANN ops-nn 算子开发必读:aclTensor 数据类型全解与简写形式速查手册
CANN ops-nn 算子开发必读aclTensor 数据类型全解与简写形式速查手册【免费下载链接】ops-nn本项目是CANN提供的神经网络类计算算子库实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-nn数据类型是 CANN 神经网络算子库ops-nn中所有算子 API 参数描述与调用约定的基石。本文围绕 docs/zh/context/data_type.md 展开系统梳理通过aclCreateTensor接口创建aclTensor时支持的全量数据类型及其在文档中的简写形式并结合仓库源码中的实际调用示例与数据类型互转换、广播约束帮助你准确理解并正确使用算子 API 的数据类型参数。一、数据类型在算子 API 调用中的定位在 CANN ops-nn 中开发者通过两段式接口调用单算子 API先调用aclxxXxxGetWorkspaceSize计算 workspace 大小再调用aclxxXxx执行计算。而算子 API 的输入、输出对象则是通过 数据结构 中介绍的aclTensor、aclScalar、aclIntArray等基础结构承载的。其中aclTensor是管理和存储张量数据的核心结构其创建接口签名如下完整定义以《Runtime运行时API》中aclDataType章节为准aclTensor *aclCreateTensor(const int64_t *shape, int64_t dimNum, aclDataType dataType, const int64_t *strides, int64_t storageOffset, aclFormat format, const int64_t *storageShape, int64_t storageDimNum, void *tensorData);可以看到dataType数据类型是创建aclTensor时必须指定的核心参数它决定了张量中每个元素占据的字节宽度、可参与的运算以及与其他类型之间的转换能力。在仓库的示例代码 activation/elu/examples/test_aclnn_elu.cpp 中创建输入输出张量时即显式指定了aclDataType::ACL_FLOAT*selfOrResult aclCreateTensor(shape.data(), shape.size(), dataType, strides.data(), 0, aclFormat::ACL_FORMAT_ND, shape.data(), shape.size(), *deviceAddr);二、全量数据类型与简写形式对照表为简化两段式接口的参数说明docs 文档在描述接口参数时将原始数据类型ACL_XXX以简写形式呈现。简写形式不区分大小写因此FLOAT、float、Float均表示同一类型。以下为 docs/zh/context/data_type.md 给出的完整对照表表 1数据类型简写表原始数据类型简写形式不区分大小写ACL_FLOATFLOAT 或 FLOAT32ACL_FLOAT16FLOAT16ACL_INT8INT8ACL_INT32INT32ACL_UINT8UINT8ACL_INT16INT16ACL_UINT16UINT16ACL_UINT32UINT32ACL_INT64INT64ACL_UINT64UINT64ACL_DOUBLEDOUBLE 或 FLOAT64ACL_BOOLBOOLACL_STRINGSTRINGACL_COMPLEX64COMPLEX64ACL_COMPLEX128COMPLEX128ACL_BF16BF16 或 BFLOAT16ACL_INT4INT4ACL_UINT1UINT1ACL_COMPLEX32COMPLEX32ACL_HIFLOAT8HIFLOAT8ACL_FLOAT8_E5M2FLOAT8_E5M2ACL_FLOAT8_E4M3FNFLOAT8_E4M3FNACL_FLOAT8_E8M0FLOAT8_E8M0ACL_FLOAT6_E3M2FLOAT6_E3M2ACL_FLOAT6_E2M3FLOAT6_E2M3ACL_FLOAT4_E2M1FLOAT4_E2M1ACL_FLOAT4_E1M2FLOAT4_E1M2从表中可以看到数据类型体系覆盖了如下几个家族标准浮点类型ACL_FLOATFP32、ACL_FLOAT16FP16、ACL_DOUBLEFP64。文档中FLOAT32、FLOAT64分别是前两者的等价别名。整数类型ACL_INT8、ACL_INT16、ACL_INT32、ACL_INT64及对应的无符号ACL_UINT8、ACL_UINT16、ACL_UINT32、ACL_UINT64外加低比特的ACL_INT4、ACL_UINT1。布尔与字符串类型ACL_BOOL、ACL_STRING。复数类型ACL_COMPLEX32、ACL_COMPLEX64、ACL_COMPLEX128。AI 场景专用低精度类型ACL_BF16Brain Floating Point 16别名BFLOAT16、ACL_HIFLOAT8以及新一代浮点格式ACL_FLOAT8_E5M2、ACL_FLOAT8_E4M3FN、ACL_FLOAT8_E8M0、ACL_FLOAT6_E3M2、ACL_FLOAT6_E2M3、ACL_FLOAT4_E2M1、ACL_FLOAT4_E1M2。这类低比特浮点格式主要用于大模型推理场景下的显存压缩与带宽优化支持范围以具体算子 API 的参数说明为准。在仓库中这些类型被广泛用于算子的输入输出定义与单算子 API 测试。例如在 activation/elu/op_api/aclnn_elu.cpp 及各算子的tests/ut/op_api/test_aclnn_*.cpp测试用例中均能看到ACL_FLOAT、ACL_FLOAT16、ACL_BF16等类型的实际使用。三、如何将简写形式还原为代码中的真实类型文档中的简写形式如FLOAT、INT8、BF16用于参数说明但在编写代码时需要通过aclCreateTensor、aclCreateScalar等接口传入完整的aclDataType枚举值。二者对应关系可以简单概括为简写形式 原始枚举去掉ACL_前缀。例如文档写FLOAT32代码中用aclDataType::ACL_FLOAT文档写BF16或BFLOAT16代码中用aclDataType::ACL_BF16。个别类型存在多个别名FLOAT/FLOAT32对应ACL_FLOATDOUBLE/FLOAT64对应ACL_DOUBLEBF16/BFLOAT16对应ACL_BF16其余类型简写与枚举一一对应。在 activation/elu/examples/test_aclnn_elu.cpp 中可以看到完整的实践输入数据以std::vectorfloat承载创建张量时使用aclDataType::ACL_FLOAT标量alpha、scale、inputScale则通过aclCreateScalar(value, aclDataType::ACL_FLOAT)创建。这说明张量元素类型host 侧数据类型与aclDataType枚举必须保持一致否则会出现数据解释错误。四、数据类型相关的派生约束数据类型不仅影响内存布局还决定了算子 API 内部的类型推导与转换行为。docs/zh/context 下的相关章节给出了如下约束阅读算子 API 参数说明时应一并参考互转换关系当 API 输出张量的数据类型与输入推导出的计算类型不一致时API 内部会将计算结果转换为输出类型。转换需遵循以下规则浮点类型ACL_FLOAT16、ACL_FLOAT、ACL_DOUBLE、ACL_BF16之间可以转换也支持向复数类型转换整数类型ACL_INT8、ACL_UINT8、ACL_INT16、ACL_UINT16、ACL_INT32、ACL_UINT32、ACL_INT64、ACL_UINT64之间可以转换也支持向浮点、复数类型转换复数类型之间可以转换BOOL支持向整数、浮点、复数类型转换除此之外的场景均不支持转换调用 API 时会出现参数校验失败对应返回码ACLNN_ERR_PARAM_INVALID详见 docs/zh/context/aclnn_return_code.md。broadcast 关系当参与广播的两个输入的数据类型或推导后的类型属于COMPLEX64、COMPLEX128、DOUBLE、INT16、UINT16、UINT64时除了满足广播规则外还有额外的类型条件限制否则广播会失败并导致算子执行报错。互推导关系与非连续的 Tensor类型推导规则与非连续存储下的数据读写同样与数据类型紧密相关编写涉及类型提升或非连续张量的算子调用前建议通读这两个章节。五、使用注意事项简写不区分大小写阅读文档时float、FLOAT、Float均指ACL_FLOAT但在 C 代码中枚举名必须与头文件定义完全一致。类型与数据宽度必须匹配例如用std::vectorint32_t承载数据时应指定ACL_INT32而非ACL_FLOAT用float承载时对应ACL_FLOAT。低精度类型需确认算子支持ACL_INT4、ACL_UINT1、ACL_FLOAT8_*、ACL_FLOAT6_*、ACL_FLOAT4_*等新类型并非所有算子 API 都支持务必以具体 API 的参数说明如各算子目录下的docs/*.md为准。格式与类型配合使用创建aclTensor时数据类型与数据格式如ACL_FORMAT_ND需同时满足 API 的要求CNN 类算子通常对格式有额外的业务语义要求。六、延伸阅读基本概念两段式接口、数据结构、数据类型、数据格式等基础概念的索引入口。数据结构aclTensor、aclScalar、aclIntArray、aclTensorList等基础结构的创建与使用。两段式接口GetWorkspaceSize 执行接口的完整调用流程。互转换关系 与 broadcast 关系数据类型参与推导、转换与广播时的规则约束。数据格式aclTensor支持的数据格式及其维度对应关系。非连续的 Tensor非连续存储场景下数据类型的正确处理方式。示例代码activation/elu/examples/test_aclnn_elu.cpp 展示了从aclCreateTensor到两段式 API 调用的完整可运行流程。【免费下载链接】ops-nn本项目是CANN提供的神经网络类计算算子库实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-nn创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Ad-hoc无线对等网络实战:从驱动安装到ping连通 2026/9/19 3:25:38

Ad-hoc无线对等网络实战:从驱动安装到ping连通

简介:《搭建Ad-hoc无线网络[整理]》是一份关于Ad-hoc无线对等网络的实训指导PDF,主要面向计算机网络课程学习者、局域网组建与维护实训人员,以及需要临时搭建无线对等网络的用户。文档以实验项目形式展开,讲解了Ad-hoc网络无需中心…

阅读更多 →
Chat-UI:企业级大模型对话前端工程范式 2026/9/19 3:25:38

Chat-UI:企业级大模型对话前端工程范式

1. 这不是个“UI组件库”,而是一套可落地的企业级对话前端工程范式Hugging Face Chat-UI 这个项目名字听起来像个小工具,但实际拆开看,它根本不是那种 npm install 就能跑起来的玩具 demo。我去年在给一家做金融合规大模型服务的客户做前端架…

阅读更多 →
Codex+Skills+MCP:AI编程效率提升实战指南 2026/9/19 3:25:38

Codex+Skills+MCP:AI编程效率提升实战指南

1. 整体设计思路:为什么是 Codex Skills MCP 三件套1.1 代码效率瓶颈破局点先聊一个很现实的问题。过去一年我用过不少AI编程工具,从最早在编辑器里装插件补全代码,到后来直接在终端里让AI改文件、跑测试,体验一直在变好&#x…

阅读更多 →
IEEE 33节点配电网光伏并网PSCAD建模:从潮流算例到电磁暂态仿真 2026/9/19 3:25:38

IEEE 33节点配电网光伏并网PSCAD建模:从潮流算例到电磁暂态仿真

手里有一份IEEE 33节点配电网的潮流算例,目标是验证光伏并网后的电压抬升、暂态冲击和谐波特性——很多做分布式电源课题的同学应该都卡在过这一步:Matlab里潮流算得好好的,但要输出开关级的并网冲击波形、逆变器动作细节,就绕不开…

阅读更多 →
React Native进度条集成OpenHarmony:依赖适配与渲染排查 2026/9/19 3:25:38

React Native进度条集成OpenHarmony:依赖适配与渲染排查

把 react-native-progress 集成进 React Native 的 OpenHarmony 工程,听起来是个再简单不过的活儿——一个进度条组件而已。可真动起手来就会发现,这条集成路线本身就是 OpenHarmony 三方库生态的一道典型考题:它表面上是个纯 JS 组件&#x…

阅读更多 →
Docker部署Seata与Nacos:版本不匹配问题排查与避坑指南 2026/9/19 3:22:38

Docker部署Seata与Nacos:版本不匹配问题排查与避坑指南

先交代下背景:这周帮同事排查一个分布式事务问题,看到日志第一行can not connect to services server,我就知道又碰到Seata和Nacos的版本匹配问题了。这种情况在Docker部署环境里我已经遇到不止一次,而且每次都不太一样&#xff0…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞