【CANN训练营】高阶笔记

Ascend C Tilling计算

Tilling基本概念介绍

大多数情况下,Local Memory的存储,无法完全容纳算子的输入与输出的所有数据,需要每次搬运一部分输入数柜进行计算然后搬出,再敲运下一部分输入数据进行计算,直到得到完愁的最终结果,这个数据切分、分块计算的过程称之为Tiling过程

  • 每次激运的那一部分数据块,叫做Tiling块
  • 根据算子中不同输入形状确定搬入基本块大小的相关算法,叫做Tiling算法(或Tiing策略)
  • 算子中实现Tiling算法的函数(一般定义在host侧的tiling头文件中),叫做Tiling函数 (或Tiling Function)

在这里插入图片描述
在Ascend c中,Tiling的直接表示形式就是结构体 (struct),简称Tiling结构体

Tiling结构体定义在Tiling头文件中,其中的每个结构体参数表示如何对输入数据进行切分,以及决定了计算过程的一些细节,结构体在host侧实例化,并通过指针传入kernel函数中
__global__aicore__void add_custom(GM_ADDR_X,GM_ADDR_Y,GM_ADDR_Z,GM_ADDR workspace,GM_ADDR tiling)

Tiling结构体中的值在host侧确定,根据具体入参的信息,完成各项结构体参数的计算,并实施搬运分别在host侧和device侧为Tiling结构体申请空间,将其从host侧搬运到device侧,H2D操作

  • aclrtMallocHost((void**)(&tilingHost),tilingsize)
  • acIrtMalloc((void**)&tilingDevice,tilingSize,ACL_MEM_MALLOC_HUGE_FIRST)
  • aclrtMemcpy(tilingDevice, tilingsize, tilingHost, tilingsize, ACL_MEMCPY_HOST_TO_DEVICE)

固定Shape场景的tiling实现

固定shape输入回顾

由于输入的大小是已知的,每次搬运多少数据,总共搬运多少次均可以在编译时直接计算出来

当算子shape固定时,开发者使用不同shape时需要重新对算子进行编译,带来大量的算子二进制文件

动态shape的算子可以将形状通过核函数的入参传入核函数内,参与内部逻辑计算,从而符合不同shape下的使用场景

在这里插入图片描述

改装固定shape算子成功态shape

基于现有的固定shape算子,将其改装为动态shape的算子,将控制形状的BLOCK_DIM,TOTAL_LENGTH,TILE_NUM这些变量的来源变化为依靠外界输入得到,在核函数中额外传入一个tiling,它将指向控制核函数逻辑处理的至关重要的几个变量

在这里插入图片描述

动态shape场景的tiling结构体

主要操作流程:
在这里插入图片描述
Tiling结构体中的信息:
TOTAL_LENGTH: 总共需要计算的数据个数
TILE_NUM:每个核上计算数据分块的个数
注:USE_CORE_NUM为参与并行计算使用的核数,有独立接口GetBlockNum()可以在核函数内获得

动态shape场景的tiling解析函数

核函数传入Tiling指针,与x,y,z的角色相同,添加获得tiling结构体的宏函数调用GET_TILING_DATA
在这里插入图片描述
CPU模式和NPU模式涉及到指针转化,用宏函数 CONVERT_TILING_DATA 将__ubuf_uint8 t* 转化为__ubuf__tilingstruct*

CPU模式和NPU模式之间逻辑的区别,用宏函数INIT_TILING_DATA区分tiling_data不同的初始化过程

为了方便而不失一般性,这里使用宏函数GET_TILING_DATA暴露给核函数进行调用

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

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

相关文章

GoEasy使用手册

GoEasy官网 登录 - GoEasy 即时通讯聊天案例 GoEasy - GoEasy (gitee.com) 注意事项 接口使用人数上限为15,超出之后会请求超时返回408状态码,可以新建一个应用用来更换common Key 创建应用 ​ 添加应用名称,其余默认,点击…

算法通关村第十三关—数学与数学基础问题(青铜)

数学与数学基础问题 一、统计专题 1.1 符号统计 LeetCode1822给定一个数组,求所有元素的乘积的符号,如果最终答案是负的返回-1,如果最终答案是正的返回1,如果答案是0返回0。  题目比较简单,正数对结果完全没影响&…

CVE-2021-4145:类型混淆导致释放任意 file 结构体

前言 影响版本: v5.13.4 之前 测试版本:v5.13.3 (感谢 bsauce 大佬提供的测试环境) 漏洞发生在 fsconfig 处理时调用的cgroup1_parse_param 函数中,patch: diff --git a/kernel/cgroup/cgroup-v1.c b/k…

软路由R4S+iStoreOS如何实现公网远程桌面本地电脑

🌈个人主页:聆风吟 🔥系列专栏:数据结构、Cpolar杂谈 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 一. 简介1.1 软路由的定义1.2 使用软路由的好处1.3 常用组网 二. 配置远程桌面公网地址三. 家中使用…

mysql原理--B+树索引的使用

1.索引的代价 在介绍如何更好的使用索引之前先要了解一下使用这玩意儿的代价,它在空间和时间上都会拖后腿: (1). 空间上的代价 这个是显而易见的,每建立一个索引都要为它建立一棵 B 树,每一棵 B 树的每一个节点都是一个数据页&…

简单的小题集(八)

