asc.lib.host.MatmulApiTiling.set_fix_split

MatmulApiTiling.set_fix_split(self: libhost.MatmulApiTilingBase, base_m_in: int = -1, base_n_in: int = -1, base_k_in: int = -1) int

设置A/B/C/Bias是否使能double buffer功能,以及是否需要做ND2NZ或者NZ2ND的转换,主要用于Tiling函数内部调优。

对应的Ascend C函数原型

int32_t SetFixSplit(int32_t baseMIn = -1, int32_t baseNIn = -1, int32_t baseKIn = -1)

参数说明

  • dequant_type:设置量化或反量化时的模式。

返回值说明

-1表示设置失败; 0表示设置成功。

约束说明

  • base_m*base_n个输出元素所占的存储空间大小不能超过L0C Buffer大小,即base_m * base_n * sizeof(C_TYPE) <= L0CSize。

  • base_m需要小于等于single_m按16个元素向上对齐后的值(如ceil(single_m/16)*16),base_n需要小于等于single_n以C0_size个元素向上对齐的值,其中single_m为单核内M轴长度,singleN为单核内N轴长度,half/bfloat16_t数据类型的C0_size为16,float数据类型的C0_size为8,int8_t数据类型的C0_size为32,int4b_t数据类型的C0_size为64。例如single_m=12,则base_m需要小于等于16,同时base_m需要满足分形对齐的要求,所以base_m只能取16;如果base_m取其他超过16的值,获取Tiling将失败。

调用示例

import asc.lib.host as host
ascendc_platform = host.get_ascendc_platform()
tiling = host.MatmulApiTiling(ascendc_platform)
tiling.set_a_type(host.TPosition.GM, host.CubeFormat.ND, host.DataType.DT_FLOAT16)
tiling.set_b_type(host.TPosition.GM, host.CubeFormat.ND, host.DataType.DT_FLOAT16)
tiling.set_c_type(host.TPosition.GM, host.CubeFormat.ND, host.DataType.DT_FLOAT)
tiling.set_bias_type(host.TPosition.GM, host.CubeFormat.ND, host.DataType.DT_FLOAT)
tiling.set_shape(1024, 1024, 1024)
tiling.set_org_shape(1024, 1024, 1024)
tiling.set_bias(True)
tiling.set_fix_split(16, 16, -1)  # 设置固定的base_m, bakse_n
tiling.set_buffer_space(-1, -1, -1)
tiling_data = host.TCubeTiling()
ret = tiling.get_tiling(tiling_data)