【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需要的缓存大小。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信网页授权回调地址放多个参数的方法

https://open.weixin.qq.com/connect/oauth2/authorize?appidAPPID&redirect_uriREDIRECT_URI&response_typecode&scopeSCOPE&stateSTATE#wechat_redirect 跳转后地址 redirect_uri/?codeCODE&stateSTATE。 redirect_uri如果不进行urlencode编码, 跳转后…

C++20中头文件syncstream的使用

<syncstream>是C20中新增加的头文件&#xff0c;提供了对同步输出流的支持&#xff0c;即在多个线程中可安全地进行输出操作&#xff0c;此头文件是Input/Output库的一部分。包括&#xff1a; 1.std::basic_syncbuf&#xff1a;是std::basic_streambuf的包装器(wrapper)&…

《在1688的数字海洋中,如何用API网罗一家店铺的所有商品?》

想象一下&#xff0c;你是一位船长&#xff0c;航行在1688这个电商的数字海洋上。你的任务是探索一家神秘的店铺岛屿&#xff0c;并且用你的API魔法网&#xff0c;网罗岛上所有的商品宝藏。不用担心&#xff0c;即使你不是海贼王&#xff0c;有了代码的力量&#xff0c;你也能成…

【数据结构初阶】二叉树---堆

二叉树-堆的实现 一、树的概念&#xff08;什么是树&#xff09;二、二叉树的概念及结构2.1 二叉树的概念2.2 二叉树的性质2.3 二叉树存储结构 三、二叉树的顺序结构3.1 堆的概念及结构3.2 堆的向下调整算法3.3堆的创建 四、堆的代码实现4.1 堆的初始化4.2 堆的销毁4.3 堆的插入…

ipguard与Ping32如何加密数据防止泄露?让企业信息更安全

在信息化时代&#xff0c;数据安全已成为企业运营的重中之重。数据泄露不仅会导致经济损失&#xff0c;还可能损害企业声誉。因此&#xff0c;选择合适的数据加密工具是保护企业敏感信息的关键。本文将对IPGuard与Ping32这两款加密软件进行探讨&#xff0c;了解它们如何有效加密…

SAP_SD模块-销售订单创建价格扩大10倍问题分析及后续订单价格批量更新问题处理

一、业务背景 我们公司的销售订单&#xff0c;是通过第三方销售管理平台创建好订单后&#xff0c;把表头和行项目数据&#xff0c;定时推送到SAP&#xff1b;SAP通过自定义表ZZT_ORDER_HEAD存放订单表头数据&#xff0c;通过ZZT_ORDER_DETAIL存放行项目数据&#xff1b;然后再用…

git安装-Tortoise git 安装汉化教程

1. 安装git 2. 安装git图形化工具Tortoise git 3. 汉化 Tortoise git 汉化安装包

证件照电子版怎么弄?不花钱制作方法快来学

想要制作免费照证件照&#xff1f;证件照在我们的日常生活中扮演着重要角色&#xff0c;无论是求职、求学还是办理各类证件&#xff0c;都少不了它的身影。 但是&#xff0c;去照相馆拍照不仅耗时&#xff0c;费用也不菲。那么&#xff0c;有没有可能不花一分钱就搞定证件照呢…

互联网系统的微观与宏观架构

互联网系统的架构设计&#xff0c;通常会根据项目的体量、业务场景以及技术需求被划分为微观架构&#xff08;Micro-Architecture&#xff09;和宏观架构&#xff08;Macro-Architecture&#xff09;。这两者的概念与职责既独立又相互关联。本文将通过一些系统案例&#xff0c;…

淘宝API的实战应用:数据驱动增长,实时监控商品信息是关键

数据驱动增长&#xff0c;实时监控商品信息是关键 —— 淘宝API的实战应用 在数字化时代&#xff0c;数据已经成为商业决策的核心。对于电商行业而言&#xff0c;获取准确、实时的数据是保持竞争力的关键。淘宝API接口作为连接淘宝电商平台与外部应用的桥梁&#xff0c;为电商商…