文章目录 一、这题有点麻烦二、Nba 总冠军 2 一、这题有点麻烦 信不信这道题的核心内容连两句话都没有,说实话,就这不到两句话的题就能 把你做熄火了,不信你就试试呗: 皮皮的小南教大家玩数字,这不他拿出 n 个数字&am…

抖去推--短视频剪辑、矩阵无人直播saas营销工具一站式开发

抖去推是一款短视频剪辑和矩阵无人直播SAAS营销工具一站式开发平台。它提供了以下功能和特点: 1. 短视频剪辑:抖去推提供了一系列的剪辑工具,包括自动剪辑、特效制作、配音配乐等,可以帮助用户轻松制作出高质量的短视频。 2. 矩阵…

Python多线程thread与子线程

Python多线程Thread——生产者消费者模型-CSDN博客 python队列与多线程——生产者消费者模型-CSDN博客 import random import threading import time# 主线程 class MainThread(threading.Thread):def __init__(self, name, num0, target10):super(MainThread, self).__init_…

日志审计在网络安全中的重要性

日志审计是一种通过分析、识别和验证各种日志信息,以帮助企业了解其网络和系统的安全状态和活动的过程。这些日志信息可能来自各种来源,包括服务器、网络设备、应用程序、操作系统等。 日志审计的主要功能包括: 1.识别潜在的安全威胁&#…

创建第一个Vue2项目-----HelloWorld

创建第一个Vue项目 第一步先去安装Vue&#xff0c;一共有两种安装方式&#xff0c;这里使用 点击这里下载&#xff1a;Vue.js 添加到自己的项目中 在使用的页面引入<script src"../js/vue.js"></script> 2. 准备好一个容器 <div id"root&qu…

阿里云大数据工程师ACP认证,今天终于搞定了,87分

为啥我得去考个阿里云大数据工程ACP证书&#xff1f; 首先得声明&#xff0c;这不是因为我对阿里有多痴迷&#xff0c;也不是因为我想把我的简历装饰得花里胡哨。实际上&#xff0c;这更像是一场自我挑战的游戏。我就是一根筋&#xff0c;当时公司要求考阿里云大数据工程师认证…

Redis部署-集群

目录 集群 数据分片算法 哈希求余 一致性哈希算法 哈希槽分区算法 redis集群搭建 1.创建目录和配置. 2.将上述redis节点.构建成集群 3.使用客户端连接集群 集群模式下的故障转移流程 1.故障判定 2.故障迁移 集群扩容 集群 广义上的集群,只要是多个机器,构成了分布…

axios无法获取response headers中的内容

前言 后端在响应头中加了些参数&#xff0c;前端发起axios请求&#xff0c;在浏览器中发现这些参数在response headers中返回了&#xff08;能看到&#xff09;&#xff0c;但是axios取不到&#xff01; 好久之前遇到过这个问题&#xff0c;解决过但是没有记录&#xff0c;前…

[IDEA] 写代码时没有类型推断的解决方法

本示例使用scala, 其他语言同理 使用 .var 时会自动生成变量 使用快捷键 CtrlAtlv 一样 val abc "abc"但是这个变量没有显式表现类型 期望 val abc: String "abc" 解决方法

【带头学C++】----- 九、类和对象 ---- 9.13 运算符重载——(9.13.1-9.13.4)

❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️创做不易&#xff0c;麻烦点个关注❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️ ❤️❤️❤️❤️❤️❤️❤️❤️❤️文末有惊喜&#xff01;献舞一支&#xff01;❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️ 目录 9.13…

Linux安装MySQL数据库系统

1、MySQL的编译安装。 1.1、准备工作 &#xff08;1&#xff09;为了避免发生端口冲突、程序冲突等现象&#xff0c;建议先查询MySQL软件的安装情况&#xff0c;确认没有使用以RPM方式安装的mysql-server、mysql软件包&#xff0c;否则建议将其卸载。 [rootlocalhost ~]# rp…

微信社群机器人开发

简要描述&#xff1a; 删除朋友圈 请求URL&#xff1a; http://域名地址/deleteSns 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参数名必选类型说明wId…

蚂蚁集团20篇论文入选AI顶会NeurlPS,7成论文聚焦生成式AI

人工智能新浪潮如火如荼&#xff0c;中国互联网企业奋力逐浪并行。 当地时间12月10日&#xff0c;为期六天的全球AI顶级会议NeurlPS在美国路易斯安那州新奥尔良市举办。NeurlPS披露的数据显示&#xff0c;本届会议共有12343篇有效论文投稿&#xff0c;接收率仅为26.1%。蚂蚁集…

IO操作对系统的影响

在Java项目中&#xff0c;大量的IO操作可能会对系统产生以下影响&#xff1a; 性能问题&#xff1a;过多的IO操作会消耗大量的CPU和内存资源。这是因为IO操作通常比内存操作要慢得多&#xff0c;所以系统会花费大量的时间等待IO操作完成。这会导致系统的整体性能下降&#xff…

FastAPI之响应模型

前言 响应模型我认为最主要的作用就是在自动化文档的显示时&#xff0c;可以直接给查看文档的小伙伴显示返回的数据格式。对于后端开发的伙伴来说&#xff0c;其编码的实际意义不大&#xff0c;但是为了可以不用再额外的提供文档&#xff0c;我们只需要添加一个 response_mod…