在章节介绍的TilingKey编程方式中,TilingKey不易于记忆和理解,因为它们通常是较长又没有明确含义的数字。
在涉及多个TilingKey的场景中,开发者依赖TilingKey来管理kernel的实现,无论是在管理还是使用上都会遇到相当大的复杂性。为了简化这一过程,可以采用模板编程的方法来替代传统的TilingKey编程,从而减少对TilingKey数值标识的依赖,使kernel的管理更加直观和高效。使用步骤如下,完整样例请参考。
[object Object][object Object]在的op_kernel目录下,新增定义模板参数和模板参数组合的头文件,本示例中头文件命名为tiling_key_add_custom.h。
- 该头文件中需要包含模板头文件ascendc/host_api/tiling/template_argument.h。
- 定义模板参数ASCENDC_TPL_ARGS_DECL和模板参数组合ASCENDC_TPL_ARGS_SEL(即可使用的模板)。具体API参考见。
[object Object]当不同模板参数组合需要使用不同的Tiling结构体时,可以在对应的ASCENDC_TPL_ARGS_SEL中增加ASCENDC_TPL_TILING_STRUCT_SEL接口。例如:
[object Object]上述接口仅用于为当前模板参数组合指定Tiling结构体,不作为kernel的模板参数传入,也不参与ASCENDC_TPL_SEL_PARAM或GET_TPL_TILING_KEY的参数顺序。未配置ASCENDC_TPL_TILING_STRUCT_SEL的模板参数组合,将使用REGISTER_TILING_DEFAULT注册的默认Tiling结构体;使用该接口时,必须提供默认Tiling结构体。kernel侧可通过GET_TILING_DATA_WITH_STRUCT(TilingStructName, tiling_data, tiling)读取指定结构体对应的tiling数据。
host侧调用ASCENDC_TPL_SEL_PARAM接口自动生成并配置TilingKey。
- host实现文件中包含中定义模板参数和模板参数组合的头文件。
- 调用ASCENDC_TPL_SEL_PARAM接口自动生成并配置TilingKey,ASCENDC_TPL_SEL_PARAM输入参数为模板参数的具体值,传入时需要与定义模板参数和模板参数组合的头文件中的模板参数顺序保持一致。
[object Object]kernel侧实现
- kernel实现文件中包含中定义模板参数和模板参数组合的头文件。
- 核函数添加template模板,以便支持模板参数的传入,参数顺序需要与定义模板参数和模板参数组合的头文件中的模板参数顺序保持一致。
- 通过对模板参数的分支判断,选择不同的kernel侧实现。
[object Object]
[object Object]