Sticky Posts
Post List
【AI编译】LayerGroup Tiling Tile的疑惑和思考
# 前言
NPU 的设计相对封闭,从市面上先进的 NPU 芯片和其工具链,乃至开发文档中,我只能学习到大方向的设计思路。这远远不够:1. 资料有限,有可能在大方向理解上出现偏差,这导致整个流程相当多的地方走不通或难度过大; 2. 细节上需要经验来自行领悟,细节不通也无法下手。
一些开源的项目,如 TVM、NVDLA、和 MLIR,这些工程和现在 NPU 芯片的编译器的优化思路差异很大。 前者强调通用性、可移植性。为多种硬件后端提供统一的编译堆栈,通过自动化搜索等搜寻最优调度。而专用 NPU 的硬件已经固定(可拓展也是固定硬件资源的拓展),专家根据硬件特性直接编写最优或近似最优的优化策略(如 G
more...【AI编译】深度优先的Tile调度,万事大吉?
# 前言
本篇文章发现了单纯的 “深度优先的 Tile 调度” 存在的问题。先简单介绍一下单纯的深度优先调度,再指出其可能出现的问题。
错误在所难免,还望不吝赐教。
# 深度优先调度
请允许叫他深度优先调度。本人研究论文不多,我也不知道这种调度方式到底有没有一个官方的、或者大家默认的名称。但是从调度逻辑上,我把他叫做 ——“深度优先调度”。一来是为了指代简单,二来可以方便交流。
以下面这个两层卷积网络为例:
图中详细展示了输入输出 tensor,和两个卷积层的参数。
下图是这个例子的深度优先调度顺序。假设三个 Tensor 是这样切分的:第一个切成 20,20,20,4;第二个切成 10,1
more...【AI编译】多级流水线Tile调度策略
# 前言
本篇文章介绍多级流水线 Tile 调度算法
作为初学者,错误在所难免,还望不吝赐教。
# 深度优先调度生成指令
请允许叫他深度优先调度。我也不知道这种调度方式到底有没有一个官方的、或者大家默认的名称。但是从调度逻辑上,我把他叫做 ——“深度优先调度”。
如图所示。我们知道,一个算子的输出 Tensor Tile 切分成多少份,就会生成多少条指令。假设我们把上面的卷积算子的输出 Tensor 切了 4 份,那么就会有四条指令等待排序。左边所有算子的输出 Tensor 都被切成 4 份,那么就有 4*7 条指令等待排序,或者说调度。
怎么进行调度呢?现在的一个基准就是:深度优先调度。
more...【CUDA C++】GPU内存使用【3】
# 前言
本篇介绍 GPU 的内存使用,主要是全局内存的合并内存访问,和共享内存的 bank 冲突。资料来源于 官网 CUDA Programming Guide。本文会比官网教程简洁一些,去掉一些我不太感兴趣的内容(任性)。
参考 官网 CUDA Programming Guide。
作为初学者,错误在所难免,还望不吝赐教。
# GPU 合并内存访问
GPU 的全局内存 Global Memory (GPU Dram, 常见的显卡 8GB、12GB),是通过 32-byte memory transactions 进行访问的。
当一个 CUDA 线程从全局内存中请求一个数据字节时,相关的
more...【AI编译】Cache缓存地址映射
# 前言
软件离不开硬件,硬件也离不开软件啊。作为 “根本不了解硬件” 的我,也不得不去了解和学习硬件的基本概念。本篇文章 Cache 缓存设计的相关内容。
内容和图源自书籍《AI 处理器硬件架构设计》,请参考。
错误在所难免,还望不吝赐教。
# Cache
NPU 的 Cache 设计与其通用 CPU/GPU 的 Cache 有很大不同,核心目标是满足高吞吐、可预测的流式数据访问,而非处理通用计算的随机访问。
NPU L2 Cache 的定位:
1. 容量大,带宽极高:作为片上 “数据水库”,为多个计算核心(Tensor Core/Matrix Unit)或向量单元提供
more...【CUDA C++】GPU存储【2】
# 前言
本篇是介绍 GPU 的存储硬件。资料来源于 官网 CUDA Programming Guide。本文会比官网教程简洁一些,去掉一些我不太感兴趣的内容(任性)。
参考 官网 CUDA Programming Guide。
作为初学者,错误在所难免,还望不吝赐教。
# GPU Memory
在现代计算系统中,有效利用内存与最大限度地利用执行计算的逻辑单元同样重要。异构系统拥有多个内存空间,而图形处理器(GPU)除了缓存之外,还包含多种类型的可编程片上内存。
# Global Memory(全局内存)
物理本质:GPU 芯片外的 DRAM 芯片(即显存,VRAM)
别名:GPU DR
more...【CUDA C++】GPU基本介绍【1】
# 前言
本篇是介绍 CUDA C++ 的第一篇。资料来源于 官网 CUDA Programming Guide。本文会比官网教程简洁一些,去掉一些我不太感兴趣的内容(任性)。
参考 官网 CUDA Programming Guide。
作为初学者,错误在所难免,还望不吝赐教。
# GPU 和 CPU 对比
在相同的价格和功耗范围内,GPU 的指令处理量和内存带宽都远高于 CPU。许多应用程序利用这些特性,在 GPU 上运行的速度要比在 CPU 上快得多(详见 “GPU 应用” 部分)。其他计算设备,如 FPGA,同样具有很高的能效,但相比 GPU,其编程灵活性要低得多。
图形处理器(GPU
more...【00】0序章-不受欢迎的来客
# 0 序章 - 不受欢迎的来客
夏的夜晚蚊虫不少,甲虫飞蛾时不时落在纱窗上,过一会儿又扑腾飞走。旺盛的白蜡树长到三楼高,在微弱灯光的映射下,叶子呈现黑绿色,若不是窗子上的纱窗挡着,白蜡树的树枝会伸进屋子里一探究竟。楼房由砖石建成,刷了一层斑驳不平的沙石灰,墙壁很厚,窗子很小,白蜡树又挡住本就可怜的微风,女人站在窗台前,用手使劲儿扇两下扇子。
一个月前她和丈夫住在平房里,平房有些旧,雨天还有一个固定的地方漏水,得用个盆儿接住,然后整晚听它滴答滴答。但是胜在自由,打开门就是新鲜的空气、芳香的泥土和青草,还有女人的菜园和葡萄架。平时无聊就去朋友家坐坐,朋友也很自然地来自己家坐坐,喝茶聊天,
more...【转载】我来了——持续低熵
# 序
转载一些有趣的文章,侵删。
导读:
持续低熵自愿放弃一切形式的版权或知识产权。任何人都可以不经允许随意转载、粘贴、整理、剽窃持续低熵的创作。
链接:低熵诗选(一)、如何评价现已转战微博的知乎用户持续低熵
# 我来了
我来了
我头颅向东
我心脏在左
我扛着亚细亚的锤
我燃这乌托邦的火
我记得你杀人的枪
我记得你囚奴的锁
我是你心底的克鲁苏
我是你梦中的伏地魔
我见过被雕饰的空洞
我听过被遗忘的沉默
我闻到这根系的癌变
我触到这枝叶的腐落
我不要人变物的自由
我不要物御人的快活
我要焚你的圣殿
我要熔你的王座
我要闯群星的海
我要立众民的国
五百年的因
五千年的果
最后的斗争
最初的承
more...【Halide】调度优化【2】
# 前言
本篇文章介绍 Halide 多级流水线调度优化策略。
本文来自于《Halide 官方教程》,读者可以去阅读原文。所以看本文的价值在于?呃…… 是中文的?(但原文肯定更准确)更简洁?(也许是缺点)画图更清楚?(假的,因为官网图更好,还是动图,我不想画了)。所以我也不知道为啥一定要看这篇文章而不是原文,唯一好处是我挑出了重点?官方教程文章太多,我只挑其中几篇重点,这是第一篇,全当自己记录了。
仍然建议看原文。
Halide 这篇教程的多级流水线(multi-stage pipelines)指的是多个计算步骤,第一个计算步骤的结果是第二个计算步骤的输入,怎样的流水线调度才能在空间占用、计算
more...






