下载
中文
注册

模板参数定义

函数功能

通过以下函数原型进行模板参数ASCENDC_TPL_ARGS_DECL和模板参数组合ASCENDC_TPL_ARGS_SEL(即可使用的模板)的定义。详细内容请参考Tiling模板编程

函数原型

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// ParamStruct是存放用户设置的模板参数ASCENDC_TPL_ARGS_DECL和模板参数组合ASCENDC_TPL_ARGS_SEL的结构体,用作后续的Tilingkey与模板参数之间的编解码,用户无需关注
struct ParamStruct {
    const char* name;
    uint32_t paramType;
    uint8_t bitWidth;
    std::vector<uint64_t> vals;
    const char* macroType;
    ParamStruct(const char* inName, uint32_t inParamType, uint8_t inBitWidth, std::vector<uint64_t> inVals,
        const char* inMacroType):
        name(inName), paramType(inParamType), bitWidth(inBitWidth), vals(std::move(inVals)),
        macroType(inMacroType) {}
};
using TilingDeclareParams = std::vector<ParamStruct>;
using TilingSelectParams = std::vector<std::vector<ParamStruct>>;

// 模板参数定义相关接口
#define ASCENDC_TPL_DTYPE_DECL(x, ...) ParamStruct{#x, ASCENDC_TPL_DTYPE, ASCENDC_TPL_8_BW, {__VA_ARGS__}, "DECL"}
#define ASCENDC_TPL_FORMAT_DECL(x, ...) ParamStruct{#x, ASCENDC_TPL_FORMAT, ASCENDC_TPL_8_BW, {__VA_ARGS__}, "DECL"}
#define ASCENDC_TPL_UINT_DECL(x, bw, ...) ParamStruct{#x, ASCENDC_TPL_UINT, bw, {__VA_ARGS__}, "DECL"}
#define ASCENDC_TPL_BOOL_DECL(x, ...) ParamStruct{#x, ASCENDC_TPL_BOOL, ASCENDC_TPL_1_BW, {__VA_ARGS__}, "DECL"}

#define ASCENDC_TPL_DTYPE_SEL(x, ...) ParamStruct{#x, ASCENDC_TPL_DTYPE, ASCENDC_TPL_8_BW, {__VA_ARGS__}, "SEL"}
#define ASCENDC_TPL_FORMAT_SEL(x, ...) ParamStruct{#x, ASCENDC_TPL_FORMAT, ASCENDC_TPL_8_BW, {__VA_ARGS__}, "SEL"}
#define ASCENDC_TPL_UINT_SEL(x, ...) ParamStruct{#x, ASCENDC_TPL_UINT, 0, {__VA_ARGS__}, "SEL"}
#define ASCENDC_TPL_BOOL_SEL(x, ...) ParamStruct{#x, ASCENDC_TPL_BOOL, ASCENDC_TPL_1_BW, {__VA_ARGS__}, "SEL"}

#define ASCENDC_TPL_ARGS_DECL(x, ...) static TilingDeclareParams g_tilingDeclareParams{ __VA_ARGS__ }
#define ASCENDC_TPL_ARGS_SEL(...) { __VA_ARGS__}
#define ASCENDC_TPL_SEL(...) static TilingSelectParams g_tilingSelectParams{ __VA_ARGS__ }

参数说明

表1 Tiling模板参数定义说明

功能描述

参数解释

ASCENDC_TPL_ARGS_DECL(args0, ...)

用于定义算子的模板参数。

  • args0:表示算子Optype。
  • args1-argsn:后续为若干个DTYPE、FORMAT、UINT、BOOL的模板参数定义,分别通过ASCENDC_TPL_DTYPE_DECL、ASCENDC_TPL_FORMAT_DECL、ASCENDC_TPL_UINT_DECL、ASCENDC_TPL_BOOL_DECL进行定义。

ASCENDC_TPL_DTYPE_DECL(args0, ...)

DataType类型的模板参数定义。

  • args0:参数名。
  • args1-argsn:后续若干个参数为穷举的DataType枚举值。

ASCENDC_TPL_FORMAT_DECL(args0, ...)