【论文+源码】基于spring boot的垃圾分类网站

创建一个基于Spring Boot的垃圾分类网站涉及多个步骤&#xff0c;包括环境搭建、项目创建、数据库设计、后端服务开发、前端页面设计等。下面我将引导您完成这个过程。 第一步&#xff1a;准备环境 确保您的开发环境中安装了以下工具&#xff1a; Java JDK 8 或更高版本Mav…

uv: 一个统一的Python包管理工具

uv是由Astral公司开发的一个极其快速的Python包管理器,完全用Rust编写。它最初在2月份发布,作为pip工作流的替代品。现在,uv已经扩展成为一个端到端的解决方案,可以管理Python项目、命令行工具、单文件脚本,甚至Python本身。可以说,uv就像是Python界的Cargo:一个快速、可靠、易…

Rust小练习,编写井字棋

画叉画圈的游戏通常指的是 井字棋&#xff08;Tic-Tac-Toe&#xff09;&#xff0c;是一个简单的两人游戏&#xff0c;规则如下&#xff1a; 游戏规则 棋盘&#xff1a;游戏在一个3x3的方格上进行。玩家&#xff1a;有两个玩家&#xff0c;一个用“X”表示&#xff0c;另一个…

Vivado自定义IP修改顶层后Port and Interface不更新解决方案

问题描述 在整个项目工程中&#xff0c;对自定义IP进行一个比较大的改动&#xff0c;新增了不少端口(这里具体的就是bram的读写端口)&#xff0c;修改是在block design中右击IP编辑在IP编辑工程中进行的。 在修改完所有代码后&#xff08;顶层新增了需要新加的输入输出端口&…

算法的学习笔记—平衡二叉树(牛客JZ79)

&#x1f600;前言 在数据结构中&#xff0c;二叉树是一种重要的树形结构。平衡二叉树是一种特殊的二叉树&#xff0c;其特性是任何节点的左右子树高度差的绝对值不超过1。本文将介绍如何判断一棵给定的二叉树是否为平衡二叉树&#xff0c;重点关注算法的时间复杂度和空间复杂度…

未来汽车驾驶还会有趣吗?车辆动力学系统简史

未来汽车驾驶还会有趣吗&#xff1f;车辆动力学系统简史 本篇文章来源&#xff1a;Schmidt, F., Knig, L. (2020). Will driving still be fun in the future? Vehicle dynamics systems through the ages. In: Pfeffer, P. (eds) 10th International Munich Chassis Symposiu…

sql-labs靶场第二十关测试报告

目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、寻找注入点 2、注入数据库 ①寻找注入方法 ②爆库&#xff0c;查看数据库名称 ③爆表&#xff0c;查看security库的所有表 ④爆列&#xff0c;查看users表的所有列 ⑤成功获取用户名…

文本预处理——构建词云

Python 词云或标签云是一种可视化技术&#xff0c;通常用于显示网站的标签或关键字。这些单个单词反映了网页的上下文&#xff0c;并聚集在词云中。云中的单词字体大小和颜色各不相同&#xff0c;表明其突出性。字体大小越大&#xff0c;相对于其他单词的重要性就越高。词云可以…

VUE中文本域默认展示最底部内容

文本域内容 <textarea ref"textareaRef" style"width: 100%; resize: none;" readonly v-model"errorLog" rows"15"></textarea> 样式展示 this.$nextTick(() > { // 使用$refs获取文本域的DOM元素 const textareaInfo…

【ArcGIS Pro实操第8期】绘制WRF三层嵌套区域

【ArcGIS Pro实操第8期】绘制WRF三层嵌套区域 数据准备ArcGIS Pro绘制WRF三层嵌套区域Map-绘制三层嵌套区域更改ArcMap地图的默认显示方向指定数据框范围 Map绘制研究区Layout-布局出图 参考 本博客基于ArcGIS Pro绘制WRF三层嵌套区域&#xff0c;具体实现图形参考下图&#xf…