Zigzag :nested loop 的教科书

news/2025/3/18 3:02:51/文章来源:https://www.cnblogs.com/devil-sx/p/18342054

Zigzag 在 PE array-memory hierarchy level 上对 nested-loop based 算子数据部署设计策略进行详细分析。文章作者来自鲁汶 MICAS [1]实验室。

软硬件建模

软件上只涉及 MAC-based 的网络算子(Linear、Convolutional),沿用 time-loop [2] 方法使用 nested-loop 建模,从 operand(Input、weight、output)以及不同维度(kernel size、channel size……)俩个角度囊括高维 tensor 算子。

架构上包括计算部分 2D PE array 和存储部分 unbalanced uneven memory hierarchy。Unbalanced-uneven 分别是从硬件架构-映射两个角度对不同 operator 定制化数据流,unbalanced 思想可追溯 14 年 DIANNAO, activation 和 weight buffer 物理上分离以便针对性发挥更自由的控制流,uneven 则是物理架构确定后,就算物理存储架构相同也可以根据 operator 制定不同映射策略。

Memory Model

通过 nested loop 数据被抽象成一组维度的组合,将该数据的不同维度分配到不同的 memory level 的过程称之为部署。算法部署过程要满足计算正确的约束,即维度的循环顺序应当是一直的。通过 nested loop 模型可以导出 memory access 次数以及不同 hierarchy 之间的 datawidth,这之中的设计空间在于 trade-off 不同 operator、不同 hierarchy 之间的 data reuse。具体分析见原文或以前博文[3]不予展开。

搜索空间组成

搜索空间包括硬件参数以及映射策略俩层搜索。二者分层搜索,外层硬件内层软件映射,因此硬件搜索时不会以映射的性能作为 feedback(待考证)。硬件搜索根据 area-constraint 和用户定义的一系列 constraint 搜索出一系列符合要求的硬件参数组合(memory size、 data width ...),接着每个独立进行软件映射搜索。

映射搜索又分作两部分:计算阵列数据流的 Spatial Mapping 以及存储控制流 Temporal Mapping。Temporal Mapping 又分为 loop blocking 以及 loop ordering——先从篮子里挑出要排序的鸡蛋(分配调度维度大小),然后再给鸡蛋排序。

搜索空间剪枝

搜索空间剪枝分为俩种类型:(1)搜索空间中有许多点天然是完全等价的,因此可以无损剪枝减少搜索空间,理论上不会影响搜索结果;(2)另外基于一些先验进行剪枝,需要实验结果验证不影响搜索结果。

文中提及多个搜索策略,实际上他们之间有些并不是互斥而是兼容的(比如 heuristic search v2 就是对 v1 的全覆盖),将每个方法拎出来单独测试起到 sensitivity study 的作用。

  • Spatial Mapping
    • exhaustive search
    • heuristic search v1
    • heuristic search v2
  • Temporal Mapping
    • exhaustive search
    • heuristic search v1
    • heuristic search v2
    • iterative search

Spatial Mapping 剪枝

heuristic v1 利用了 kernel 和 feature 中对于 x、y 方向维度的对称性,这些对称的点理论上性能表现是一样的;heurisitic v2 利用 operand 之间的依赖关系,通过加入 W/I/O 的 Pareto surface 函数关系减少搜索自由度(具体怎么得到 Pareto surface 有待考证)。

Temporal Mapping 剪枝

heuristic v1 则是固定数据(data stationary)提高数据复用度,无关维度应放在向下贴近 memory hierarchy 分界线的地方以扩大数据复用(如果从变量生存周期图上思考,将无关维度放循环最底层将变量调用的点连成了一条线,进而减少 memory access 的次数); heuristic v2 则是若某一个 level 的 memory 映射不存在无关维度,即不存在复用度,那么这个 level 之下的维度没有 ordering 的必要了(因为 DRAM 层包括所有维度一定包括无关维度对此层不成立)。

最后 iterative search 实际上是 rough-finetuned search 策略,人为给 memory level 设置虚拟的 level 分界线,先搜索底层,得到结果后固定底层映射策略再囊括更高层。

总结

就目前阅读过的文章而言,这篇能够排在前三。本文非常适合 MAC 映射学习,从软件建模、硬件建模到部署策略的分析。当初也是通过阅读此文 get 到了 memory hierarchy 的含义。

