InitBuffer产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品 / Atlas A3 推理系列产品√Atlas A2 训练系列产品 / Atlas A2 推理系列产品√Atlas 200I/500 A2 推理产品√Atlas 推理系列产品 AI Core√Atlas 推理系列产品 Vector CorexAtlas 训练系列产品√Kirin X90√Kirin 9030√功能说明用于为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)参数说明表 1bool InitBuffer(T que, uint8_t num, uint32_t len) 原型定义模板参数说明参数名称含义T队列的类型支持取值TQue、TQueBind、TSCM。表 2bool InitBuffer(T que, uint8_t num, uint32_t len) 原型定义参数说明参数名称输入/输出含义que输入需要分配内存的TQue等对象。num输入分配内存块的个数。double buffer功能通过该参数开启num设置为1表示不开启double buffernum设置为2表示开启double buffer。len输入每个内存块的大小单位为字节。当传入的len不满足32字节对齐时API内部会自动向上补齐至32字节对齐后续的数据搬运过程会涉及非对齐处理。表 3bool InitBuffer(T que, const Std::tupleU, V addr0, const Addrs... addrs) 原型定义模板参数说明参数名称含义T队列的类型支持取值TQue、TQueBind。U起始地址的类型。类型为整型。V长度的类型。类型为整型。Addrs...tuple形式的地址信息包含起始地址和长度。表 4bool InitBuffer(T que, const Std::tupleU, V addr0, const Addrs... addrs) 原型定义参数说明参数名称输入/输出含义que输入需要分配内存的TQue等对象。addr0输入分配内存块的地址信息结构为起始地址和长度。addrs输入格式为tuple的地址信息列表tuple内的元素个数须为2即起始地址和长度。表 5InitBuffer(TBufbufPos buf, uint32_t len)原型定义模板参数说明参数名称含义bufPosTBuf所在的逻辑位置TPosition类型。表 6InitBuffer(TBufbufPos buf, uint32_t len)原型定义参数说明参数名称输入/输出含义buf输入需要分配内存的TBuf对象。len输入为TBuf分配的内存大小单位为字节。当传入的len不满足32字节对齐时API内部会自动向上补齐至32字节对齐后续的数据搬运过程会涉及非对齐处理。约束说明InitBuffer申请的内存会在TPipe对象销毁时通过析构函数自动释放无需手动释放。如果需要重新分配InitBuffer申请的内存可以调用Reset再调用InitBuffer接口。一个kernel中所有使用的Buffer数量之和不能超过64。自定义地址InitBuffer方式分配不建议与不指定地址的混用可能会导致内存冲突。返回值说明返回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);创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
昇腾C开发套件TPipe内存初始化
InitBuffer产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品 / Atlas A3 推理系列产品√Atlas A2 训练系列产品 / Atlas A2 推理系列产品√Atlas 200I/500 A2 推理产品√Atlas 推理系列产品 AI Core√Atlas 推理系列产品 Vector CorexAtlas 训练系列产品√Kirin X90√Kirin 9030√功能说明用于为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)参数说明表 1bool InitBuffer(T que, uint8_t num, uint32_t len) 原型定义模板参数说明参数名称含义T队列的类型支持取值TQue、TQueBind、TSCM。表 2bool InitBuffer(T que, uint8_t num, uint32_t len) 原型定义参数说明参数名称输入/输出含义que输入需要分配内存的TQue等对象。num输入分配内存块的个数。double buffer功能通过该参数开启num设置为1表示不开启double buffernum设置为2表示开启double buffer。len输入每个内存块的大小单位为字节。当传入的len不满足32字节对齐时API内部会自动向上补齐至32字节对齐后续的数据搬运过程会涉及非对齐处理。表 3bool InitBuffer(T que, const Std::tupleU, V addr0, const Addrs... addrs) 原型定义模板参数说明参数名称含义T队列的类型支持取值TQue、TQueBind。U起始地址的类型。类型为整型。V长度的类型。类型为整型。Addrs...tuple形式的地址信息包含起始地址和长度。表 4bool InitBuffer(T que, const Std::tupleU, V addr0, const Addrs... addrs) 原型定义参数说明参数名称输入/输出含义que输入需要分配内存的TQue等对象。addr0输入分配内存块的地址信息结构为起始地址和长度。addrs输入格式为tuple的地址信息列表tuple内的元素个数须为2即起始地址和长度。表 5InitBuffer(TBufbufPos buf, uint32_t len)原型定义模板参数说明参数名称含义bufPosTBuf所在的逻辑位置TPosition类型。表 6InitBuffer(TBufbufPos buf, uint32_t len)原型定义参数说明参数名称输入/输出含义buf输入需要分配内存的TBuf对象。len输入为TBuf分配的内存大小单位为字节。当传入的len不满足32字节对齐时API内部会自动向上补齐至32字节对齐后续的数据搬运过程会涉及非对齐处理。约束说明InitBuffer申请的内存会在TPipe对象销毁时通过析构函数自动释放无需手动释放。如果需要重新分配InitBuffer申请的内存可以调用Reset再调用InitBuffer接口。一个kernel中所有使用的Buffer数量之和不能超过64。自定义地址InitBuffer方式分配不建议与不指定地址的混用可能会导致内存冲突。返回值说明返回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);创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考