asc-devkit 算子原型注册:使用 OpAICPUDef::KernelSo 配置 AICPU 算子动态库名称
人工智能深度学习算子库CANNAscend【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址https://gitcode.com/cann/asc-devkit点击查看免费下载本文是 CANN asc-devkit 算子原型注册与管理prototype register management系列中的一篇 API 实战指南核心讲解 OpAICPUDef 的KernelSo配置接口它用于指定 AI CPUAICPU算子实现文件编译生成的动态库.so文件名称是自定义 AICPU 算子原型定义中把核函数实现产物与算子注册信息关联起来的关键一环。读完本文你将掌握KernelSo的签名、参数语义与链式调用方式并理解它和 AI CPU 算子编译、OP_ADD原型注册流程之间的完整关系。KernelSo 是什么一句话定位在 asc-devkit 的算子原型注册体系中算子原型通过一个继承自OpDef的 C 类承载详见算子原型定义而 AI CPU 算子的实现信息由OpAICPUDef描述。OpDef::AICPU() 返回OpAICPUDef引用开发者在该引用上链式调用Engine、OpkernelLib、KernelSo、FunctionName等接口完成 AICPU 算子配置。KernelSo的职责非常单一明确配置 AICPU 算子实现文件编译生成的动态库文件的名称。也就是说开发者编写的 AICPU 算子核函数实现.aicpu文件或-x aicpu方式编译的.cpp文件最终会被编译成动态库.soKernelSo(...)中的字符串值即用于向框架声明这个动态库的名字供算子调度与加载时定位使用。它属于部署前注册信息与OpkernelLib固定为CUSTAICPUKernel、FunctionName固定为RunCpuKernel等配置共同构成 AICPU 自定义算子被框架识别、编译和执行所需的完整描述。函数原型与参数语义KernelSo的函数原型如下OpAICPUDef KernelSo(const char *value)参数说明参数输入/输出说明value输入AI CPU 算子实现文件编译生成的动态库文件的名称其中value是const char *类型的字符串应当与编译 AICPU 算子实现文件后产出的动态库文件名保持一致。例如使用bisheng -shared -x aicpu编译出的libxxx.so其库名通常即对应此处的value。建议在原型定义中显式、准确填写避免算子注册信息与实际产物名称不一致导致运行时无法定位实现库。返回值说明返回类型为OpAICPUDef 即返回算子定义对象自身的引用支持继续链式调用其他配置接口例如this-AICPU() .Engine(DNN_VM_AICPU) .OpkernelLib(CUSTAICPUKernel) .KernelSo(libxxx.so) .FunctionName(RunCpuKernel);关于OpAICPUDef的完整说明请参考 OpAICPUDef。约束说明无。KernelSo没有额外使用约束但需注意其语义强依赖编译产物命名实际开发中应保证配置值与构建产物一致。使用场景AICPU 算子原型注册流程KernelSo出现在 AICPU 自定义算子原型定义阶段。整体流程如下编写 AICPU 算子实现以.aicpu为后缀或.cpp-x aicpu编译选项定义__global__ __aicpu__修饰的核函数例如仓库示例 aicpu_tiling.aicpu 中的MyAicpuKernel。AI CPU 编程规范详见 AI CPU编程。编译生成动态库使用bisheng或 CMake 将实现文件编译为.so。在 Host 侧原型文件中通过继承OpDef的算子类构造函数调用this-AICPU()获取OpAICPUDef链式配置Engine、OpkernelLib、KernelSo、FunctionName等。在文件末尾通过OP_ADD(opType)注册算子类型见 OP_ADD编译工具据此识别算子原型并生成 aclnn 接口、图模式原型等相关代码。一个典型的 AICPU 原型定义骨架如下namespace ops { class AddCustom : public OpDef { public: explicit AddCustom(const char* name) : OpDef(name) { // 输入输出、属性定义Input/Output/Attr this-Input(x) .ParamType(REQUIRED) .DataType({ge::DT_FLOAT16}) .Format({ge::FORMAT_ND}); this-Output(z) .ParamType(REQUIRED) .DataType({ge::DT_FLOAT16}) .Format({ge::FORMAT_ND}); // AICPU 实现信息引擎、kernelLib、动态库名称、核函数接口名 this-AICPU() .Engine(DNN_VM_AICPU) .OpkernelLib(CUSTAICPUKernel) .KernelSo(libadd_custom_aicpu.so) .FunctionName(RunCpuKernel); } }; OP_ADD(AddCustom); } // namespace ops与 KernelSo 配套的 OpAICPUDef 配置项速查KernelSo是OpAICPUDef提供的众多链式配置接口之一。为了正确填写原型定义下表汇总了同系列接口的固定取值要求均可在原型注册与管理目录下找到对应 API 文档接口功能取值要求Engine配置算子调用的引擎固定为DNN_VM_AICPUOpkernelLib配置算子调用的 kernelLib固定为CUSTAICPUKernelKernelSo配置实现文件编译生成的动态库名称与编译产物.so名称一致FunctionName配置核函数Kernel接口名称固定为RunCpuKernelUserDefined配置是否为用户自定义算子仅支持True缺省默认为TrueComputeCost预留参数固定为100FlagPartial预留参数固定为FalseFlagAsync预留参数固定为FalseExtendCfgInfo额外添加键值对形式的扩展配置keyvalue自定义从这张表可以推断KernelSo是整个 AICPU 注册信息中唯一需要开发者根据自己工程实际填写产物名称的字段其余多数字段都是框架约定的固定值因此它也是最容易因拼写或命名不一致而引发问题的配置项。深度原理KernelSo 对应的动态库从何而来KernelSo的取值不是凭空约定而是与 AI CPU 算子的编译产物一一对应。仓库中的 AI CPU算子编译 文档说明了动态库的生成方式与 AI Core 算子只需一个.asc文件即可编译不同AI CPU 算子需要同时包含.aicpu文件核函数定义和.asc文件通过内核调用符调用核函数才能编译生成可执行文件。当需要把 AI CPU 算子实现打包为动态库时使用 bisheng 命令行# 编译 test_aicpu.cpp 生成算子动态库 # -lxxx 表示默认链接库 bisheng -shared -x aicpu test_aicpu.cpp -o libtest_aicpu.so -lxxx ...其中-shared/--shared编译生成动态链接库-x aicpu指定编译语言为 AICPU表明编译的是 AI CPU 算子编程语言代码-o libtest_aicpu.so指定输出动态库文件名该名称正是KernelSo(...)中应填写的值。若单独编译 AI CPU 算子代码生成动态库、静态库需要手动链接内置链接库如ascendc_runtime、ascendcl、runtime等。使用 CMake 时同样可以将.aicpu文件直接打入动态库例如# 将 .cpp 文件置为 AICPU 属性支持 AI CPU 算子编译 set_source_files_properties( aicpu_kernel.cpp PROPERTIES LANGUAGE AICPU ) add_library(kernel_lib SHARED add_custom_base.cpp aicpu_kernel.cpp # 支持 AI CPU 算子与 AI Core 算子一起打包为动态库 )从上述编译链路可以推断KernelSo本质上是在算子原型注册信息中登记运行时按名加载的库文件标识——框架拿到算子注册信息后需要根据这个名称在部署目录中找到对应的.so再结合FunctionNameRunCpuKernel定位库内核函数入口。因此动态库名称的拼写、大小写与编译输出必须严格一致这是KernelSo配置正确的核心要求。实际工程中的注意事项结合仓库文档与示例使用KernelSo时有几点值得留意产物命名一致性KernelSo的值应与bisheng -shared -x aicpu ... -o name或 CMakeadd_library(... SHARED)产出的库文件名一致。若使用默认库前缀lib请确认注册时填写的字符串与最终文件名匹配。与固定字段协同AICPU 自定义算子的Engine固定为DNN_VM_AICPU、OpkernelLib固定为CUSTAICPUKernel、FunctionName固定为RunCpuKernel不要擅自改动这些约定值见各字段文档的取值要求。原型注册位置KernelSo的调用位于 Host 侧算子原型文件如op_host/add_custom.cpp中自定义算子类的构造函数内通过this-AICPU()进入OpAICPUDef配置链最终由文件末尾的OP_ADD(AddCustom)完成注册详见算子原型定义。可参考仓库样例04_aicpu 样例 展示了 AICPU 算子含 Tiling 下沉从核函数实现到工程组织的完整形态其中 aicpu_tiling.aicpu 演示了__global__ __aicpu__核函数的标准写法可作为编写实现文件、进而配置KernelSo的参照。总结OpAICPUDef::KernelSo是 asc-devkit 自定义 AICPU 算子原型注册中的一个小而关键的配置接口它用一个字符串把算子原型和算子实现编译产出的动态库绑定起来。掌握它的签名OpAICPUDef KernelSo(const char *value)、取值语义与.so编译产物名称一致以及在OpAICPUDef链式配置中的位置再结合Engine、OpkernelLib、FunctionName等固定字段和OP_ADD注册流程即可完整、正确地完成一个 AICPU 自定义算子的原型定义与注册。赞分享人工智能深度学习算子库CANNAscend【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址https://gitcode.com/cann/asc-devkit点击查看免费下载相关推荐asc-devkit 算子原型注册OpAICPUDef::Engine 接口详解与 AICPU 算子引擎配置实战asc devkit 算子原型注册OpAICPUDef::Engine 接口详解与 AICPU 算子引擎配置实战 本篇技术指南围绕 asc devkitCA人工智能深度学习算子库CANNAscendasc-devkit 算子原型注册系列OpAICPUDef::ExtendCfgInfo 扩展配置接口详解asc devkit 算子原型注册系列OpAICPUDef::ExtendCfgInfo 扩展配置接口详解 导读 ExtendCfgInfo 是 asc de人工智能深度学习算子库CANNAscendasc-devkit 算子原型注册详解OpAICPUDef::FlagAsync 预留参数的语义与正确用法asc devkit 算子原型注册详解OpAICPUDef::FlagAsync 预留参数的语义与正确用法 导读 FlagAsync 是 CANN asc d人工智能深度学习算子库CANNAscend上一篇LiteLLM Grafana 监控看板实战导入 gen_ai 与 litellm_* 指标 JSON读懂每一块 Panel 的 PromQL下一篇TypeScript 与 React Native Game Engine完整的类型安全游戏开发创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Firefox Decrypt 使用教程

