文档
注册

SPM Buffer

功能介绍

SPM Buffer功能支持对Unified Buffer的暂存操作,当Unified Buffer内存有溢出风险时,可以将Unified Buffer的数据先拷贝到SPM(Spill Memory) Buffer暂存,具体使用时再取回。

使用方法如下:

  1. 调用InitSpmBuffer接口完成初始化操作。
  2. 调用WriteSpmBuffer接口完成数据的拷贝暂存操作。
  3. 需要使用暂存的数据时,调用ReadSpmBuffer接口完成数据的取回操作。

针对Atlas A2训练系列产品/Atlas 800I A2推理产品,仅支持暂存到workspace。

针对Atlas 训练系列产品Atlas 推理系列产品(Ascend 310P处理器),可以暂存到workspace或者L1 Buffer

使用样例

  1. 初始化操作。
    • 暂存到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));
  2. 暂存和取回操作。
    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个block的数据,一个block32byte
    pipe.WriteSpmBuffer(writeLocal, copyParams, offset);
    pipe.ReadSpmBuffer(writeLocal, copyParams, offset);

使用约束

搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词