EXTERN_IMPL_BUFPOOL宏【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品 / Atlas A3 推理系列产品√Atlas A2 训练系列产品 / Atlas A2 推理系列产品√Atlas 200I/500 A2 推理产品xAtlas 推理系列产品 AI Core√Atlas 推理系列产品 Vector CorexAtlas 训练系列产品√Kirin X90√Kirin 9030√功能说明开发者可以通过TBufPool类手动管理Unified Buffer、L1 Buffer物理内存。TBufPool类切分的内存块都是连续的开发者可能有一些自定义的内存块分配需求比如不连续内存块、内存块在不同TQue之间共享等这时就需要开发者自定义一个TBufPool的实现。为了简化开发者的自定义实现提供EXTERN_IMPL_BUFPOOL宏来辅助用户自定义TBufPool。使用自定义TBufPool功能时需要注意自定义TBufPool之前必须通过TPipe::InitBufPool接口进行TBufPool内存资源池初始化。自定义TBufPool需要开发者自行实现对TQue/TBuf内存块的分配、初始化、释放等操作。EXTERN_IMPL_BUFPOOL宏内部定义的函数Reset、Init、GetBufHandle、SetCurAddr、GetCurAddr、SetCurBufSize、GetCurBufSize接口参见后续章节描述。使用该宏后即可使用上述接口完成自定义TBufPool功能。[!NOTE]说明 自定义TBufPool相关接口为试验接口在后续版本中可能会调整或改进不保证后续兼容性。请开发者在使用过程中关注后续版本更新。函数原型// 省略宏定义具体内容 #define EXTERN_IMPL_BUFPOOL(EXT_BUFPOOL, POSITION, BUFID_SIZE) ...参数说明表 1EXTERN_IMPL_BUFPOOL宏原型定义参数说明参数名称输入/输出含义EXT_BUFPOOL输入自定义TBufPool类名。POSITION输入自定义TBufPool逻辑位置可以为VECIN、VECOUT、VECCALC、A1、B1、C1。关于TPosition的具体介绍请参考TPosition。BUFID_SIZE输入自定义TBufPool分配的Buffer块数量建议不超过16。约束说明无返回值说明无调用示例详细示例请参考tbufpool_management样例。如下示例中为tbufPool0划分65536 * 3大小的内存然后自定义MyBufPool的InitBuffer函数实现TQue和Tbuf的内存分配。#include kernel_operator.h class MyBufPool { public: __aicore__ inline MyBufPool() { Init(); } templateclass T __aicore__ inline bool InitBuffer(T que, uint8_t num, uint32_t len) { } templateAscendC::TPosition bufPos __aicore__ inline bool InitBuffer(AscendC::TBufbufPos buf, uint32_t len) { } // MyBufPool自定义TBufPool类名。自定义TBufPool逻辑位置选择VECCALC。 // 自定义TBufPool分配的Buffer块数量为16 EXTERN_IMPL_BUFPOOL(MyBufPool, AscendC::TPosition::VECCALC, 16); };【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考