【AscendC算子开发】笔记1 算子开发哲学

重看这门课,有很多内容的认识更深了,做一些记录。

为什么不能将网络节点融合

这个问题关联到另一个问题:为什么我们需要激活函数?
使用线性的神经元堆叠得到的方程最后也是线性方程,无法表征非线性的信息,但生活中很多信息是非线性的。因此需要通过激活函数将一个线性关系变为非线性关系,多层非线性的网络堆叠可以拟合更复杂的非线性关系。
因此由于激活函数的存在,无法将各层的网络结点进行融合。

如何快速了解一个模型的计算图

Tensorflow可以通过tensorboard展现,mindspore可以通过mind slight展现。

算子运行

算子运行有很多种方式,其中较为简单的是KernelLaunch的方式。
在这里插入图片描述

算子开发圣经

在这里插入图片描述

AscendC处理器的结构

在这里插入图片描述
可以看到,处理器本质上是一套异构计算系统。

为什么需要CopyIn和CopyOut操作

昇腾AI处理器的逻辑见上图,可以看到,片上层次化存储和AICore还有距离,因此需要将数据拷贝到AI Core中,可以理解为从内存拷贝到寄存器。

什么是孪生调试

在CPU侧可以模拟NPU侧的效果,进行算子的开发和调试。

算子开发

在这里插入图片描述
kernel函数的签名必须以void作为返回值类型,在kernel中需要返回的值,通过形参指针的方式进行传递。
在这里插入图片描述
也提供了上述的宏来遍历参数定义。
在这里插入图片描述

aclrt是什么

AscendCL是在算子上层的API,Compute Language用于封装算子的调用,将API开放给上层的深度学习框架。
因此在调用算子的main.cpp文件中会有很多aclrt的命令。aclrt指的就是AsendCL runtime。

昇腾社区文件说明

在这里插入图片描述

算子CPU运行命令

bash run.sh -r cpu -v Ascend310P1

为什么需要数据管理,以及AscendC中如何进行数据的同步和通信

在这里插入图片描述
为了更大限度的提高并行度,在系统的同一时间既有数据搬入、也有计算、也有数据搬出(大多数情况下,除了开始和结尾的几个小的时间片)。那么这些不同的数据之间就有了同步的要求,否则的话对于并行的任务无法正确的进行计算。
AscendC中使用到一个Queue队列来完成任务之间的数据通信和同步,使用不同的逻辑任务来确保AI core能够正确的操作数据。
在这里插入图片描述
在上面这张图中可以更清晰的看到,队列就像一个生产者-消费者模型,通过这个队列就完美的解决了并行任务的数据依赖问题。

Host侧算子开发

在这里插入图片描述
具体的各个过程看下图:
在这里插入图片描述

如何定义Tiling

在这里插入图片描述

标准流程和快速流程的区别

前者是自定义算子FrameworkLaunch模式,后者是快速流程的KernelLaunch模式。
类似于自己写代码和写库代码的区别,自己写代码就会写调用和测试,写库代码的话就不需要这样。

生成工程框架

在这里插入图片描述
可以通过上述工具生成标准算子工程框架。

不同的编译方式

在这里插入图片描述

高维切分

在这里插入图片描述
一个repeat可以取256B的数据,repeat times控制迭代的次数。
block_stride控制block间的stride值。
在这里插入图片描述
在这里插入图片描述
上面这段在说啥呢? 其实说的就是计算的API,比如最简单的四则运算,在实现复杂的算子时,可能需要使用到这些小算子的结合,在结合过程中,需要灵活的取数据和计算方式,因此需要提供上述的几个参数。

内存管理

TQue有两个逻辑位置:VECIN,VECOUT
TBuf有一个逻辑位置:VECCALC

高阶API

在这里插入图片描述

在这里插入图片描述
高阶API还可以支持用户分配的内存传入作为临时存储,此时可以通过这个函数计算API需要的缓存大小。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

软考(网工)——网络安全

文章目录 🕐网络安全基础1️⃣网络安全威胁类型2️⃣网络攻击类型 🕑现代加密技术1️⃣私钥密码/对称密码体制2️⃣对称加密算法总结3️⃣公钥密码/非对称密码4️⃣混合密码5️⃣国产加密算法 - SM 系列6️⃣认证7️⃣基于公钥的认证 🕒Hash …

Node.js:深入探秘 CommonJS 模块化的奥秘

在Node.js出现之前,服务端JavaScript基本上处于一片荒芜的境况,而当时也没有出现ES6的模块化规范。因此,Node.js采用了当时比较先进的一种模块化规范来实现服务端JavaScript的模块化机制,它就是CommonJS,有时也简称为C…

react18中使用redux管理公共数据仓库实现数据immutable更新

Immutable.js出自Facebook,是最流行的不可变数据结构的实现之一。它实现了完全的持久化数据结构,使用结构共享。所有的更新操作都会返回新的值,但是在内部结构是共享的,来减少内存占用。Immutablejs官网 在上一篇介绍redux的文章&…

数字IC后端实现 | Innovus各个阶段常用命令汇总

应各位读者要求,小编最近按照Innovus流程顺序整理出数字IC后端项目中常用的命令汇总。限于篇幅,这次只更新到powerplan阶段。有了这份Innovus常用命令汇总,学习数字IC后端从此不再迷路!如果大家觉得这个专题还不错,想继…

实验:使用Oxygen发布大型手册到Word格式

此前,我曾发表过一篇文章《结构化文档发布的故事和性能调优》,文中讨论了在将大型DITA手册转换为PDF格式时可能遇到的性能挑战及相应的优化策略。 近日,有朋友咨询,若将同样的大型手册输出为MS Word格式,是否也会面临…