Format类型的模板参数定义。

  • args0:参数名。
  • args1-argsn:后续若干个参数为穷举的Format枚举值。

ASCENDC_TPL_UINT_DECL(args0, args1, args2, ...)

自定义UINT类型(无符号整形)的模板参数定义。

  • args0:参数名。
  • args1:最大位宽,模板参数的个数不能超过最大位宽。
  • args2:参数定义的模式。支持以下三种模式:
    • ASCENDC_TPL_UI_RANGE:范围模式,设置该模式,后续紧跟着第一个值表示范围个数,第一个值后面的每两个数值为一组分别表示该范围的起、终位置;注意定义的范围个数要和后续的组数保持一致。

      举例:ASCENDC_TPL_UINT_DECL(ASCENDC_TPL_UI_RANGE,2,0,2,3,5)表示2组参数,这2组参数范围为{0, 2},{3, 5},因此该参数定义的UINT参数合法值为{0, 1, 2, 3, 4, 5}。

    • ASCENDC_TPL_UI_LIST:穷举模式,设置该模式,则表示后续将穷举出所有的参数值。

      举例:ASCENDC_TPL_UINT_DECL(ASCENDC_TPL_UI_LIST,10,12,13,9,8,7,6)表示1组穷举参数,[10, 12, 13, 9, 8, 7, 6]为穷举值,因此该参数定义的UINT参数合法值为{10, 12, 13, 9, 8, 7, 6}。

    • ASCENDC_TPL_UI_MIX:混合模式,设置该模式,则表示前n个数值为范围模式的参数定义,后m个数值为穷举模式的参数定义。

      举例

      ASCENDC_TPL_UINT_DECL(ASCENDC_TPL_UI_MIX,2,0,2,3, 5, 10, 12, 13, 9, 8)表示2组穷举参数,这2组范围为{0, 2}, {3, 5},[10, 12, 13, 9, 8]为穷举值,因此该参数定义的UINT参数合法值为{0, 1, 2, 3, 4, 5, 10, 12, 13, 9, 8}。

  • args3-argsn:对应不同范围模式的参数数值。

ASCENDC_TPL_BOOL_DECL(args0, ...)

自定义bool类型的模板参数定义。

args0:参数名。

args1-args2:取值范围0,1。

表2 Tiling模板参数组合定义

功能描述

参数解释

ASCENDC_TPL_SEL(...)

算子的模板参数整体组合。

包含多个算子的模板参数组合。

ASCENDC_TPL_ARGS_DSEL(...)

算子的模板参数组合。

一个算子的模板参数组合。

ASCENDC_TPL_DTYPE_SEL(args0, ...)

DataType类型的模板参数组合。

  • args0:表示参数名。
  • args1-argsn :后续若干个参数为ASCENDC_TPL_DTYPE_DECL中定义的参数范围子集。

ASCENDC_TPL_FORMAT_SEL(args0, ...)

Format类型的模板参数组合。

  • args0:表示参数名。
  • args1-argsn:后续若干个参数为ASCENDC_TPL_FORMAT_DECL中定义的参数范围子集。

ASCENDC_TPL_UINT_SEL(args0, args1, args2, ...)

UINT类型的模板参数组合。

  • args0:表示参数名。
  • args1:参数定义的模式。支持如下取值:
    • ASCENDC_TPL_UI_RANGE:范围模式。
    • ASCENDC_TPL_UI_LIST:穷举模式。
    • ASCENDC_TPL_UI_MIX:混合模式。
  • args2-argsn:后续若干个参数为ASCENDC_TPL_UINT_DECL中定义的参数范围子集。

模式和参数的配置方式参考ASCENDC_TPL_UINT_DECL(args0, args1, args2, ...)。

ASCENDC_TPL_BOOL_SEL(args0, ...)

bool类型的模板参数组合。

args0:表示参数名。

args1-args2 :后续若干个参数为ASCENDC_TPL_BOOL_DECL定义的参数范围子集。

返回值说明

无。

约束说明

对模板参数定义的取值进行修改或新增后,需要重新编译自定义算子包,不能再继续使用之前的算子二进制。