当前位置: 首页 > news >正文

CANN Ascend C Tiling模板参数定义

模板参数定义

【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C++标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit

功能说明

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

函数原型

// 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_TILING_STRUCT_SEL(x, ...) #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__ }

参数说明

表 1Tiling模板参数定义说明

功能描述

参数解释

ASCENDC_TPL_ARGS_DECL(args0, ...)

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

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

ASCENDC_TPL_DTYPE_DECL(args0, ...)

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

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

ASCENDC_TPL_DATATYPE_DECL(args0, ...)

原生DataType类型的模板参数定义。

ASCENDC_TPL_FORMAT_DECL(args0, ...)

支持两种模式:

1. 均为自定义Format类型的模板参数定义。

2. 均为原生Format类型的模板参数定义。

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

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

ASCENDC_TPL_BOOL_DECL(args0, ...)

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

args0:参数名。

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

ASCENDC_TPL_KERNEL_TYPE_DECL(args0, ...)

定义算子模板参数的kernel类型

args0:参数名

args1-argsn:后续为若干kernel类型。

当前支持的Kernel类型如下:

  • ASCENDC_TPL_AIV_ONLY // 算子执行时仅启动AI Core上的Vector核
  • ASCENDC_TPL_AIC_ONLY // 算子执行时仅启动AI Core上的Cube核
  • ASCENDC_TPL_MIX_AIV_1_0 // AIC、AIV混合场景下,算子执行时仅会启动AI Core上的Vector核
  • ASCENDC_TPL_MIX_AIC_1_0 // AIC、AIV混合场景下,算子执行时仅会启动AI Core上的Cube核
  • ASCENDC_TPL_MIX_AIC_1_1 // AIC、AIV混合场景下,算子执行时会同时启动AI Core上的Cube核和Vector核,比例为1:1
  • ASCENDC_TPL_MIX_AIC_1_2 // AIC、AIV混合场景下,算子执行时会同时启动AI Core上的Cube核和Vector核,比例为1:2
  • ASCENDC_TPL_AICORE // 算子执行时仅会启动AI Core
  • ASCENDC_TPL_VECTORCORE // 该参数为预留参数,当前版本暂不支持
  • ASCENDC_TPL_MIX_AICORE // 该参数为预留参数,当前版本暂不支持
  • ASCENDC_TPL_MIX_VECTOR_CORE // 算子执行时会同时启动AI Core和Vector Core

本接口只允许与ASCENDC_TPL_SHARED_KERNEL_TYPE_SEL(args0, ...)配合使用。

表 2Tiling模板参数组合定义

功能描述

参数解释

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类型的模板参数组合。

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

ASCENDC_TPL_DATATYPE_SEL(args0, ...)

原生DataType类型的模板参数组合

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

ASCENDC_TPL_FORMAT_SEL(args0, ...)

Format类型的模板参数组合。

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

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_TILING_STRUCT_SEL(args0)

用于为当前模板参数组合指定Tiling结构体,该结构体不作为核函数模板参数传入。

args0:表示当前模板参数组合使用的Tiling结构体名。该接口只能在ASCENDC_TPL_ARGS_SEL(...)中使用,不参与ASCENDC_TPL_SEL_PARAM(...)或GET_TPL_TILING_KEY(...)的参数顺序,也不参与TilingKey编码。

未配置本接口的模板参数组合,将使用REGISTER_TILING_DEFAULT注册的默认Tiling结构体。使用本接口时,必须通过REGISTER_TILING_DEFAULT提供默认Tiling结构体。

ASCENDC_TPL_SHARED_KERNEL_TYPE_SEL(args0, ...)

设置算子模板参数组合的Kernel类型,该参数可以作为核函数的模板参数传入。

args0: 参数名

args1-argsn: 该模板参数组合下,算子的Kernel类型,后续参数为若干Kernel类型。该接口不能与ASCENDC_TPL_KERNEL_TYPE_SEL接口同时使用。

若同时使用KERNEL_TASK_TYPE_DEFAULT(value)接口,本接口优先级更高。

返回值说明

无。

约束说明

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

【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C++标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/855848/

相关文章:

  • cann/asc-devkit SIMT数学函数
  • 掌握gibMacOS:三步实现高效获取macOS安装文件的完整方案
  • 告别枯燥例程:用STM32F4的CAN总线做个简易‘聊天室’(附代码)
  • python海龟绘图之对话框
  • UE5运行时动态调整游戏视口:解决UI遮挡导致物体位置偏移的实战方案
  • CANN/asc-devkit:__half2half_rn函数文档
  • CANN asc-devkit UnknownShapeFormat废弃API
  • 多功能手持仪设计:从传感器融合到低功耗架构的工程实践
  • 掌握WiX Toolset:从零打造专业级Windows安装包的完整指南
  • 3步解锁iOS应用自由:AltStore免越狱安装终极指南
  • CANN/asc-devkit half类型精度转换函数
  • 别再手动敲命令了!用这个Shell脚本5分钟搞定Kerberos集群部署(附避坑指南)
  • 54、CAN总线共模扼流圈选型与滤波电路设计
  • PHP Intelephense与Composer依赖管理:提升PHP开发效率的终极指南
  • 如何在5分钟内安装BepInEx:游戏模组框架终极完整指南
  • 火绒弹窗总提示msedgewebview2联网?别慌,这是Office在线编辑在“敲门”
  • 2026年靠谱的大连电梯特种柔性电缆/起重设备特种柔性电缆精选推荐公司 - 品牌宣传支持者
  • 实战指南:利用Rufus创建Windows 11安装U盘并绕过硬件限制的完整方案
  • SpringBlade最佳实践完全清单:企业级开发规范
  • 别再只会用默认符号了!手把手教你用ArcGIS 10.8制作专业地形图点线面符号(附符号库文件)
  • TEAMMATES教育神器:免费在线同伴评估工具的完整指南
  • swagger-jsdoc 最佳实践:确保高质量 API 文档的 7 个技巧
  • Interstellar代码架构解析:Express.js与Bare服务器的完美结合
  • 保姆级教程:用ESP8266-01S和Blinker App,5分钟搞定手机远程开关灯(附完整代码)
  • CANN/asc-devkit AI Core注册接口
  • 如何用Sequin将Postgres变更实时流式传输到Kafka:完整指南 [特殊字符]
  • G-Helper实用指南:华硕笔记本性能调优与自动化管理配置模板
  • TeamPass角色权限管理终极指南:如何配置精细化的访问控制
  • 55、CAN总线差分信号线对滤波电容的布局策略
  • 精选六款免费学编程 APP 小白自学全程够用