asc.language.adv
Matmul
- class asc.language.adv.Matmul(a: MatmulType, b: MatmulType, c: MatmulType, bias: MatmulType | None = None, matmul_config: MatmulConfig | None = None, matmul_policy: MatmulPolicy | None = 0)
- class asc.language.adv.Matmul(handle: Value)
Ascend C提供一组Matmul高阶API,方便用户快速实现Matmul矩阵乘法的运算操作。 Matmul的计算公式为:C = A * B + Bias。
获取Iterate接口异步计算的结果矩阵。该接口功能已被GetTensorC覆盖,建议直接使用GetTensorC异步接口。 |
|
清除Bias标志位,表示Matmul计算时没有Bias参与。 |
|
多个Matmul对象之间切换计算时,必须调用一次End函数,用于释放Matmul计算资源,防止多个Matmul对象的计算资源冲突。 |
|
调用一次get_batch_tensor_c,会获取C矩阵片,该接口可以与iterate_n_batch异步接口配合使用。 用于在调用iterate_n_batch迭代计算后,获取一片std::max(batch_a, batch_b) * singleCoreM * singleCoreN大小的矩阵分片。 |
|
预留接口,为后续功能做预留。 获取本次计算时当前分片在整个C矩阵中的位置。 |
|
本接口和iterate接口配合使用,用于在调用iterate完成迭代计算后, 根据MatmulConfig参数中的ScheduleType取值获取一块或两块baseM * baseN大小的矩阵分片。 |
|
灵活的自定义Matmul模板参数配置。 |
|
每调用一次Iterate,会计算出一块baseM * baseN的C矩阵。 |
|
调用一次iterate_all,会计算出singleCoreM * singleCoreN大小的C矩阵。 |
|
该接口提供批量处理Matmul的功能,调用一次iterate_batch,可以计算出多个singleCoreM * singleCoreN大小的C矩阵。 |
|
调用一次IterateNBatch,会进行N次IterateBatch计算,计算出N个多Batch的singleCoreM * singleCoreN大小的C矩阵。 在调用该接口前,需将MatmulConfig中的isNBatch参数设为true,使能多Batch输入多Batch输出功能,并调用SetWorkspace接口申请临时空间, 用于缓存计算结果,即IterateNBatch的结果输出至SetWorkspace指定的Global Memory内存中。 对于BSNGD、SBNGD、BNGS1S2的Layout格式, 调用该接口之前需要在tiling中使用SetALayout/SetBLayout/SetCLayout/SetBatchNum设置A/B/C的Layout轴信息和最大BatchNum数; 对于Normal数据格式则需使用SetBatchInfoForNormal设置A/B/C的M/N/K轴信息和A/B矩阵的BatchNum数。 实例化Matmul时,通过MatmulType设置Layout类型,当前支持3种Layout类型:BSNGD、SBNGD、BNGS1S2。 |
|
在不改变Tiling的情况下,重新设置多Batch计算的Batch数。 |
|
设置矩阵乘的Bias。 |
|
在纯Cube模式(只有矩阵计算)下,设置是否使能HF32(矩阵乘计算时可采用的数据类型)模式。使能后,在矩阵乘计算时, float32数据类型会转换为hf32数据类型,可提升计算性能,但同时也会带来精度损失。 |
|
设置Matmul计算原始完整的形状M、N、K,单位为元素个数。用于运行时修改shape,比如复用同一个Matmul对象,从不同的矩阵块取数据计算。 |
|
本接口提供对输出矩阵的所有值采用同一系数进行量化或反量化的功能,即整个C矩阵对应一个量化参数,量化参数的shape为[1]。 |
|
本接口提供对输出矩阵采用向量进行量化或反量化的功能,即对于输入shape为[1, N]的参数向量, N值为Matmul矩阵计算时M/N/K中的N值,对输出矩阵的每一列都采用该向量中对应列的系数进行量化或反量化。 |
|
使能模板参数MatmulCallBackFunc(自定义回调函数)时,设置需要的计算数据或在GM上存储的数据地址等信息,用于回调函数使用。复用同一个Matmul对象时,可以多次调用本接口重新设置对应数据信息。 |
|
设置Matmul单核计算的形状singleCoreM、singleCoreN、singleCoreK,单位为元素。 用于运行时修改shape,比如复用Matmul对象来处理尾块。与SetTail接口功能一致,建议使用本接口。 |
|
设置稀疏矩阵稠密化过程生成的索引矩阵。 索引矩阵的Format格式要求为NZ格式。 本接口仅支持在纯Cube模式(只有矩阵计算)且MDL模板的场景使用。 |
|
在不改变Tiling的情况下,重新设置本次计算的singleCoreM/singleCoreN/singleCoreK,以元素为单位。 |
|
设置矩阵乘的左矩阵A。 |
|
设置矩阵乘的右矩阵B。 |
|
使能模板参数MatmulCallBackFunc(自定义回调函数)时,设置算子tiling地址,用于回调函数使用,该接口仅需调用一次。 |
|
Iterate计算的异步场景,调用本接口申请一块临时空间来缓存计算结果,然后调用GetTensorC时会在该临时空间中获取C的矩阵分片。 IterateNBatch计算时,调用本接口申请一块临时空间来缓存计算结果,然后根据同步或异步场景进行其它接口的调用。 |
|
当使用GetTensorC异步接口将结果矩阵从GM拷贝到UB,且UB后续需要进行Vector计算时,需要调用WaitGetTensorC进行同步。 |
|
等待iterate_all异步接口返回,支持连续输出到Global Memory。 |
|
等待iterate_batch异步接口或iterate_nbatch异步接口返回,支持连续输出到Global Memory。 |
|
用于配置BasicBlock模板的参数,获取自定义BasicBlock模板。 |
|
用于配置IBShare模板的参数,获取自定义IBShare模板。 |
|
本接口用于在编译期间获取常量化的Matmul Tiling参数。 |
|
用于配置MDL模板的参数,获取自定义MDL模板。 |
|
灵活的自定义Matmul模板参数配置。 |
|
用于配置Norm模板的参数,获取自定义Norm模板。 |
|
用于配置SpecialBasicBlock模板的参数,获取自定义SpecialBasicBlock模板。当前为预留接口。 |
|
用于配置SpecialMDL模板的参数,获取自定义SpecialMDL模板。 |
|
主要用于初始化Matmul对象。 |
Activation Ops
将输入tensor[m0, m1, ...mt, n](t大于等于0)的非尾轴长度相乘的结果看作m,则输入tensor的shape看作[m, n]。 为方便理解,通过Python脚本实现的方式,表达其计算公式(以输入为ND格式为例)如下,其中src是源操作数(输入),dst、sum、max为目的操作数(输出)。 |