asc.lib.host

Ascend C提供一组Matmul Tiling API,方便用户获取Matmul kernel计算时所需的Tiling参数。 用户只需要传入A/B/C矩阵的Position位置、Format格式和DType数据类型等信息,调用API接口,即可获取到Init中TCubeTiling结构体中的相关参数。

MatmulApiTiling/MultiCoreMatmulTiling/BatchMatmulTiling共有接口列表

MatmulApiTiling.enable_bias(self[, is_bias_in]) 设置Bias是否参与运算,设置的信息必须与Kernel侧保持一致。
MatmulApiTiling.get_base_k(self) 获取Tiling计算得到的baseK值。
MatmulApiTiling.get_base_m(self) 获取Tiling计算得到的baseM值。
MatmulApiTiling.get_base_n(self) 获取Tiling计算得到的baseN值。
MatmulApiTiling.get_tiling(self, tiling) 获取Tiling参数。
MatmulApiTiling.set_a_layout(self, b, s, n, g, d) 设置A矩阵的Layout轴信息,包括B、S、N、G、D轴。对于BSNGD、SBNGD、BNGS1S2 Layout格式,调用IterateBatch接口之前, 需要在Host侧Tiling实现中通过本接口设置A矩阵的Layout轴信息。
MatmulApiTiling.set_a_type(self, pos, type, ...) 设置A矩阵的位置,数据格式,数据类型,是否转置等信息,这些信息需要和kernel侧的设置保持一致。
MatmulApiTiling.set_b_layout(self, b, s, n, g, d) 设置B矩阵的Layout轴信息,包括B、S、N、G、D轴。对于BSNGD、SBNGD、BNGS1S2 Layout格式,调用IterateBatch接口之前, 需要在Host侧Tiling实现中通过本接口设置B矩阵的Layout轴信息。
MatmulApiTiling.set_b_type(self, pos, type, ...) 设置B矩阵的位置,数据格式,数据类型,是否转置等信息,这些信息需要和kernel侧的设置保持一致。
MatmulApiTiling.set_batch_info_for_normal(...) 设置A/B矩阵的M/N/K轴信息,以及A/B矩阵的Batch数。Layout类型为NORMAL的场景, 调用IterateBatch或者IterateNBatch接口之前,需要在Host侧Tiling实现中通过本接口设置A/B矩阵的M/N/K轴等信息。
MatmulApiTiling.set_batch_num(self, batch) 设置多Batch计算的最大Batch数,最大Batch数为A矩阵batchA和B矩阵batchB中的最大值。 调用IterateBatch接口之前,需要在Host侧Tiling实现中通过本接口设置多Batch计算的Batch数。
MatmulApiTiling.set_bias_type(self, pos, ...) 设置Bias的位置,数据格式,数据类型,是否转置等信息,这些信息需要和kernel侧的设置保持一致。
MatmulApiTiling.set_buffer_space(self[, ...]) 设置Matmul计算时可用的L1 Buffer/L0C Buffer/Unified Buffer/BiasTable Buffer空间大小,单位为字节。
MatmulApiTiling.set_c_layout(self, b, s, n, g, d) 设置C矩阵的Layout轴信息,包括B、S、N、G、D轴。对于BSNGD、SBNGD、BNGS1S2 Layout格式,调用IterateBatch接口之前, 需要在Host侧Tiling实现中通过本接口设置C矩阵的Layout轴信息。
MatmulApiTiling.set_c_type(self, pos, type, ...) 设置C矩阵的位置,数据格式,数据类型,是否转置等信息,这些信息需要和kernel侧的设置保持一致。
MatmulApiTiling.set_dequant_type(self, ...) 该接口用于设置量化或反量化的模式。
MatmulApiTiling.set_double_buffer(self, a, ...) 设置A/B/C/Bias是否使能double buffer功能,以及是否需要做ND2NZ或者NZ2ND的转换,主要用于Tiling函数内部调优。
MatmulApiTiling.set_fix_split(self[, ...]) 设置A/B/C/Bias是否使能double buffer功能,以及是否需要做ND2NZ或者NZ2ND的转换,主要用于Tiling函数内部调优。
MatmulApiTiling.set_mad_type(self, mad_type) 设置是否使能HF32模式。当前版本暂不支持。
MatmulApiTiling.set_matmul_config_params(...) 在计算Tiling时,用于自定义设MatmulConfig参数。本接口中配置的参数对应的功能在Tiling与Kernel中需要保持一致,所以本接口中的参数取值,需要与Kernel侧对应的MatmulConfig参数值保持一致。
MatmulApiTiling.set_org_shape(*args, **kwargs) 设置Matmul计算时的原始完整的形状M、N、K或Ka/Kb,单位均为元素个数。
MatmulApiTiling.set_shape(self, m, n, k) 设置Matmul计算的形状m、n、k,该形状可以为原始完整矩阵或其局部矩阵,单位为元素。该形状的矩阵乘可以由单核或多核计算完成。
MatmulApiTiling.set_sparse(self[, is_sparce_in]) 设置Matmul的使用场景是否为Sparse Matmul场景。
MatmulApiTiling.set_split_range(self[, ...]) 设置baseM/baseN/baseK的最大值和最小值。 目前Tiling暂时不支持该功能。
MatmulApiTiling.set_traverse(self, traverse) 设置固定的Matmul计算方向,M轴优先还是N轴优先。

MultiCoreMatmulTiling其他接口

MultiCoreMatmulTiling.enable_multi_core_split_k(...) 多核场景,通过该接口使能切K轴。不调用该接口的情况下,默认不切K轴。在GetTiling接口调用前使用。
MultiCoreMatmulTiling.get_core_num(self) 获得多核切分所使用的BlockNum参数。
MultiCoreMatmulTiling.get_single_shape(self) 获取计算后的single_core_m/single_core_n/single_core_k。
MultiCoreMatmulTiling.set_align_split(self, ...) 多核切分时, 设置single_core_m/single_core_n/single_core_k的对齐值。比如设置single_core_m的对齐值为64(单位为元素),切分出的singleCoreM为64的倍数。
MultiCoreMatmulTiling.set_dim(self, dim) 设置多核Matmul时,参与运算的核数。
MultiCoreMatmulTiling.set_single_range(self) 设置single_core_m/single_core_n/single_core_k的最大值与最小值。
MultiCoreMatmulTiling.set_single_shape(self) 设置Matmul单核计算的形状single_m_in,single_n_in,single_k_in,单位为元素。

BatchMatmulTiling其他接口

BatchMatmulTiling.get_core_num(self) 获得多核切分所使用的BlockNum参数。