EXTERN_IMPL_BUFPOOL宏
产品支持情况
- 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"。
开发者可以通过TBufPool类手动管理Unified Buffer、L1 Buffer物理内存。
TBufPool类切分的内存块都是连续的,开发者可能有一些自定义的内存块分配需求,比如不连续内存块、内存块在不同TQue之间共享等,这时就需要开发者自定义一个TBufPool的实现。
为了简化开发者的自定义实现,提供EXTERN_IMPL_BUFPOOL宏来辅助用户自定义TBufPool。使用自定义TBufPool功能时,需要注意:
- 自定义TBufPool之前,必须通过TPipe::InitBufPool接口进行TBufPool内存资源池初始化。
- 自定义TBufPool需要开发者自行实现对TQue/TBuf内存块的分配、初始化、释放等操作。
EXTERN_IMPL_BUFPOOL宏内部定义的函数Reset、Init、GetBufHandle、SetCurAddr、GetCurAddr、SetCurBufSize、GetCurBufSize接口参见后续章节描述。使用该宏后,即可使用上述接口完成自定义TBufPool功能。
说明
自定义TBufPool相关接口为试验接口,在后续版本中可能会调整或改进,不保证后续兼容性。请开发者在使用过程中关注后续版本更新。
函数原型
// 省略宏定义具体内容
#define EXTERN_IMPL_BUFPOOL(EXT_BUFPOOL, POSITION, BUFID_SIZE) ...
参数说明
表1 EXTERN_IMPL_BUFPOOL宏原型定义参数说明
参数名称 | 输入/输出 | 含义 |
|---|---|---|
EXT_BUFPOOL | 输入 | 自定义TBufPool类名。 |
POSITION | 输入 | 自定义TBufPool逻辑位置,可以为VECIN、VECOUT、VECCALC、A1、B1、C1。关于TPosition的具体介绍请参考TPosition。 |
BUFID_SIZE | 输入 | 自定义TBufPool分配的Buffer块数量,建议不超过16。 |
约束说明
无
返回值说明
无
调用示例
详细示例请参考tbufpool_management样例。
如下示例中,为tbufPool0划分65536 * 3大小的内存,然后自定义MyBufPool的InitBuffer函数,实现TQue和Tbuf的内存分配。
#include "kernel_operator.h"
class MyBufPool {
public:
__aicore__ inline MyBufPool() {
Init();
}
template<class T>
__aicore__ inline bool InitBuffer(T& que, uint8_t num, uint32_t len) {
}
template<AscendC::TPosition bufPos>
__aicore__ inline bool InitBuffer(AscendC::TBuf<bufPos>& buf, uint32_t len) {
}
// MyBufPool,自定义TBufPool类名。自定义TBufPool逻辑位置选择VECCALC。
// 自定义TBufPool分配的Buffer块数量为16
EXTERN_IMPL_BUFPOOL(MyBufPool, AscendC::TPosition::VECCALC, 16);
};