SPM Buffer
功能介绍
SPM Buffer功能支持对Unified Buffer的暂存操作,当Unified Buffer内存有溢出风险时,可以将Unified Buffer的数据先拷贝到SPM(Spill Memory) Buffer暂存,具体使用时再取回。
使用方法如下:
针对Atlas A2训练系列产品/Atlas 800I A2推理产品,仅支持暂存到workspace。
针对Atlas 训练系列产品、Atlas 推理系列产品,可以暂存到workspace或者L1 Buffer。
使用样例
- 初始化操作。
- 暂存到workspace初始化
AscendC::TPipe pipe; int len = 1024; AscendC::GlobalTensor<half> workspace_gm; auto usrWorkspace = AscendC::GetUserWorkspace(workspace); // 此处的usrWorkspace为用户自定义的workspace,类型为half,有len个元素 workspace_gm.SetGlobalBuffer((__gm__ half *)usrWorkspace, len); auto gm = workspace_gm[AscendC::GetBlockIdx() * len]; pipe.InitSpmBuffer(gm, len * sizeof(half));
- 暂存到L1 Buffer初始化
TPipe pipe; int len = 1024; // 设置spm buffer为1024个类型为T的数据 pipe.InitSpmBuffer(len * sizeof(T));
- 暂存到workspace初始化
- 暂存和取回操作。
TQue<QuePosition::VECIN, 1> inQueueSrcVecIn; int dataSize = 32; // 假设T为half类型,从ub上申请一块内存32 * sizeof(half)字节 int offset = 32; // 拷贝到spmBuffer时偏移32字节 pipe.InitBuffer(inQueueSrcVecIn, 1, dataSize); LocalTensor<half> writeLocal = inQueueSrcVecIn.AllocTensor<half>(); DataCopyParams copyParams{1, 2, 0, 0}; // 从ub上搬运一块长度为2个datablock的数据,一个datablock32byte pipe.WriteSpmBuffer(writeLocal, copyParams, offset); pipe.ReadSpmBuffer(writeLocal, copyParams, offset);
使用约束
无
父主题: 内存管理