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(...)

Overloaded function.

MatmulApiTiling.set_org_shape(*args, **kwargs)

Overloaded function.

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参数。