ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

CANN ops-cv 两段式接口数据类型简写详解:从 aclCreateTensor 到算子参数表

2026/9/18 8:50:45 拓冰建站 浏览量
CANN ops-cv 两段式接口数据类型简写详解:从 aclCreateTensor 到算子参数表 CANN ops-cv 两段式接口数据类型简写详解从 aclCreateTensor 到算子参数表【免费下载链接】ops-cv本项目是CANN提供的图像处理、目标检测相关的算子库实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-cv导读本文聚焦 CANN ops-cv 算子库中两段式接口参数说明所使用的数据类型简写体系。当开发者通过aclCreateTensor接口创建aclTensor并调用aclnnXxxGetWorkspaceSize/aclnnXxx两段式算子 API 时参数表中的数据类型如FLOAT32、BF16、INT8与底层aclDataType枚举如ACL_FLOAT、ACL_BF16、ACL_INT8存在一一对应关系。读完本文你将掌握该简写表全貌、各数据类型在仓库算子文档中的实际应用方式以及如何据此正确构造输入张量。背景数据类型简写出现在哪里CANN 算子 API 的调用遵循“两段式”模式aclnnStatus aclxxXxxGetWorkspaceSize(const aclTensor *src, ..., aclTensor *out, ..., uint64_t *workspaceSize, aclOpExecutor **executor); aclnnStatus aclxxXxx(void *workspace, uint64_t workspaceSize, aclOpExecutor *executor, aclrtStream stream);第一段接口负责参数校验与 workspace 大小计算第二段接口执行计算。其中输入输出张量均以aclTensor表示而aclTensor正是通过aclCreateTensor接口创建详见数据结构typedef struct aclTensor aclTensor;aclCreateTensor的入参之一就是数据类型枚举aclDataType。由于aclDataType枚举名较长如ACL_FLOAT8_E4M3FN仓库在编写两段式接口参数说明时统一采用简写形式来标注每个参数支持的数据类型且简写不区分大小写。数据类型简写全表一图掌握下表完整列出通过aclCreateTensor创建aclTensor时支持的原始数据类型与参数表简写形式的对应关系原始数据类型aclDataType简写形式不区分大小写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两点使用要点FLOAT32 与 FLOAT 等价ACL_FLOAT既可写作FLOAT也可写作FLOAT32两者指向同一枚举值ACL_DOUBLE同理可写作DOUBLE或FLOAT64ACL_BF16可写作BF16或BFLOAT16。大小写不敏感例如float32、Float32、FLOAT32在阅读参数表时表示同一含义编写代码时仍需以枚举aclDataType::ACL_FLOAT为准。按类别理解各数据类型从源码结构和算子文档的实际使用看可以按如下类别理解这些数据类型浮点类型ACL_FLOAT16、ACL_FLOAT、ACL_DOUBLE、ACL_BF16是算子文档中最常出现的一组。在互推导关系中仓库进一步给出了它们在推导表里的短标记ACL_FLOAT(f32)、ACL_FLOAT16(f16)、ACL_DOUBLE(f64)、ACL_BF16(bf16)便于按位宽快速辨识。整型与布尔类型ACL_INT8/INT16/INT32/INT64对应s8/s16/s32/s64、ACL_UINT8/UINT16/UINT32/UINT64对应u8/u16/u32/u64以及ACL_BOOL(bool)用于索引、掩码、计数、条件控制等场景。此外还有低位宽的ACL_INT4与ACL_UINT1可用于量化压缩场景。复数类型ACL_COMPLEX32(c32)、ACL_COMPLEX64(c64)、ACL_COMPLEX128(c128)分别对应 32 位、64 位、128 位复数数据。字符串类型ACL_STRING用于算子属性或输入为字符串的场景。新型浮点格式ACL_HIFLOAT8、ACL_FLOAT8_E5M2、ACL_FLOAT8_E4M3FN、ACL_FLOAT8_E8M0、ACL_FLOAT6_E3M2、ACL_FLOAT6_E2M3、ACL_FLOAT4_E2M1、ACL_FLOAT4_E1M2这类低精度浮点格式通常服务于训练加速与量化推理场景。简写形式在算子文档中的实际运用以仓库中 aclnnUpsampleNearest2d 的参数表为例其入参self与出参out标注的数据类型为FLOAT32、BFLOAT16、FLOAT16、DOUBLE、UINT8对照简写表即可还原为底层枚举ACL_FLOAT、ACL_BF16、ACL_FLOAT16、ACL_DOUBLE、ACL_UINT8。若在代码中把self创建为ACL_INT32类型的aclTensor第一段接口aclnnUpsampleNearest2dGetWorkspaceSize会返回ACLNN_ERR_PARAM_INVALID错误码 161002描述为“self 的数据类型不在支持的范围内或 self 与 out 数据类型不同”。同时注意该文档还标注了平台差异在 Atlas 推理系列产品、Atlas 训练系列产品上self与out不支持FLOAT32、BFLOAT16。这说明简写表给出的是接口层完整能力具体算子在特定硬件平台上的可用子集仍以该算子文档实际描述为准。代码落地用简写对应的枚举创建张量在仓库示例 test_aclnn_add_example.cpp 中CreateAclTensor模板函数展示了将数据类型枚举传入aclCreateTensor的完整流程template typename T int CreateAclTensor(const std::vectorT hostData, const std::vectorint64_t shape, void** deviceAddr, aclDataType dataType, aclTensor** tensor) { auto size GetShapeSize(shape) * sizeof(T); auto ret aclrtMalloc(deviceAddr, size, ACL_MEM_MALLOC_HUGE_FIRST); ... ret aclrtMemcpy(*deviceAddr, size, hostData.data(), size, ACL_MEMCPY_HOST_TO_DEVICE); ... // 计算连续tensor的strides std::vectorint64_t strides(shape.size(), 1); for (int64_t i shape.size() - 2; i 0; i--) { strides[i] shape[i 1] * strides[i 1]; } // 调用aclCreateTensor接口创建aclTensor *tensor aclCreateTensor(shape.data(), shape.size(), dataType, strides.data(), 0, aclFormat::ACL_FORMAT_ND, shape.data(), shape.size(), *deviceAddr); return 0; }main 函数中按简写表选择枚举进行调用ret CreateAclTensor(selfXHostData, selfXShape, selfXDeviceAddr, aclDataType::ACL_FLOAT, selfX);这里ACL_FLOAT即对应参数表中的FLOAT32。需要强调的是简写形式仅用于文档阅读与描述实际编码必须使用aclDataType枚举通常写作aclDataType::ACL_FLOAT或aclDataType类型的变量。与数据格式aclFormat的区分数据类型简写只描述数据内容的数值类型位宽、符号性、是否浮点与数据格式aclFormat描述 Tensor 各轴业务语义与物理排布如ND、NCHW、NHWC是两套独立体系。aclCreateTensor的入参同时包含二者数据类型参数dataType取值对应上文的aclDataType枚举如ACL_FLOAT数据格式参数format取值如aclFormat::ACL_FORMAT_ND。在阅读两段式接口参数表时“数据类型”一列使用本文的简写体系而“数据格式”一列则遵循“ACL_FORMAT_XXXX简写为XXXX”的规则详见数据格式。两者不可混用例如NCHW表示格式而非类型FLOAT32表示类型而非格式。实践建议与注意事项以算子文档的参数表为准同一数据类型在不同算子、不同硬件平台上的支持情况可能不同参考上文 UpsampleNearest2d 的平台差异说明简写表是“全集”算子文档是“子集约束”。输入输出类型需一致多数算子要求out与入参数据类型保持一致类型不匹配时第一段接口会直接校验报错错误码 161002。注意大小写不敏感但不代表可任意书写简写不区分大小写只影响文档阅读代码中请统一使用aclDataType枚举避免直接写字符串。新浮点格式按需查阅ACL_FLOAT8_*、ACL_FLOAT6_*、ACL_FLOAT4_*等低精度格式属于较新的能力若所用算子在参数表中明确列出才可在对应硬件上使用。需要了解完整的调用流程、编译与运行方式可进一步阅读基本概念索引下的两段式接口、数据结构以及编译与运行样例等文档。【免费下载链接】ops-cv本项目是CANN提供的图像处理、目标检测相关的算子库实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-cv创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考