模板参数定义
函数原型
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 30 31 32 33 34 35 |
// 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_DATATYPE_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_KERNEL_TYPE_DECL(x, ...) ParamStruct{#x, ASCENDC_TPL_SHARED_KERNEL_TYPE, ASCENDC_TPL_8_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_DATATYPE_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_KERNEL_TYPE_SEL(...) ParamStruct{"kernel_type", ASCENDC_TPL_KERNEL_TYPE, ASCENDC_TPL_8_BW, {__VA_ARGS__}, "SEL"} #define ASCENDC_TPL_DETERMINISTIC_SEL(...) ParamStruct{"deterministic", ASCENDC_TPL_DETERMINISTIC, ASCENDC_TPL_1_BW, {__VA_ARGS__}, "SEL"} #define ASCENDC_TPL_SHARED_KERNEL_TYPE_SEL(x, ...) ParamStruct{#x, ASCENDC_TPL_SHARED_KERNEL_TYPE, ASCENDC_TPL_8_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__ } |
参数说明
|
宏 |
功能描述 |
参数解释 |
|---|---|---|
|
ASCENDC_TPL_SEL(...) |
算子的模板参数整体组合。 |
包含多个算子的模板参数组合。 |
|
ASCENDC_TPL_ARGS_SEL(...) |
算子的模板参数组合。 |
一个算子的模板参数组合。 |
|
ASCENDC_TPL_KERNEL_TYPE_SEL(args0) |
用于设置算子模板参数组合的Kernel类型,但该参数并不能作为核函数的模板参数传入。 |
args0:该模板参数组合下,算子的Kernel类型。如不选择将走自动推导流程,ASCENDC_TPL_SEL下的所有算子对于是否选择Kernel类型需要保持一致。 当前支持的Kernel类型如下:
|
|
ASCENDC_TPL_DTYPE_SEL(args0, ...) |
自定义DataType类型的模板参数组合。 |
|
|
ASCENDC_TPL_DATATYPE_SEL(args0, ...) |
原生DataType类型的模板参数组合 |
|
|
ASCENDC_TPL_FORMAT_SEL(args0, ...) |
Format类型的模板参数组合。 |
|
|
ASCENDC_TPL_UINT_SEL(args0, args1, args2, ...) |
UINT类型的模板参数组合。 |
模式和参数的配置方式参考ASCENDC_TPL_UINT_DECL(args0, args1, args2, ...)。 |
|
ASCENDC_TPL_BOOL_SEL(args0, ...) |
bool类型的模板参数组合。 |
args0:表示参数名。 args1-args2 :后续若干个参数为ASCENDC_TPL_BOOL_DECL定义的参数范围子集。 |
|
ASCENDC_TPL_DETERMINISTIC_SEL(args0) |
该组模板参数组合用于配置是否使能确定性计算。 |
args0: 表示参数名, 可选值范围[true, false, 1, 0],其中[true/1]表示该组模板参数组合使能确定性计算,[false/0]表示不使能确定性计算。需要注意,该值不作为算子的模板参数入参,在使能该值编译时,会添加"-DDETERMINISTIC_MODE=1", 同时会生成以"_deterministic"结尾的json与.o文件,例如:"AddCustomTemplate_816f04e052850554f4b3cacb35f8e8c6_deterministic.json"/"AddCustomTemplate_816f04e052850554f4b3cacb35f8e8c6_deterministic.o"。 备注:若通过ASCENDC_TPL_DETERMINISTIC_SEL(true)接口编译出了确定性计算的版本,在算子调用时,通常需要打开确定性计算的的开关,例如通过aclnn单算子调用时,需要使用aclrtCtxSetSysParamOpt接口进行相关配置。 该参数仅支持如下型号:
|
|
ASCENDC_TPL_SHARED_KERNEL_TYPE_SEL(args0, ...) |
设置算子模板参数组合的Kernel类型,该参数可以作为核函数的模板参数传入。 |
args0: 参数名 args1-argsn: 该模板参数组合下,算子的Kernel类型,后续参数为若干Kernel类型。该接口不能与ASCENDC_TPL_KERNEL_TYPE_SEL接口同时使用。 若同时使用KERNEL_TASK_TYPE_DEFAULT(value)接口,本接口优先级更高。 |
返回值说明
无。
约束说明
对模板参数定义的取值进行修改或新增后,需要重新编译自定义算子包,不能再继续使用之前的算子二进制。