尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

CANN opbase aclGetIntArraySize 接口详解:aclIntArray 大小获取与生命周期管理

发布时间:2026/9/18 19:07:34

资讯中心
01
ARTICLE

CANN opbase aclGetIntArraySize 接口详解:aclIntArray 大小获取与生命周期管理

CANN opbase aclGetIntArraySize 接口详解:aclIntArray 大小获取与生命周期管理
CANN opbase aclGetIntArraySize 接口详解aclIntArray 大小获取与生命周期管理【免费下载链接】opbase本项目是CANN算子库的基础框架库为算子提供公共依赖文件和基础调度能力。项目地址: https://gitcode.com/cann/opbase导读aclGetIntArraySize是 CANN 算子库基础框架 opbase 中 aclnn 公共接口meta API的一员用于获取由 aclCreateIntArray 创建的aclIntArray整型数组的元素个数。本文以该接口为核心结合其姊妹接口创建、销毁与仓库源码实现讲解 aclnn 整型数组对象的完整使用链路——从创建、查询到销毁——并给出可直接复用的调用模式与异常处理要点。阅读完本文你将掌握aclIntArray在单算子 APIaclnn调用中的正确用法理解其底层存储结构与空指针校验逻辑并能结合仓库单测用例验证接口行为。接口概览功能、原型与参数aclIntArray是 opbase 框架定义的一种用于管理和存储整型数据的数组结构主要作为单算子 API 执行接口形如aclxxXxx、aclxxXxxGetWorkspaceSize的入参使用例如用于传递算子的 shape、axes、dims 等整型参数集合。开发者无需关注其内部实现直接通过公共接口使用即可。函数原型aclnnStatus aclGetIntArraySize(const aclIntArray *array, uint64_t *size)该接口声明位于 include/nnopbase/aclnn/acl_meta.h属于对外导出的公共接口ACL_FUNC_VISIBILITY修饰其实际实现在 src/nnopbase/common/api/acl_op_api.cpp。参数说明参数名输入/输出说明array输入输入的 aclIntArray即通过aclCreateIntArray创建的对象。size输出输出参数返回 aclIntArray 中整型元素的个数大小。两个参数均不可为空array若为空指针则无对象可取size若为空指针则结果无处可写二者任一为空都会触发参数校验失败。返回值与错误码分析接口返回aclnnStatus类型状态码返回0ACLNN_SUCCESS表示成功size中即为获取到的数组大小。返回其他值表示失败常见失败原因为返回 161001参数array或size为空指针。161001 对应公共返回码ACLNN_ERR_PARAM_NULLPTR参数校验错误参数中存在非法的 nullptr完整返回码列表参见公共接口返回码。源码级校验逻辑在 src/nnopbase/common/api/acl_op_api.cpp 中实现非常直观aclnnStatus aclGetIntArraySize(const aclIntArray* array, uint64_t* size) { if (array nullptr || size nullptr) { return ACLNN_ERR_PARAM_NULLPTR; } *size array-Size(); return OK; }从源码可以看出两点实现事实先校验、后取值入口处对两个指针同时做空指针检查任一为空立即返回ACLNN_ERR_PARAM_NULLPTR161001这与文档中返回 161001的说明完全一致且不会发生空指针解引用。大小即元素个数size的取值来自array-Size()返回的是数组内 int64 元素的数量而非字节数。例如创建时传入{1, 1, 2, 3}四个元素查询得到的 size 即为 4。配套接口完整的 aclIntArray 生命周期aclGetIntArraySize单独使用没有意义它必须与aclCreateIntArray、aclDestroyIntArray配合构成创建 → 使用/查询 → 销毁的完整生命周期。三个接口的原型声明集中定义在 include/nnopbase/aclnn/acl_meta.h。创建aclCreateIntArrayaclIntArray *aclCreateIntArray(const int64_t *value, uint64_t size)valueHost 侧的int64_t类型指针其指向的数据会被拷贝给 aclIntArray因此创建后原数组可安全复用或释放size整型数组的长度取值为正整数。成功返回创建好的aclIntArray失败返回nullptr。其实现位于 src/nnopbase/common/api/acl_op_api.cpp通过new aclIntArray(value, size)构造对象若构造过程抛出异常则记录ACLNN_ERR_INNER错误并释放已分配内存后返回空指针。销毁aclDestroyIntArrayaclnnStatus aclDestroyIntArray(const aclIntArray *array)成功返回0失败返回其他值返回码列表参见公共接口返回码。实现上对空指针做了防御若array为nullptr直接返回成功见 src/nnopbase/common/api/acl_op_api.cpp避免重复销毁空对象。当开启 aclnn 调试op::internal::IsAclnnDebugEnabled()时销毁前会调用CheckDoubleFree检测双重释放double-free命中则打印告警日志Possible double-free at addr %p.。这说明框架在调试模式下主动帮助开发者发现悬垂指针/二次释放问题生产代码中仍需自行保证一创一销、不重复销毁。重要约束aclCreateIntArray与aclDestroyIntArray必须配套使用分别完成 aclIntArray 的创建与销毁调用aclGetIntArraySize可以获取该数组的大小详见 aclCreateIntArray 与 aclDestroyIntArray 的约束说明。调用示例完整可运行的调用模式以下关键代码示例仅供参考演示 aclIntArray 从创建到查询再到销毁的完整链路注意其中...处需按实际场景补充如将valueArray作为单算子 API 入参// 1. 创建 aclIntArray数据被拷贝进对象内部 std::vectorint64_t valueData {1, 1, 2, 3}; aclIntArray *valueArray aclCreateIntArray(valueData.data(), valueData.size()); if (valueArray nullptr) { // 创建失败处理异常例如返回错误码或记录日志 return ACLNN_ERR_INNER; } // 2. 使用 aclGetIntArraySize 接口获取 valueArray 的大小 uint64_t size 0; auto ret aclGetIntArraySize(valueArray, size); // 获取到的 valueArray 的 size 为 4 if (ret ! 0) { // 返回 161001 表示 array 或 size 为空指针需检查入参 return ret; } // 3. valueArray 可作为单算子 API 执行接口的入参例如 // auto ret aclxxXxxGetWorkspaceSize(srcTensor, valueArray, ..., outTensor, ..., // workspaceSize, executor); // ret aclxxXxx(...); // 4. 销毁 aclIntArray与创建配套使用避免重复销毁 ret aclDestroyIntArray(valueArray); if (ret ! 0) { // 处理销毁失败 }示例要点总结创建后立即判空aclCreateIntArray可能返回nullptr使用前必须检查size 先清零再接收查询前将size初始化为 0防止误用未初始化值返回值逐段检查aclGetIntArraySize与aclDestroyIntArray均需检查返回码其中 161001ACLNN_ERR_PARAM_NULLPTR是aclGetIntArraySize最常见失败原因生命周期对称创建、销毁严格配对销毁后不再访问valueArray。单元测试验证接口行为可被仓库用例复现opbase 仓库在 tests/nnopbase/ut/composite_op/test_acl_op_api.cpp 中提供了针对该接口的单元测试AclOpApiTest.aclGetIntArraySize完整复现了本文描述的三种行为TEST_F(AclOpApiTest, aclGetIntArraySize) { EXPECT_NE(aclGetIntArraySize(nullptr, nullptr), OK); // 空指针入参 → 返回非 OK161001 int64_t values[] {3, 4, 5}; auto* value aclCreateIntArray(values, sizeof(values) / sizeof(values[0])); uint64_t size 0; EXPECT_EQ(aclGetIntArraySize(value, size), OK); // 正常查询 → OK EXPECT_EQ(size, 3); // 元素个数为 3 EXPECT_EQ(aclDestroyIntArray(value), OK); // 销毁 → OK }该用例验证了三项关键行为可作为开发者自行验证接口时的参照空指针防御aclGetIntArraySize(nullptr, nullptr)返回非OK对应错误码 161001大小语义正确创建{3, 4, 5}三个元素后查询size为3确认返回的是元素个数而非字节数全链路可销毁查询后调用aclDestroyIntArray返回OK完成生命周期闭环。与其他数组类公共接口的关系aclGetIntArraySize并非孤立接口。在 opbase 的 aclnn 公共接口族0_aclnn_meta_api.md中还存在语义完全对称的一组创建/销毁/查大小接口实现均集中在 src/nnopbase/common/api/acl_op_api.cpp包括数据类型创建接口销毁接口查询大小接口整型数组aclCreateIntArrayaclDestroyIntArrayaclGetIntArraySize浮点数组aclCreateFloatArrayaclDestroyFloatArrayaclGetFloatArraySize布尔数组aclCreateBoolArrayaclDestroyBoolArrayaclGetBoolArraySizeTensor 列表aclCreateTensorListaclDestroyTensorListaclGetTensorListSizeScalar 列表aclCreateScalarListaclDestroyScalarListaclGetScalarListSize这些接口遵循完全相同的设计范式创建接口返回对象指针、销毁接口防御空指针、查询大小接口校验空指针后返回Size()。其中aclGetFloatArraySize、aclGetBoolArraySize等的实现与aclGetIntArraySize逐行同构见 src/nnopbase/common/api/acl_op_api.cpp单元测试也采用了相同的断言结构tests/nnopbase/ut/composite_op/test_acl_op_api.cpp。掌握了本文的aclGetIntArraySize即可举一反三掌握整个 aclnn 数组类公共接口族。常见问题与使用建议Q1为什么查询到的 size 与我创建时传入的 size 不一致aclGetIntArraySize返回的是aclCreateIntArray创建时拷贝进对象内部的元素个数。只要创建时size参数正确正整数且对象未被意外修改查询结果必然等于创建时的元素个数。若发现不一致请检查是否在创建后误用了该指针如二次创建覆盖、提前销毁后再查询。Q2查询接口在什么场景下会返回 161001当array或size任一为空指针时返回ACLNN_ERR_PARAM_NULLPTR161001。典型场景包括创建失败后未判空直接传入、size地址未正确传递如传入nullptr。建议在调用前对array判空并确保size指向有效的栈上变量。Q3aclIntArray 需要手动释放内存吗需要。aclIntArray由aclCreateIntArray在 Host 侧堆上创建必须由aclDestroyIntArray配套销毁否则会造成内存泄漏。销毁后不要再访问该指针避免产生悬垂指针。Q4如何排查双重释放问题框架已在销毁路径内置调试检测CheckDoubleFree开启 aclnn 调试时若触发二次释放会打印Possible double-free at addr %p.告警。开发阶段建议开启该调试能力辅助定位同时从代码规范上保证每个aclCreateIntArray仅对应一次aclDestroyIntArray。【免费下载链接】opbase本项目是CANN算子库的基础框架库为算子提供公共依赖文件和基础调度能力。项目地址: https://gitcode.com/cann/opbase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。