Matmul模板参数
【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C++标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit
产品支持情况
- 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模板参数如下:
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。
#define MATMUL_POLICY_DEFAULT_OF(DEFAULT) \ template <const auto& = MM_CFG, typename ...> \ class MATMUL_POLICY = AscendC::Impl::Detail::DEFAULT
参数说明
表1MatmulApiStaticTiling常量化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_t | 与TCubeTiling结构体中各同名参数含义一致。本结构体中的参数是常量化后的常数值。 | | cfg | MatmulConfig | Matmul模板的参数配置。 |
返回值说明
无
约束说明
无
调用示例
// 用户自定义回调函数 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本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C++标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考