CANN/asc-devkit TPipe内存初始化 InitBuffer【免费下载链接】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 推理产品支持Atlas 推理系列产品AI Core支持Atlas 推理系列产品Vector Core不支持Atlas 训练系列产品支持Kirin X90支持Kirin 9030支持功能说明头文件路径为basic_api/kernel_tpipe.h。用于为TQue等队列和TBuf分配内存。函数原型为TQue等队列分配内存template class T __aicore__ inline bool InitBuffer(T que, uint8_t num, uint32_t len) // 为TQue等队列分配内存且开发者可以自定义内存的地址信息地址信息包含起始地址和长度。 template class T, class U, class V, class... Addrs __aicore__ inline bool InitBuffer(T que, const Std::tupleU, V addr0, const Addrs... addrs)为TBuf分配内存template TPosition bufPos __aicore__ inline bool InitBuffer(TBufbufPos buf, uint32_t len)参数说明表1为TQue等队列分配内存的函数原型-模板参数说明参数名称含义T队列的类型支持取值TQue、TQueBind、TSCM。表2为TQue等队列分配内存的函数原型-接口参数说明参数名称输入/输出含义que输入需要分配内存的TQue等对象。num输入分配内存块的个数。double buffer功能通过该参数开启num设置为1表示不开启double buffernum设置为2表示开启double buffer。len输入每个内存块的大小单位为字节。当传入的len不满足32字节对齐时API内部会自动向上补齐至32字节对齐后续的数据搬运过程会涉及非对齐处理。表3自定义地址为TQue等队列分配内存的函数原型-模板参数说明参数名称含义T队列的类型支持取值TQue、TQueBind。U起始地址的类型。类型为整型。V长度的类型。类型为整型。Addrs...tuple形式的地址信息包含起始地址和长度。表4自定义地址为TQue等队列分配内存的函数原型-接口参数说明参数名称输入/输出含义que输入需要分配内存的TQue等对象。addr0输入分配内存块的地址信息结构为起始地址和长度。addrs输入格式为tuple的地址信息列表tuple内的元素个数须为2即起始地址和长度。表5为TBuf分配内存的函数原型-模板参数说明参数名称含义bufPosTBuf所在的逻辑位置TPosition类型。表6为TBuf分配内存的函数原型-接口参数说明参数名称输入/输出含义buf输入需要分配内存的TBuf对象。len输入为TBuf分配的内存大小单位为字节。当传入的len不满足32字节对齐时API内部会自动向上补齐至32字节对齐后续的数据搬运过程会涉及非对齐处理。约束说明InitBuffer申请的内存会在TPipe对象销毁时通过析构函数自动释放无需手动释放。如果需要重新分配InitBuffer申请的内存可以调用Reset再调用InitBuffer接口。一个kernel中所有使用的Buffer数量之和不能超过64。自定义地址InitBuffer方式分配不建议与不指定地址的混用可能会导致内存冲突。针对Ascend 950PR/Ascend 950DT对UB的内存分配会基于静态内存的基础上进行分配即动态内存初始位置参考内存层级。当前暂不支持与L1 Buffer, L0A Buffer, L0B Buffer, L0C Buffer, BiasTable静态数组混用。返回值说明返回Buffer初始化的结果。调用示例// 为TQue分配内存分配内存块数为2每块大小为128字节 AscendC::TPipe pipe; // Pipe内存管理对象 AscendC::TQueAscendC::TPosition::VECOUT, 2 que; // 输出数据队列管理对象TPosition为VECOUT uint8_t num 2; uint32_t len 128; pipe.InitBuffer(que, num, len); // 为TQue分配内存开发者自定义内存的地址信息分别为[0, 1024], [2048, 4096], [8192, 12288] AscendC::TPipe pipe; // Pipe内存管理对象 AscendC::TQueAscendC::TPosition::VECOUT, 1 que; // 输出数据队列管理对象TPosition为VECOUT auto addr0 Std::make_tuple(0, 1024); auto addr1 Std::make_tuple(2048, 2048); auto addr2 Std::make_tuple(8192, 4096); pipe.InitBuffer(que, addr0, addr1, addr2); // 为TBuf分配内存分配长度为128字节 AscendC::TPipe pipe; AscendC::TBufAscendC::TPosition::A1 buf; // 输出数据管理对象TPosition为A1 uint32_t len 128; pipe.InitBuffer(buf, len);【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考