此外文章主要是针对 1-layer 层面进行分析,全体网络结果只是简单相加实际,并且只涉及 MAC-based 的数据优化。Application domain 在链图(Path Graph)并且核心计算量在于 MAC 的网络(比如传统卷积 VGG、ResNet、MobileNet),对于图拓扑更加自由以及非线性算子也有相等比重的网络应当再弥补编译器方面的 scheduler problem 讨论。


  1. https://github.com/KULeuven-MICAS ↩︎

  2. https://timeloop.csail.mit.edu/ ↩︎

  3. https://www.cnblogs.com/devil-sx/p/18209577 ↩︎

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

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

相关文章

6、Qt-pyqt6常用基本控件 - 选择列表类控件

选择列表类控件主要以列表形式为童虎提供选择的项目,用户可以从中选择项 此选项在QTDesigner的:Input Widgets下ComboBox FontComBoBox ListWidget🎣 1.ComboBox 下拉框 常用的方法:方法 说明addItem() 添加一个下拉表选项addItems() 从列表中给添加下拉选项currentText()…

蒙特卡洛模拟(4)————书店买书问题(0-1规划)

目录一、问题提出二、模型建立1.符号建立2.规定约束3.获得目标函数三、代码求解1.预备知识(1)unique函数(2)randi函数2.变量设置与初始化3.输入循环进行模拟四、模型拓展 一、问题提出二、模型建立 1.符号建立 在图表上,我们可以看见有六家商店和五本书,在代码中我们往往…

KubeSphere 社区双周报| 2024.07.19-08.01

KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。 本次双周报涵盖时间为:2024.07.19-08.01。 贡献者名单新晋 KubeSphere co…

内核简介

Linux内核基础 楔子 这部分的内容首先要回忆一下计算机的基础知识,基本的计算机结构包括CPU(算数逻辑单元ALU、控制单元CU)、存储器、输入和输出。CPU和其它设备是通过总线连接的。CPU执行的基础被称为指令集,CPU执行存储器存取指令时:CPU发出存取信号,然后就从存储器存取…

logback下日志输出前处理操作——以日志脱敏为例

使用lockback 目前Java Spring服务在打印日志时一般使用slf4j和logback这种组合,其基本原理图如下具体的:大多数会先定义一个loackback-dev.xml文件,而后使用<appender>标签定义输出格式 <appender name="file" class="ch.qos.logback.core.rolling…

边分治维护强连通分量(CF1989F,P5163)

这里的边分治和树上的点分治边分治不一样,是维护强连通分量用的,每条边有一个出现时间,通过将每条边按连通关系分流重新排列,从而维护每个时间点整张图的连通性。具体的,这个算法是维护这样的一类问题: n 个点,m 条边按时间顺序依次加入,每加入一条边,你需要回答一些问…

使用 C# 和 ONNX 來玩转Phi-3 SLM

LLM 席卷世界刷新 AI 的认知之后,由于 LLM 需要的硬件要求实在太高,很难在普通设备上运行,因此 SLM 逐漸受到重視,Phi-3 SLM 是由 Microsoft 所开发的模型,可以在你的电脑、手机等设备来运行,小型语言模型 (SLM) 和 ONNX 的结合改变了 AI 互操作性的游戏规则。让我们展…

到底什么是@RestController

@RestController是Spring框架的一个注解,通常用于标识一个类是RESTful服务的Controller。 @RestController经常用来处理HTTP请求,是SpringMVC中用于构建RESTful Web服务的注解,是@Controller注解的变体 通过@RestController注解,SpringMVC可以识别出这个类是一个控制器这个…

【已解决】戴尔 Inspiron 5457 和 5557 启动报错:Invalid configuration information - please run SETUP program.

场景 我使用的是戴尔15-5557的笔记本电脑,在某次开机的时候系统提示:Invalid configuration information - please run SETUP program.虽然的点击Continue可以正常进入系统,但是每次开机都要来上这么一下真的很烦人,于是想着解决一下。 试错过程 1. BIOS调整刚开始以为是自…

6-3使用GPU训练模型

当参数迭代过程成为训练时间的主要瓶颈时,我们通常的方法是应用GPU来进行加速。深度学习的训练过程常常非常耗时,一个模型训练几个小时是家常便饭,训练几天也是常有的事情,有时候甚至要训练几十天。 训练过程的耗时主要来自于两个部分,一部分来自数据准备,另一部分来自参…