Skip to content

Matmul模板参数

产品支持情况

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

功能说明

创建Matmul对象时需要传入:

  • A、B、C、Bias的参数类型信息,类型信息通过MatmulType来定义,包括:内存逻辑位置、数据格式、数据类型、是否转置、数据排布和是否开启L1复用。

  • MatmulConfig信息(可选),用于配置Matmul模板信息以及相关的配置参数。不配置默认使用Norm模板。

    针对Atlas 200I/500 A2 推理产品,当前只支持使用默认的Norm模板。

  • MatmulCallBackFunc回调函数信息(可选),用于配置A矩阵从GM拷贝到L1 Buffer(A1)、B矩阵从GM拷贝到L1 Buffer(B1)、计算结果从L0C Buffer(CO1)拷贝到GM的自定义函数。当前支持如下产品型号:

    Ascend 950PR/Ascend 950DT

    Atlas A3 训练系列产品/Atlas A3 推理系列产品

    Atlas A2 训练系列产品/Atlas A2 推理系列产品

    Kirin X90

  • MatmulPolicy信息(可选),用于配置Matmul可拓展模块策略。不配置使用默认模板策略。当前支持如下产品型号:

    Ascend 950PR/Ascend 950DT

    Atlas A3 训练系列产品/Atlas A3 推理系列产品

    Atlas A2 训练系列产品/Atlas A2 推理系列产品

    Atlas 200I/500 A2 推理产品

    Atlas 推理系列产品AI Core

    Kirin X90

函数原型

Matmul模板参数如下:

Text
template <class A_TYPE, class B_TYPE, class C_TYPE, class BIAS_TYPE = C_TYPE, const auto& MM_CFG = CFG_NORM, class MM_CB = MatmulCallBackFunc<nullptr, nullptr, nullptr>, MATMUL_POLICY_DEFAULT_OF(MatmulPolicy)>
  • A_TYPE、B_TYPE、C_TYPE类型信息通过MatmulType来定义。

  • auto类型的参数MM_CFG(可选):

    • 支持MatmulConfig类型:

      Matmul模板信息,具体内容见MatmulConfig

    • 支持MatmulApiStaticTiling类型:

      MatmulApiStaticTiling参数说明见表1

      MatmulApiStaticTiling结构体中包括一组常量化Tiling参数和MatmulConfig结构。这种类型参数的定义方式为,通过调用MatmulConfig章节中介绍的获取模板的接口,指定(singleM, singleN, singleK, baseM, baseN, baseK)参数,获取自定义模板;将该模板传入GetMatmulApiTiling接口,得到常量化的参数。这种常量化的方式将得到MatmulApiStaticTiling结构体中定义的一组常量化参数,可以优化Matmul计算中的Scalar计算。当前支持定义为MatmulApiStaticTiling常量化的Tiling参数的模板有:Norm、IBShare、MDL模板。MxMatmul场景支持定义为MatmulApiStaticTiling常量化的Tiling参数的模板有:Norm、MDL模板。

  • MM_CB(可选),用于支持不同的搬入搬出需求,实现定制化的搬入搬出功能。具体内容见MatmulCallBackFunc

  • MATMUL_POLICY_DEFAULT_OF(MatmulPolicy)(可选),用于配置Matmul可拓展模块的策略。当前支持不配置该参数(使用默认模板策略)或者配置1个MatmulPolicy参数。

    MATMUL_POLICY_DEFAULT_OF定义如下,用于简化MATMUL_POLICY的类型声明。该模板参数的详细使用方式请参考MatmulPolicy

    Text
    #define MATMUL_POLICY_DEFAULT_OF(DEFAULT)      \
    template <const auto& = MM_CFG, typename ...>  \
            class MATMUL_POLICY = AscendC::Impl::Detail::DEFAULT
    

参数说明

表1 MatmulApiStaticTiling常量化Tiling参数说明

参数数据类型说明
M, N, Ka, Kb,

singleCoreM, singleCoreN, singleCoreK,

baseM, baseN, baseK,

depthA1, depthB1,

stepM, stepN,stepKa,stepKb,

isBias,

transLength,

iterateOrder,

dbL0A, dbL0B,

dbL0C,

shareMode,

shareL1Size,

shareL0CSize,

shareUbSize,

batchM,

batchN,

singleBatchM,

singleBatchN,

mxTypePara
int32_tTCubeTiling结构体中各同名参数含义一致。本结构体中的参数是常量化后的常数值。
cfgMatmulConfigMatmul模板的参数配置。

返回值说明

约束说明

调用示例

Text
// 用户自定义回调函数
void DataCopyOut(
    const __gm__ void* gm, const LocalTensor<int8_t>& co1Local, const void* dataCopyOutParams, const uint64_t tilingPtr,
    const uint64_t dataPtr);
void CopyA1(
    const AscendC::LocalTensor<int8_t>& aMatrix, const __gm__ void* gm, int row, int col, int useM, int useK,
    const uint64_t tilingPtr, const uint64_t dataPtr);
void CopyB1(
    const AscendC::LocalTensor<int8_t>& bMatrix, const __gm__ void* gm, int row, int col, int useK, int useN,
    const uint64_t tilingPtr, const uint64_t dataPtr);

// 定义创建对象时需要传入的A、B、C、Bias参数类型信息
typedef AscendC::MatmulType<AscendC::TPosition::GM, CubeFormat::ND, half> aType;
typedef AscendC::MatmulType<AscendC::TPosition::GM, CubeFormat::ND, half> bType;
typedef AscendC::MatmulType<AscendC::TPosition::GM, CubeFormat::ND, float> cType;
typedef AscendC::MatmulType<AscendC::TPosition::GM, CubeFormat::ND, float> biasType;

// 使用MDL模板,创建Matmul实例
AscendC::Matmul<aType, bType, cType, biasType, CFG_MDL> mm1;

AscendC::MatmulConfig mmConfig{false /*不使用Norm模板*/,          true /*使用BasicBlock模板*/,
                               false /*不使用MDL模板*/,           128 /*Matmul计算时base块M轴长度*/,
                               128 /*Matmul计算时base块N轴长度*/, 64 /*Matmul计算时base块K轴长度*/};
mmConfig.enUnitFlag = false; // 不开启UnitFlag功能
// 使用自定义的mmConfig,创建Matmul实例
AscendC::Matmul<aType, bType, cType, biasType, mmConfig> mm2;

// 使用NORM模板、自定义的mmConfig和自定义的回调函数,创建Matmul实例
AscendC::Matmul<aType, bType, cType, biasType, CFG_NORM, AscendC::MatmulCallBackFunc<DataCopyOut, CopyA1, CopyB1>> mm3;

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