MongoDB Shell 基本命令(三)生成学生脚本信息和简单查询

一、生成学生信息脚本 利用该脚本可以生成任意个学生信息,包括学号、姓名、班级、年级、专业、课程名称、课程成绩等信息,此处生成2万名学生,学生所有信息都是给定范围后随机生成。 生成学生信息后,再来对学生信息进行简单查询。…

Java 开发——(上篇)从零开始搭建后端基础项目 Spring Boot 3 + MybatisPlus

一、概述 记录时间 [2024-10-23] 本文是一个基于 Spring Boot 3 MybatisPlus 的项目实战开发,主要涵盖以下几个方面: 从零开始的项目创建IDEA 中开发环境的热部署Maven、Swagger3、MybatisPlus 等的配置路由映射知识静态资源访问文件上传功能实现拦截器…

探寻闲鱼libsgmain加解密算法(4) ——JNI入口跳转

关注我的人都知道我一直在学习阿里的加密和算法,除了研究逆向问题,还会把学来的阿里技术用在自己的应用上。 为什么?因为学习大厂的应用,是进步最快的方法。而大厂在安全和加密方面的技术,个人觉得阿里做的是最好的。 …

个体能量的勇气层级是否容易达到?

没有勇气面对现实,没有勇气改变自我,没有勇气改变环境,没有勇气创新创造。 这是常态。 如何找寻高质量免费机器人工程资源自学提升-CSDN博客 个人能力的提升,也包括个体能量的提升。 个体能量是个人能力的一个非常重要的衡量指…

Spring Boot整合Stripe订阅支付指南

在当今的在线支付市场中,Stripe 作为一款一体化的全球支付平台,因其易用性和广泛的支付方式支持,得到了许多企业的青睐。本文将详细介绍如何在 Spring Boot 项目中整合 Stripe 实现订阅支付功能。 1.Stripe简介 Stripe 是一家为个人或公司提…

C语言实现Go的defer功能

之前笔者写了一篇博文C实现Go的defer功能,介绍了如何在C语言中实现Go的defer功能,那在C语言中是否也可以实现这样的功能呢?本文就将介绍一下如何在C语言中实现Go的defer功能。 我们还是使用C实现Go的defer功能中的示例: void te…

【每日一题】LeetCode - 判断回文数

今天我们来看一道经典的回文数题目,给定一个整数 x ,判断它是否是回文整数。如果 x 是一个回文数,则返回 true,否则返回 false。 回文数 是指从左往右读和从右往左读都相同的整数。例如,121 是回文,而 123 …

nuxt3项目创建

安装 npx nuxilatest init <project-name> 此时会出现报错&#xff0c;需要在host文件中加入 185.199.108.133 raw.githubusercontent.com 再次执行命令&#xff0c;进入安装 此处选择npm&#xff0c;出现下图表示安装成功 启动项目 执行npm run dev&#xff0c;访…

《皮革制作与环保科技》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问&#xff1a;《皮革制作与环保科技》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的正规学术期刊。 问&#xff1a;《皮革制作与环保科技》级别&#xff1f; 答&#xff1a;国家级。主管单位&#xff1a;中国轻工业联合会 …

深度学习-循环神经网络-LSTM对序列数据进行预测

项目简介: 使用LSTM模型, 对文本数据进行预测, 每次截取字符20, 对第二十一个字符进行预测, LSTM层: units100, activationrelu Dense层: units输入的文本中的字符种类, 比如我使用的文本有644个不同的字符, 那么units64 激活函数: 因为是多分类, 使用softmax 因为这是最…

已解决 django.db.utils.OperationalError: (1051, “Unknown table

报错信息&#xff1a; django.db.utils.OperationalError: (1051, "Unknown table bjybolg.tool_submission")python manage.py migrate --fake 命令用于告诉 Django 假装已经应用某个迁移&#xff0c;而不实际执行该迁移的操作。这通常在以下情况下非常有用&#x…

【大模型理论篇】大模型压缩技术之注意力层剪枝以及与MLP层联合剪枝

1. 背景分析 本来打算写一篇关于大模型蒸馏的文章&#xff0c;但刚好看到近期发表的一篇讨论大模型压缩的文章【1】&#xff0c;是关于注意力机制冗余性的讨论&#xff0c;比较有意思&#xff0c;作者分析得出并不是所有的注意力都是必须的&#xff0c;可以通过对模型去除冗余的…

鸿蒙中富文本编辑与展示

富文本在鸿蒙系统如何展示和编辑的&#xff1f;在文章开头我们提出这个疑问&#xff0c;带着疑问来阅读这篇文章。 富文本用途可以展示图文混排的内容&#xff0c;在日常App 中非常常见&#xff0c;比如微博的发布与展示&#xff0c;朋友圈的发布与展示&#xff0c;都在使用富文…

Elasticsearch 中的高效按位匹配

作者&#xff1a;来自 Elastic Alexander Marquardt 探索在 Elasticsearch 中编码和匹配二进制数据的六种方法&#xff0c;包括术语编码&#xff08;我喜欢的方法&#xff09;、布尔编码、稀疏位位置编码、具有精确匹配的整数编码、具有脚本按位匹配的整数编码以及使用 ESQL 进…

Maven 不同环境灵活构建

需求: 使用 Maven根据不同的构建环境&#xff08;如开发、测试、生产&#xff09;来定义不同的配置&#xff0c;实现灵活的构建管理。 需要Demo项目的可以参考&#xff1a;我的demo项目 一、项目分层 一般的初创项目不会有特别多的配置文件&#xff0c;所以使用 spring.profile…