Skip to content

InitSpmBuffer

产品支持情况

  • 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"

初始化SPM Buffer。SPM Buffer是一块在GM上的空间,当UB空间不足时可以将溢出数据存放在SPM Buffer上。

函数原型

  • 暂存到workspace初始化,需要指定GM地址为SPM Buffer:

    C++
    template <typename T>
    __aicore__ inline void InitSpmBuffer(const GlobalTensor<T>& workspace, const int32_t bufferSize)
    
  • 暂存到L1 Buffer初始化,不需要指定地址,会默认暂存到L1 Buffer,只需要传入需要的SPM Buffer大小:

    C++
    __aicore__ inline void InitSpmBuffer(const int32_t bufferSize)
    

    Ascend 950PR/Ascend 950DT,不支持暂存到L1 Buffer初始化接口。

    Atlas A3 训练系列产品/Atlas A3 推理系列产品,不支持暂存到L1 Buffer初始化接口。

    Atlas A2 训练系列产品/Atlas A2 推理系列产品,不支持暂存到L1 Buffer初始化接口。

参数说明

表1 模板参数说明

参数名称含义
T待获取Tensor的数据类型,支持的类型请见LocalTensor相关描述。

表2 接口参数说明

参数名

输入/输出

含义

workspace

输入

workspace地址。

bufferSize

输入

SPM Buffer的大小,单位是字节。

约束说明

SPM Buffer供解决UB空间不足的特殊场景使用,性能较差,一般不推荐使用。

返回值说明

调用示例

  • 暂存到workspace初始化

    C++
    AscendC::TPipe pipe;
    int len = 1024; // 设置spm buffer为1024个类型为T的数据
    workspace_gm.SetGlobalBuffer((__gm__ T *)usrWorkspace, len);  // 此处的usrWorkspace为用户自定义的workspace
    auto gm = workspace_gm[AscendC::GetBlockIdx() * len];
    pipe.InitSpmBuffer(gm, len * sizeof(T));
    
  • 暂存到L1 Buffer初始化

    C++
    AscendC::TPipe pipe;
    int len = 1024; // 设置spm buffer为1024个类型为T的数据
    pipe.InitSpmBuffer(len * sizeof(T));
    

免责声明:本站内容由 asc-devkit 仓 master 分支自动编译生成,属于持续开发版本,可能存在缺陷,仅供预览与参考。如需稳定及商用资料,请查阅官方 昇腾社区