昇腾社区首页
中文
注册

InitBuffer

功能说明

TPipe是用来管理全局内存的框架,用户可以调用TPipe中的InitBuffer接口为TQue/TBuf进行内存分配。

函数原型

  • 为TQue分配内存
    1
    2
    template <class T>
    __aicore__ inline bool InitBuffer(T& que, uint8_t num, uint32_t len)
    
  • 为TBuf分配内存
    1
    2
    template <TPosition bufPos>
    __aicore__ inline bool InitBuffer(TBuf<bufPos>& buf, uint32_t len)
    

参数说明

表1 bool InitBuffer(T& que, uint8_t num, uint32_t len) 原型定义参数说明

参数名称

输入/输出

含义

que

输入

需要分配内存的TQue对象

num

输入

分配内存块的个数。double buffer功能通过该参数开启:num设置为1,表示不开启double buffer;num设置为2,表示开启double buffer。一个kernel中所有的buffer num之和不能超过64。

len

输入

每个内存块的大小,单位为Bytes。当传入的len不满足32字节对齐时,API内部会自动向上补齐至32字节对齐,后续的数据搬运过程会涉及非对齐处理,具体内容请参考非对齐场景

表2 InitBuffer(TBuf<bufPos>& buf, uint32_t len)原型定义参数说明

参数名称

输入/输出

含义

buf

输入

需要分配内存的TBuf对象

len

输入

为TBuf分配的内存大小,单位为Bytes。当传入的len不满足32字节对齐时,API内部会自动向上补齐至32字节对齐,后续的数据搬运过程会涉及非对齐处理,具体内容请参考非对齐场景

支持的型号

Atlas 训练系列产品

Atlas 推理系列产品 AI Core

Atlas 推理系列产品 Vector Core

Atlas A2 训练系列产品/Atlas 800I A2 推理产品

Atlas 200I/500 A2 推理产品

约束说明

  • InitBuffer申请的内存会在Tpipe对象销毁时通过析构函数自动释放,无需手动释放。
  • 如果需要重新分配InitBuffer申请的内存,可以调用Reset,再调用InitBuffer接口。

返回值

返回Buffer初始化的结果。

调用示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
// 为TQue分配内存,分配内存块数为2,每块大小为128Bytes
AscendC::TPipe pipe; // Pipe内存管理对象
AscendC::TQue<AscendC::TPosition::VECOUT, 2> que; //输出数据Queue队列管理对象,TPosition为VECOUT
uint8_t num = 2;
uint32_t len = 128;
pipe.InitBuffer(que, num, len);
// 为TBuf分配内存,分配长度为128Bytes
AscendC::TPipe pipe;
AscendC::TBuf<AscendC::TPosition::A1> buf; //输出数据管理对象,TPosition为A1
uint32_t len = 128;
pipe.InitBuffer(buf, len);