TPipe是用来管理全局内存的框架,用户可以调用TPipe中的InitBuffer接口为TQue等内存队列和TBuf进行内存分配。
1 2 |
template <class T> __aicore__ inline bool InitBuffer(T& que, uint8_t num, uint32_t len) |
1 2 |
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。一个kernel中所有的buffer num之和不能超过64。 |
len |
输入 |
每个内存块的大小,单位为Bytes。当传入的len不满足32字节对齐时,API内部会自动向上补齐至32字节对齐,后续的数据搬运过程会涉及非对齐处理,具体内容请参考非对齐场景。 |
参数名称 |
含义 |
---|---|
bufPos |
TBuf所在的逻辑位置,TPosition类型。 |
参数名称 |
输入/输出 |
含义 |
---|---|---|
buf |
输入 |
需要分配内存的TBuf对象 |
len |
输入 |
为TBuf分配的内存大小,单位为Bytes。当传入的len不满足32字节对齐时,API内部会自动向上补齐至32字节对齐,后续的数据搬运过程会涉及非对齐处理,具体内容请参考非对齐场景。 |
返回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); |