asc.language.fwk.TPipe.init_buffer

TPipe.init_buffer(que: TQue, num: int = 0, len: int = 0) None
TPipe.init_buffer(buf: TBuf, num: int = 0) None

用于为TQue等队列和TBuf分配内存。

对应的Ascend C函数原型

template <class T>
__aicore__ inline bool InitBuffer(T& que, uint8_t num, uint32_t len)
template <TPosition bufPos>
__aicore__ inline bool InitBuffer(TBuf<bufPos>& buf, uint32_t len)

参数说明

  • que:需要分配内存的TQue等对象。

  • num:分配内存块的个数。double buffer功能通过该参数开启:num设置为1,表示不开启double buffer;num设置为2,表示开启double buffer。

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

  • buf:需要分配内存的TBuf对象。

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

约束说明

  • init_buffer申请的内存会在TPipe对象销毁时通过析构函数自动释放,无需手动释放。

  • 如果需要重新分配init_buffer申请的内存,可以调用reset,再调用init_buffer接口。

  • 一个kernel中所有使用的Buffer数量之和不能超过64。

调用示例

# 为TQue分配内存,分配内存块数为2,每块大小为128字节
pipe = asc.Tpipe()
que = asc.TQue(asc.TPosition.VECOUT, 2)
num = 2
len = 128
pipe.init_buffer(que=que, num=num, len=len)
# 为TBuf分配内存,分配长度为128字节
pipe = asc.Tpipe()
buf = asc.TBuf(asc.TPosition.A1)
len = 128
pipe.init_buffer(buf=buf, num=len)