Firefox Decrypt 使用教程

Firefox Decrypt 使用教程 【免费下载链接】firefox_decrypt Firefox Decrypt is a tool to extract passwords from Mozilla (Firefox™, Waterfox™, Thunderbird, SeaMonkey) profiles 项目地址: https://gitcode.com/gh_mirrors/fi/firefox_decrypt 1. 项目的目录结…

2026/10/16 1:35:40 阅读更多 →
ESP-IDF 快速安装指南:EIM 一键装好开发环境,3 步烧录首个固件

ESP-IDF 快速安装指南:EIM 一键装好开发环境,3 步烧录首个固件

ESP-IDF 快速安装指南:EIM 一键装好开发环境,3 步烧录首个固件 【免费下载链接】esp-idf Espressif IoT Development Framework. Official development framework for Espressif SoCs. 项目地址: https://gitcode.com/GitHub_Trending/es/esp-idf …

2026/10/16 1:35:40 阅读更多 →
LAMMPS fix polarize 系列命令详解:DIELECTRIC 包中界面感应电荷的三种求解方法

LAMMPS fix polarize 系列命令详解:DIELECTRIC 包中界面感应电荷的三种求解方法

科研科学计算高性能计算 【免费下载链接】lammps Public development project of the LAMMPS MD software package 项目地址: https://gitcode.com/gh_mirrors/la/lammps 点击查看 免费下载 在含电解质界面的介电系统中(如疏水壁、胶体、脂质双分子层&…

