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

news2024/9/22 9:54:49

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

文章目录

    • 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阶段拷出数据
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2091087.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从零开始学cv-9:图像滤波

文章目录 前言一、简介&#xff1a;二、图像滤波实现&#xff1a;2.1 均值滤波&#xff1a;2.2 高斯滤波&#xff1a;2.3 中值滤波&#xff1a;2.4 锐化滤波&#xff1a; 前言 在信息化时代&#xff0c;图像已成为人们获取信息、沟通交流的重要载体。随着科技的飞速发展&#…

《高等代数》范德蒙德行列式的证明

说明&#xff1a;此文章用于本人复习巩固&#xff0c;如果也能帮助到大家那就更加有意义了。 注&#xff1a;1&#xff09;利用数学归纳法证明范德蒙德行列式。 2&#xff09;将范德蒙德行列式最后一列除了“1”以外都化为“0”&#xff0c;再按照最后一列展开。 3&#xff09…

Python编码系列—Python项目架构的艺术:最佳实践与实战应用

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

线段树解决区间合并类问题

如果只维持一段区间连续1的最长字串长度是无法被线段树维护的&#xff1a;所以可以增加信息来共同维护 1.维护三个信息&#xff1a;连续1的最长字串长度、连续1的最长前缀长度、连续1的最长后缀长度 2.如果一段区域连续1的长度小于区域的总长度&#xff1a; 3.如果一段区域连续…

力扣376-摆动序列(java详细题解)

题目链接&#xff1a;https://leetcode.cn/problems/wiggle-subsequence/ 前情提要&#xff1a; 因为本人最近都来刷贪心类的题目所以该题就默认用贪心方法来做。 贪心方法&#xff1a;局部最优推出全局最优。 如果一个题你觉得可以用局部最优推出全局最优&#xff0c;并且…

最新时光邮局系统,给未来写封信系统PHP源码美化版

源码介绍 最新时光邮局系统&#xff0c;给未来写封信系统PHP源码美化版视频教程。 给未来写封信开源源码&#xff0c;本源码支持用户给未来某个人发送一封信。前端采用MDUI框架后端对于定时发信采用screenphp的方式,未来将会增加其稳定性&#xff0c;寄出的信是可以在数据库查…

绝区零苹果电脑能玩吗,如何在Mac上玩绝区零?绝区零MacBook 下载安装保姆级教程

《绝区零》是一款由米哈游开发的都市动作冒险游戏&#xff0c;游戏的故事背景设定在一个名为「新艾利都」的现代化大都市中&#xff0c;玩家将扮演一对「绳匠」兄妹展开冒险。很多玩家都在问苹果电脑笔记本Mac怎么玩绝区零&#xff0c;今天就给大家介绍一下《绝区零》是一款什么…

信息打点-CDN绕过篇漏洞回链接口探针全网扫描反向邮件

知识点&#xff1a; 0、CDN知识-工作原理及阻碍 1、CDN配置-域名&区域&类型 2、CDN绕过-靠谱十余种技战法 3、CDN绑定-HOSTS绑定指向访问 CDN的全称是Content Delivery Network&#xff0c;即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和…

小程序列表滚动加载下一页数据功能实现指南

在前端小程序开发中&#xff0c;列表页是用户交互的核心部分之一。为了提高用户体验和页面响应速度&#xff0c;实现列表的滚动加载&#xff08;也称为“无限滚动”或“懒加载”&#xff09;功能显得尤为重要。本篇文章将详细介绍如何在小程序中实现这一功能&#xff0c;并提供…

基于vue框架的畅饮水站业务管理系统0wf4k(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;员工,会员,矿泉水,订单信息,派送任务,派送进度,评价记录,空桶回收,员工考勤,员工工资 开题报告内容 基于Vue框架的畅饮水站业务管理系统开题报告 一、研究背景与意义 随着健康意识的不断提升&#xff0c;直饮水、纯净水等健康饮水方式…

关于Seata的AT模式以及XA模式的理解

AT 模式 &#xff08;最终一致性&#xff09;的特点是性能较高&#xff0c;因为它只在第一阶段获取锁&#xff0c;在第一阶段提交后释放锁。相比之下&#xff0c;XA 模式&#xff08;强一致性&#xff09;需要在整个事务过程中占用数据库锁&#xff0c;因此性能相对较低。但是&…

为什么在JDBC中使用PreparedStatement?

为什么在JDBC中使用PreparedStatement&#xff1f; &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在JDBC编程中&#xff0c;PreparedStatement 因其以下优势而备受推崇&#xff1a; 性能提升&#xff1a;预编译的SQL语句可快速执行&#…

【C++11及其特性】explicit关键字

explicit关键字目录 一.explicit的含义1.中文含义2.用法 二.显示构造和隐式构造1.源码2.显示构造---()3.隐式构造---4.加上关键字 三.explicit作用 一.explicit的含义 1.中文含义 2.用法 写在构造函数前,那么在创建对象时就只能显示构造了,默认情况下是显示构造和隐式构造都可…

ctfshow之web55~web57(无字母的rce)

目录 web55 思路一&#xff1a; 思路二&#xff1a; web56 web57 本系列主要针对无字母rce或无字母无数字rce 声明&#xff1a;本章内容是引荐几位师傅的博客&#xff0c;然后根据自己的理解编写而成。 web55 if(isset($_GET[c])){$c$_GET[c];if(!preg_match("/\…

.net dataexcel winform控件 更新 日志

增加 列宽度调整时动态显示列象素大小 更改列的宽度可以使用 column.Width属性进行修改

文章解读与仿真程序复现思路——电网技术@EI\CSCD\北大核心《基于双缓冲区生成对抗模仿学习的电力系统实时安全约束经济调度》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

线段树维护更多类型的信息

P3870 [TJOI2009] 开关 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) sum维护一段区域的和&#xff1b;revers记录翻转懒信息&#xff1b; lazy&#xff1a;灯泡翻转后个数就是之前不亮的个数&#xff0c;revers变为原来的反 #include <iostream> using namespace s…

代码随想录第十九天 | 110.平衡二叉树,257. 二叉树的所有路径,404.左叶子之和,222. 完全二叉树的节点个数

110. 平衡二叉树 第一想法&#xff1a;首先要明确平衡二叉树的定义&#xff1f;左右节点的高度差不超过1&#xff1f;不会概念感觉无法下手... 返回参数返回int,为了标记已经不是平衡二叉树&#xff0c;用-1作标记 int traversal(TreeNode* root){if(rootnullptr) return 0;…

Linux_kernel烧写Uboot02

一、温故知新 1、开发环境 Ubuntu的Linux操作系统(18.04 20.04 22.04) 前面的版本号是双数&#xff0c;后面的版本号是04 lsb_release -a 用于查看系统版本号 uname -a 查看系统位数/内核版本号 2、体系架构 APP 各种控制界面\通…

数据库 变更和版本控制管理工具 --Bytebase 安装部署

数据库 变更和版本控制管理工具 --Bytebase 安装部署 文章目录 数据库 变更和版本控制管理工具 --Bytebase 安装部署前言一.Docker部署Bytebase1.Docker 配置2. pull 数据3. 执行部署4. 打开浏览器 部署完成 二、使用步骤1.注册超管2.配置 Configure External URL 总结 前言 B…