Skip to content

Init

产品支持情况

Tiling参数传入栈地址的接口

  • 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:支持

Tiling参数传入GM地址的接口

  • 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:支持

功能说明

Init主要用于对Matmul对象中的Tiling数据进行初始化,根据Tiling参数进行资源划分,Tiling参数的具体介绍请参考Matmul Tiling侧接口

开发者可以先通过REGIST_MATMUL_OBJ不传入Tiling参数对单个Matmul对象进行初始化,后续通过Init接口单独传入Tiling参数,对Matmul对象中的Tiling数据进行调整。比如,Tiling参数可变的场景下,可以通过多次调用Init来重新设置Tiling参数。

不需要Tiling变更的场景下,推荐使用REGIST_MATMUL_OBJ传入Tiling参数进行初始化。

函数原型

  • Tiling参数传入栈地址

    Text
    __aicore__ inline void Init(const TCubeTiling* __restrict cubeTiling, TPipe* tpipe = nullptr)
    
  • Tiling参数传入GM地址

    Text
    __aicore__ inline void Init(const __gm__ TCubeTiling* gmCubeTiling, TPipe* tpipe = nullptr)
    

参数说明

表1 Tiling参数传入栈地址接口参数说明

参数名输入/输出描述
cubeTiling输入Matmul Tiling参数,TCubeTiling结构体定义请参见表1 TCubeTiling结构说明

Tiling参数可以通过host侧GetTiling接口获取,并传递到kernel侧使用。在kernel侧调用GET_TILING_DATA实现将Tiling参数搬运到AI Core内的栈空间中,本接口传入Tiling参数中TCubeTiling结构体的栈地址。
tpipe输入Tpipe对象。

表2 Tiling参数传入GM地址接口参数说明

参数名输入/输出描述
gmCubeTiling输入Matmul Tiling参数,该参数指向gm上的一块内存地址,其中的数据类型是TCubeTiling结构体,TCubeTiling结构体定义请参见表1 TCubeTiling结构说明

Tiling参数可以通过host侧GetTiling接口获取,并传递到kernel侧使用。在kernel侧调用GET_TILING_DATA_PTR_WITH_STRUCT获取gm上Tiling参数的指针,本接口传入Tiling参数中TCubeTiling结构体的GM地址。
tpipe输入Tpipe对象。

返回值说明

约束说明

  • Tiling参数传入栈地址的接口:

  • Tiling参数传入GM地址的接口:

    • 仅支持Matmul Tiling参数的部分常量化场景。
    • 不支持CPU域调试。

调用示例

  • Tiling参数传入栈地址

    Text
    GET_TILING_DATA(tilingData, tiling);
    // ...
    REGIST_MATMUL_OBJ(&pipe, GetSysWorkSpacePtr(), mm);
    mm.Init(&(tiling.cubeTilingData));
    
  • Tiling参数传入GM地址

    • 纯Cube模式

      Text
      #define ASCENDC_CUBE_ONLY
      
      GET_TILING_DATA_PTR_WITH_STRUCT(MatmulCustomTilingData, tilingDataPtr, tiling);
      KERNEL_TASK_TYPE_DEFAULT(KERNEL_TYPE_AIC_ONLY);
      // ...
      REGIST_MATMUL_OBJ(&pipe, GetSysWorkSpacePtr(), mm);
      mm.Init(&(tilingDataPtr->cubeTilingData));
      
    • MIX模式

      Text
      GET_TILING_DATA_PTR_WITH_STRUCT(MatmulCustomTilingData, tilingDataPtr, tiling);
      KERNEL_TASK_TYPE_DEFAULT(KERNEL_TYPE_MIX_AIC_1_2);
      // ...
      // MIX模式下,只调用REGIST_MATMUL_OBJ接口,传入Tiling参数的GM地址,不需调用Init接口
      REGIST_MATMUL_OBJ(&pipe, GetSysWorkSpacePtr(), mm, &(tilingDataPtr->cubeTilingData));
      

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