Matmul模板参数

功能说明

创建Matmul对象时需要传入:

函数原型

1
2
template <class A_TYPE, class B_TYPE, class C_TYPE, class BIAS_TYPE = C_TYPE, const MatmulConfig& MM_CFG = CFG_NORM, class MM_CB = MatmulCallBackFunc<nullptr, nullptr, nullptr>, MATMUL_POLICY_DEFAULT_OF(MatmulPolicy)>
using Matmul = AscendC::MatmulImpl<A_TYPE, B_TYPE, C_TYPE, BIAS_TYPE, MM_CFG, MM_CB, MATMUL_POLICY>;

参数说明

表1 MatmulCallBackFunc回调函数接口及参数说明

回调函数功能

回调函数接口

参数说明

可自定义设置不同的搬出数据片段数目等参数,实现将Matmul计算结果从CO1搬出到GM的功能

void DataCopyOut(const __gm__ void *gm, const LocalTensor<int8_t> &co1Local, const void *dataCopyOutParams, const uint64_t tilingPtr, const uint64_t dataPtr)

gm:输出的GM地址

co1Local: CO1上的计算结果

dataCopyOutParams:Matmul定义的DataCopyOutParams结构体指针,供用户参考使用

struct DataCopyOutParams {

uint16_t cBurstNum; //传输数据片段数目

uint16_t burstLen; //连续传输数据片段长度

uint16_t srcStride;//源tensor相邻连续数据片段间隔

uint32_t dstStride; // 目的tensor相邻连续数据片段间隔

uint16_t oriNSize; // NZ转ND时,源tensorN方向大小

bool enUnitFlag; // 是否使能UnitFlag

uint64_t quantScalar; // 量化场景下量化Scalar的值

uint64_t cbufWorkspaceAddr; //量化场景下量化Tensor地址

}

tilingPtr: 用户使用SetUserDefInfo设置的tiling参数地址

dataPtr: 用户使用SetSelfDefineData设置的计算数据地址

可自定义左矩阵搬入首地址、搬运块位置、搬运块大小,实现左矩阵从GM搬入L1的功能

void CopyA1(const LocalTensor<int8_t> &aMatrix, const __gm__ void *gm, int row, int col, int useM, int useK, const uint64_t tilingPtr, const uint64_t dataPtr)

aMatrix: 目标L1Buffer地址

gm:左矩阵GM首地址

row、col:搬运块左上角坐标在左矩阵中的位置

useM、useK:搬运块M、K方向大小

tilingPtr: 用户使用SetUserDefInfo设置的tiling参数地址

dataPtr: 用户使用SetSelfDefineData设置的计算数据地址

可自定义右矩阵搬入首地址、搬运块位置、搬运块大小,实现右矩阵从GM搬入L1的功能

void CopyB1(const LocalTensor<int8_t> &bMatrix, const __gm__ void *gm, int row, int col, int useK, int useN, const uint64_t tilingPtr, const uint64_t dataPtr)

bMatrix: 目标L1Buffer地址

gm:右矩阵GM首地址

row、col:搬运块左上角坐标在右矩阵中的位置

useK、useN:搬运块K、N方向大小

tilingPtr: 用户使用SetUserDefInfo设置的tiling参数地址

dataPtr: 用户使用SetSelfDefineData设置的计算数据地址

表2 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,

int32_t

TCubeTiling结构体中各同名参数含义一致。本结构体中的参数是常量化后的常数值。

cfg

MatmulConfig

Matmul模板的参数配置。

返回值

支持的型号

Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件

Atlas 推理系列产品AI Core

Atlas 200I/500 A2 推理产品

约束说明

调用示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
//用户自定义回调函数
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);

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; 
AscendC::Matmul<aType, bType, cType, biasType, CFG_MDL> mm1; 
AscendC::MatmulConfig mmConfig{false, true, false, 128, 128, 64};
mmConfig.enUnitFlag = false;
AscendC::Matmul<aType, bType, cType, biasType, mmConfig> mm2;
AscendC::Matmul<aType, bType, cType, biasType, CFG_NORM, AscendC::MatmulCallBackFunc<DataCopyOut, CopyA1, CopyB1>> mm3;