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

Ascend C算子开发(入门)—— 算子开发初体验

在这里插入图片描述
在这里插入图片描述

文章目录

    • Ascend C算子开发(入门)—— 算子开发初体验
        • Host与Device
        • 核函数
          • 什么是核函数
          • 如何编写核函数?
        • 核函数实现例子——Hello World
        • 完整核函数泛讲

Ascend C算子开发(入门)—— 算子开发初体验

Host与Device
  • Host指与Device相连接的x86服务器,ARM服务器,会利用Device提供的NN(Neural Network)计算能力完成任务。
  • Device模块指安装了昇腾AI处理器的硬件设备,利用PCle接口与Host侧连接,提供NN计算能力。

以下图为例,理解传统计算机中Host端和Device端的概念。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

而CANN框架中的Host和Device的概念不过是,将Device端的显卡部分替换成华为AI加速卡。

在这里插入图片描述

核心需要编写在AI Core上的代码。

核函数
什么是核函数

核函数是跑在AI Core上的,是Ascend C算子设备测的入口,用户使用核函数这种C/C++函数的语法扩展来管理设备测的运行代码,用户在核函数中实现算子逻辑的编写,例如自定义算子类及其成员函数以实现该算子的所有功能。核函数是主机侧核设备侧连接的桥梁。

在这里插入图片描述

如何编写核函数?

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

核函数实现例子——Hello World

HelloWorld——实现(Device端)

#include "kernel_operator.h"
using namespace AscendC;
// 核函数实现
extern "C" __global__ __aicore__ void hello_world(){printf("Hello World!!!\n");
}
// 核函数调用
void hello_world_do(uint32_t blockDim, void* stream){hello_world<<<blockDim,nullptr,stream>>>();
}

HelloWorld——调用(Host端)

hello_world_do(blockDim,stream);
aclrtSynchronizeStream(stream);// 阻塞,等待所有队列任务执行完成。
完整核函数泛讲

在这里插入图片描述

在核函数中完成初始化和数据处理,初始化阶段找到核需要计算的GlobalMemory,Process对每一段数据进行拷入、计算和拷出。

copyin阶段完成了将数据从Device端的显存移动到AICore中(从GlobalMemory到LocalMemory),当将数据拷入时,先放入一个队列,计算时将数据从队列拿出来做计算并放到另一个队列中。

compute阶段完成计算

Memory),当将数据拷入时,先放入一个队列,计算时将数据从队列拿出来做计算并放到另一个队列中。

compute阶段完成计算

copyout阶段拷出数据
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C++ 学习 2024.9.3
  • C++ MQTT客户端库libmosquitto的使用
  • 编译与链接
  • ChatTCP:一款离线TCP数据包分析macOS APP,致力于让分析TCP数据包像看聊天记录一样简单
  • 【QT】析构函数执行引发异常
  • MATLAB 中双引号 ““ 和单引号 ‘‘ 的区别详解
  • 设计模式-原型适配器桥接外观
  • Pixelmator Pro for Mac 专业图像处理软件【媲美PS的修图软件】
  • 【openwrt-21.02】T750 openwrt-21.02 Linux-5.4.238 input子系统----gpio-keys实现分析
  • MySQL5.7配置优化
  • Shell教程_在Bash_Shell中使用for循环详解
  • 《Rust避坑入门记》第1章:挖数据竞争大坑的滥用可变性
  • 2.SpringBoot项目pom.xml文件配置
  • ASP.NET Core 入门教学五 集成日志
  • Linux:手搓shell
  • Android单元测试 - 几个重要问题
  • Android优雅地处理按钮重复点击
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • Fastjson的基本使用方法大全
  • leetcode46 Permutation 排列组合
  • LeetCode算法系列_0891_子序列宽度之和
  • Linux后台研发超实用命令总结
  • Making An Indicator With Pure CSS
  • Shadow DOM 内部构造及如何构建独立组件
  • SpiderData 2019年2月23日 DApp数据排行榜
  • Vue2.x学习三:事件处理生命周期钩子
  • 规范化安全开发 KOA 手脚架
  • 前端面试总结(at, md)
  • 深入浏览器事件循环的本质
  • 使用parted解决大于2T的磁盘分区
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 用element的upload组件实现多图片上传和压缩
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​水经微图Web1.5.0版即将上线
  • # C++之functional库用法整理
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (3)STL算法之搜索
  • (不用互三)AI绘画工具应该如何选择
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (回溯) LeetCode 131. 分割回文串
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (四)opengl函数加载和错误处理
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (转)c++ std::pair 与 std::make
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .Net Remoting(分离服务程序实现) - Part.3
  • .net 提取注释生成API文档 帮助文档
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装