2026/10/16 1:35:40 阅读更多 →

最新新闻

微信小程序圆环组件开发:Canvas 2D与CSS方案选型及性能优化实战

微信小程序圆环组件开发:Canvas 2D与CSS方案选型及性能优化实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:13:02 阅读更多 →
interface 的底层原理

interface 的底层原理

深入浅出 Go 语言:Interface 的底层实现原理在 Go 语言中,接口(interface)是实现多态和解耦的核心机制。与其他面向对象语言不同,Go 采用的是“隐式实现”(Duck Typing,鸭子类型)——…

2026/10/16 3:13:02 阅读更多 →
【C++入门】编译链接模型 - 08 静态库为什么像一包目标文件

【C++入门】编译链接模型 - 08 静态库为什么像一包目标文件

博主介绍:程序喵大人 35 - 资深C/C/Rust/Android/iOS客户端开发10年大厂工作经验嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手《C20高级编程》《C23高级编程》等多本书籍著译者更多原创精品文章,首发gzh,见文末👇&#x…

2026/10/16 3:13:02 阅读更多 →
重复测量数据全攻略:2026 一篇讲透论文重复测量实验设计,把变量控制与记录规范讲清

重复测量数据全攻略:2026 一篇讲透论文重复测量实验设计,把变量控制与记录规范讲清

同一批被试在四个时间点各测一次,交到导师手里却被追问「你的实验设计写在哪」。重复测量方差分析、线性混合模型这些名称不难写,难的是交代清楚每次观测为何落在这个时点、谁在中途退出、缺失值依据什么规则处置。下文从自变量控制、测量间隔、批次安排…

2026/10/16 3:13:02 阅读更多 →
信贷风控用户画像实战:从标签体系到贷前贷中贷后策略落地

信贷风控用户画像实战:从标签体系到贷前贷中贷后策略落地

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:13:02 阅读更多 →
Java字符串转数字的正确方法

Java字符串转数字的正确方法

java中把字符串转成 的方法更新时间为二零二三年七月七日零九点四十分零三秒, 作者是。在Java环境里头, 大家可以利用某个类里面的那个叫作静态的方法, 把一段写着数字的字符串变成对应那种类型的数, 这篇文章会配上一些具体的代码例子, 来把这个事情从字符串弄成具体数值的过程…

2026/10/16 3:12:01 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →