论文解读 | 自动编译框架AMOS

AMOS—一文帮你快速了解Amos界面 一文帮你快速了解Amos界面,包括工具栏、菜单栏等。 阅读详情

软件到硬件资源的自动映射是编译器的一项重要技术,也是业界研究的一个热门方向。本文主要观点来自发表在计算机体系结构领域顶级会议ISCA2022上的一篇论文——AMOS: Enabling Automatic Mapping for Tensor Computations On Spatial Accelerators with Hardware Abstraction,希望可以给读者一些启发。

1. 摘要

如今计算设备逐渐向专用化方向发展,加速器设备(Spatial hardware accelerators)中有多层级专用的计算和存储资源,已经在深度学习、科学计算、数据挖掘等领域显示出较高的性能优势。软件开发者需要使用硬件专用的指令集才能发挥出加速器的计算性能。然而,开发者普遍缺少对这类加速器设备和对应的专用指令集的理解,比如其硬件抽象表示、性能优化空间及自动化探索优化空间等。现有的编译器通常使用手工方式和基于模板方式进行代码性能优化,其中手工方式开发成本较高,基于模板方式可能会导致得到次优解。

本文提出一个用于计算加速器的自动编译框架AMOS。框架的核心是硬件抽象,不仅可以准确描述硬件指令行为,而且可以统一定义计算任务到硬件的映射。基于硬件抽象,作者使用性能代价模型在所有可能的映射空间中自动探索最优映射。总体来看,该编译框架使用硬件抽象作为编译器IR,探索计算映射和存储映射,最终可为多种硬件后端生成高性能代码。实验表明AMOS在TensorCore上比手工优化性能提升2.5倍,在Intel CPU AVX-512指令集支持的芯片上比TVM性能提升1.37倍,在移动端的Mali GPU上比AutoTVM性能提升25.04倍。

1. 简介

作者将计算加速器的软件到硬件的映射方式划分为两类:硬件可感知和指令集可感知。

  • 硬件可感知:编译器知晓硬件架构细节信息,比如PE(processing element)数量、PE间互联方式,这样软硬件映射过程可以转化为一个在给定硬件约束下的优化问题。这种映射方式具有较高的能效比,但是牺牲了一定的灵活性(当搜索空间发生变化后,映射过程需要重新生成)。代表性编译器有Triton、CoSA、SRAR、HASCO。

  • 指令集可感知:映射过程对硬件架构无感知,只根据对外暴露的指令集进行软硬件映射。XLA、TVM、Ansor、AKG、Tiramisu等均归为指令集可感知。本文聚焦于指令集可感知的映射。

指令集可感知方式通过提供张量计算的若干内置函数(Intrinsics)提高了可编程性,但仍面临两方面挑战:

  • 给定算法下,如何生成最优指令。比如,二维卷积的7层循环映射到Tensor Core上,映射方式有35种。现有的编译器如TVM、ISA Mapper等主要依赖基于模板或手工编写方式,这样可能会得到次优解。

  • 理想的映射方法对不同加速器是统一的,然而不同加速器提供的指令集相差较大,在给定算法下,无法统一开发。比如,Tensor Core使用不同的内置函数来描述矩阵加载/存储/相乘操作,在Mali GPU中只需使用一条内置函数arm_dot就可以完成数据加载和执行。

本文设计了一个在指令集之上的抽象层来解决如上两方面挑战。抽象层包括计算抽象和存储抽象两部分,可以统一描述不同加速器的指令集,实现了统一的自动映射流程。另外,作者设计了一个性能评估模型来评价所有可能解。最终,AMOS将映射问题抽象后转化为一个迭代优化问题。

2. 背景和动机

2.1 专用计算加速器

专用计算加速器通常分为多个层级,最内层是有多个PE组成的计算阵列,中间层是由多个计算阵列组成的subcore,最外层是由多个subcore组成的core以及core间共享的全局存储器,如图1(a)所示。专用计算加速器通常嵌入在通用计算架构类芯片中,如在CPU或GPU中嵌入专用计算加速器。Nvidia GPU中的Tensor Core,Mali GPU中的dot计算模块,华为Ascend NPU中的cube模块都被看做专用计算架构。

0dbc7739679afcdda5c5c13f4ace7b4b.png图 1

硬件厂商一般都会为加速器设计专门的指令,这类指令主要分计算型指令和访存型指令两种。图1(b)中AVX-512指令集中__mm512_add_pd是一个向量加指令,__mm512_loadu_ph是一个向量数据加载指令。Tensor Core中mma_sync是一个矩阵乘指令,load_maxtrix_sync是一个矩阵数据加载指令。

2.2 现有的映射流程

表1中列出来业界领先的编译器,可以分为两类:

  • 硬件可感知映射:编译器知晓PE互联和存储配置等信息,因此编译器可以将软件层面上的计算任务lower到每个PE和存储单元,这一过程主要应用软硬协同设计,即在特定硬件资源约束下最大化资源利用率。由于映射搜索空间巨大,这类编译器通常使用线性规划来实现软件到硬件资源的映射。

  • 指令集可感知映射:空间加速器都对外提供专用指令集,为了生成高性能代码,软件开发者一般需要编写调度模板,并且在给定的调度空间内搜索出最佳调度。例如TVM提供了一个tensorize接口原语,开发者需要手动实现该接口函数;作为多面体优化编译器的代表,AKG依赖多面体模型和模板来进行软硬件映射。

4bdfdeb920105cc0a13bd0b4e22a46af.png表 1

2.3 动机

表2对比了深度学习编译器XLA在典型模型上的映射效果,虽然XLA中使用了大量复杂模板,但是运行典型模型时也只有少量算子可以映射到NVIDIA V100 Tensor Core上。例如,ShuffleNet中的深度可分离卷积和分组卷积是普通二维卷积的两个变种,内部同样是大量乘加操作,原理上讲是适合在Tensor Core上运行的,但是XLA却无法将这两类算子映射到Tensor Core上。原因是因为XLA中手工编写的模板无法成功匹配到这两类算子。

c8d9f521d7eeeb8e245a50f0c8f391f1.png表 2

手工编写模板有两个限制:第一,手工编写的模板依赖于显式地基于指令集实现代码,这种方式人力成本高、开发周期长,因此只能支持少量部分算子的映射。第二,手工编写的模板适用性受限,例如对算子稍加改动(例如改变数据排布方式)后,就可能导致模板匹配失败。为解决如上问题,本文设计了一个无模板不依赖设备厂商第三方加速库(如cuDNN/cuTLASS)的自动映射编译流程。

3. 原理

图2展示了AMOS的编译流程,输入是由Python编写的高层次代码和基于计算和访存抽象出的硬件指令组成,然后生成不同的映射组合。一个映射组合由计算映射和访存映射组成:

  • 计算映射是将算子转为计算指令映射到空间加速器上;

  • 访存映射通过访存指令描述数据的访问和存储行为。

6b430d601c36c2e8d2ee11377af1c797.png

图 2

5c41addab8052ec00cbdda8a9409d900.png

公式 1

整个映射生成过程分为2个阶段,第一阶段是将循环迭代映射到一个虚拟加速器上,第二阶段是加入硬件资源和指令集限制,调整以前的映射过程最终映射到物理加速器上。

以Conv2D为例进行说明,首先将循环迭代空间映射为指令集迭代空间。在下图中循环迭代维度n,p,q映射至指令集的i1维度,循环迭代维度k映射至指令集的i2维度,循环迭代维度c,r,s映射至指令集的r1维度。然后,将卷积操作转化为矩阵乘操作,完成计算和访存代码到指令集的映射。第一阶段映射完成,在该阶段不考虑硬件资源和指令集约束。

第二阶段中,实际的硬件加速器只能计算特定shape的数据,文中称之为问题大小限制。针对存储容量限制,每种存储器只有有限的存储空间,因此文中将张量数据切分为片,然后多次执行load/store来完成访存操作。这样基地址和地址偏移量会存在多次更新。

a7f4a5d5c60e57ecad37b81de9fb5dba.png

图 3

如上操作可能会生成一些非法的映射,因此文中也提出一种映射结果验证方法用来过滤掉非法映射。映射结果验证方法描述如下,核心思想是通过分析生成的0、1构成的矩阵得出合法映射。

在探索最优映射方面,文中构建了一个代价模型的数学描述(只考虑时延指标)。由于空间加速器都是分层次设计,系统的整体时延等于最上层硬件抽象层的时延,每层的时延是计算、读取、写入操作时延的最大值。

2ea00e27a04609dbbc6c75eacf7dac57.png

公式 2

4. 实现

实现上,硬件抽象层通过IR抽象描述,文中基于TVM的tensorize接口新增了2个IR节点(计算节点和访存节点):计算节点IR中的第一个属性是张量数据,第二个属性是计算表达式Expr,第三个属性是指令迭代空间;访存节点IR中的第一个属性是目的地址数据,第二个属性是描述数据驻留的存储器类型(global、shared、register),第三个属性是源地址数据和加载索引。在代码生成时将新增的IR节点插入到AST中。

5aadfb9b64fb042a2815cdb85412821b.png

表 3

5. 效果

AMOS在绝大部分测试项中均超过PyTorch,加速比0.91到10.42。Bert模型中有大量矩阵乘操作,矩阵乘操作已经在多个第三方库中充分优化了多年,即便如此,在batchsize为16时AMOS仍然可以达到第三方库90%的性能。在ShuffleNet中可达到10.42的性能加速比,原因是该模型中存在大量深度可分离卷积和分组卷积,第三方库没有充分将这两类卷积支持到Tensor Core中。同时,AMOS与TVM相比也有明显的性能优势。

bbb9e79e12d72049c6e5ff72798e483d.png

图 4

同时,AMOS具有良好的泛化性,可支持多种加速器设备,如Tensor Core、Intel CPU的AVX-512矢量单元、Mali GPU的点乘单元,作者在这些加速器设备上也做了大量实验,在这些加速器设备上与TVM相比均有一定的性能提升。

最后给我们团队的开源项目打个广告,Adlik 是中兴通讯贡献的深度学习推理工具,已获得 Linux AI 基金会支持,目前仍在持续完善中,期待大家的支持和关注:Github Adlik;另外,我们也在做深度学习编译器方向的前沿技术研发工作,欢迎感兴趣的小伙伴加入我们~~

b65b36afb5d7d1597c4f6c2b5c8897c2.png


MyBatis源码解析之基础模块—DataSource MyBatis源码解析之基础模块—DataSource 前文回顾 上一章节我们一起学习了Mapper接口绑定的源码逻辑。本次我们学习MyBatis的DataSource数据源模块。 为解决这种操作方式的弊端,在mybatis版本中提供了binding模块。从而能够在编译期就能够发现问题。同时通过采用jdk动态代理模式,开发者只需要要编写对应的接口即可完成持久层的开发工作。即降低工作量,有大大降低出错概率。 接下来,我们将通过源码详细介绍binding的执行逻辑。 背景知识 因为常见的数据源都会基于java. 阅读详情

相关推荐

实战分享:在盘古100Pro+上快速上手紫光同创FIFO IP core的5个关键步骤

本文详细介绍了在盘古100Pro+开发板上快速集成紫光同创FIFO IP core的五个关键步骤。从环境准备、IP手册解读、图形化配置,到生成例化与工程集成,最后进行功能验证与调试,为FPGA开发者提供了一套高效、可靠的IP核应用实战指南,助力提升项目开发效率与可靠性。

sony5的博客 119

AMOS从零到基本操作入门(转载)

AMOS软件究竟用来干什么?一般的研究论文的数据分析部分少不了对样本的描述,对变量进行探索式因素分析,然后再利用多变量分析技术或SEM来进行数据分析,最后提出研究结论(验证假说),提出建议。什么是SEM?结构方程模型,英文名Structural equation modeling, 简称SEM,是一种融合了因子分析和路径分析的多元统计技术。它的强势在于对多变量间交互关系的定量研究。我们常见的因子分析法,一般用SPSS软件就可以分析。但其实因子分析法是两种分析形式的统一体,即验证性分析和纯粹的探索性分析。探索

Laoacai的博客 2万+

AMOS软件简介及编程实践

通过本文的介绍,我们了解了AMOS软件的基本情况以及它提供的编程功能。通过示例代码的演示,我们也能够感受到AMOS编程的简洁与强大。AMOS(Advanced Mortal Online Scripting)是一款支持高级编程的软件,它提供了一套强大的工具和语言,用于创建复杂的计算机程序。强大的图形处理能力:AMOS内置了丰富的图形库和图形处理功能,使得开发者可以轻松地创建各种图形效果、动画和交互式界面。高度可扩展性:AMOS支持插件和模块化设计,开发者可以根据自己的需求自定义功能和扩展软件的功能。

CoderExtra的博客 1541

AMOS学习笔记

AMOS(Analysis of Moment Structures)是一种统计分析方法,用于探究测量模型和结构方程模型的原理。AMOS通常用于心理学、社会学、教育学等领域中,来测试和验证理论模型,并通过数据进行模型拟合和检验。

m0_72410588的博客 1940

SPSS 16/17一键安装PLS回归插件(含演示数据与自动配置脚本)

专为SPSS Statistics 16.0和17.0版本定制的偏最小二乘回归(PLS)功能扩展工具,以原生插件形式集成进SPSS菜单栏,无需额外安装R或Python环境。安装过程全自动执行,通过内置Python脚本(Extras.install.py)完成模块注册、路径识别与界面项添加,支持Windows系统即装即用。安装后可在SPSS图形界面中直接调用PLS建模功能,涵盖潜变量路径分析、主成分提取、交叉验证(如Venetian盲法)、R²、Q²等模型拟合指标输出。配套提供Demo目录下的实操示例数据集,

loss4bartender的博客 256

AMOS步步教程

超详细的AMOS使用教程,撇开繁复的结构方程原理,从软件使用角度着手,十分适合初学时快速上手AMOS分析

Amos简介及安装步骤

想要学习更多SPSS、AMOS、R等软件操作,请关注“数据分析成长记”微信公众号,更多精彩文章等你来读! Amos AMOS.TIME IBM® SPSS® Amos 是一款强大的结构方程建模 (SEM) 软件,支持通过扩展标准多变量分析方法(包括回归、因子分析、相关分析以及方差分析)来支持研究和理论。使用直观的图形或程序化用户界面构建态度和行为模型,与标准多变量统计方法相比,这些模型可以更准确地反映复杂关系。Amos 包含在 SPSS Statistics 的高级版中(校园版除外,这里单独销售)。您

Data King的博客 5万+

AMOS数据分析

数据分析

《UNIX环境高级编程》第二版源码在Ubuntu下的编译

1.在http://www.apuebook.com下载源代码 2. 查看READ root@ubuntu:/home/wl/mywork/apue.2e# cat -n README 1 Read the file called DISCLAIMER. 2 3 Some source changes needed to be made after the

xlsernt_sina_com的专栏 699

踩坑记录:服务商模式下微信小程序支付,为什么必须用子商户的AppID获取openid?

本文深入解析了服务商模式下微信小程序支付必须使用子商户AppID获取openid的技术原因,详细对比了服务商模式与直连模式的关键差异,并提供了正确的配置指南和常见问题解决方案,帮助开发者避免微信支付集成中的常见陷阱。

weixin_28318011的博客 548

基于Python爬虫的新闻热点分析与挖掘

本文介绍了基于Python爬虫的新闻热点分析与挖掘方法,主要包括数据收集、预处理、热点分析和可视化四个部分。首先通过爬虫抓取新浪新闻数据,利用文本清洗和存储技术进行数据预处理;接着采用TF-IDF和LDA算法进行关键词提取与主题建模;最后通过词云图和主题分布图实现数据可视化。该方法能有效识别新闻热点,为信息筛选和决策提供支持。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1544

OpenAI Codex 史诗级更新!Computer Use 解锁全场景桌面 Agent,实测 95% 跨应用自动化完成率

OpenAI最新发布的Codex全场景更新将AI编程助手升级为桌面级AIAgent,核心亮点包括ComputerUse插件实现跨应用95%自动化完成率、内置浏览器DOM元素精准识别、多模态图像批量生成等六大功能。实测显示,Codex可后台静默完成12分钟跨应用任务链,具备异常处理与断点续跑能力。技术层面采用Rust编写的沙箱隔离架构,支持MCP协议跨应用协同,token消耗仅为竞品1/3。该更新标志着开发者将从编码者转型为架构设计者,办公自动化进入自然语言驱动新阶段,同时将加剧大模型生态竞争。目前主要限制为

爱人爱己,风生水起 2910

多普勒效应及多普勒频移的简单推导

多普勒频移的简单推导

m0_47867419的博客 3万+

整体认识mybatis与源码分析

第一节课:整体认识mybatis与源码分析 第二节课:Mybatis源码分析二 第三节课:Mybatis源码分析三 第四节课:Mybatis与Spring整合与徒手实现 学完之后可以get到: Mybatis在开发中作用与工作原理 Mybatis源码的精髓与设计模式 Orm框架的核心思想与设计能力 一、传统JDBC弊端 总结: 1、jdbc底层没有用连接池、操作数据库需要频繁的创建和关联链接。消耗很大的资源 2、写原生的jdbc代码在java中,一旦我们要修改sql的话,j..

1 350

YOLOv8 模型进化全解析:百种创新模块集成方法与实战部署指南(附资料链接)

动态网络 | DeformableConv/DynamicHead| +2.8% || 轻量化卷积 | GhostConv/MobileConv | +1.2% || 多尺度融合 | AFPN/ASFF | +3.5% || 注意力机制 | CA/EMA/SimAM | +1.8-4.2% |

FJN110的博客 111

Token 费用爆炸?教你用 Semantic Cache(语义缓存)把 API 成本降低 80%

本文介绍了语义缓存(Semantic Cache)技术在大模型应用中的关键作用。传统Redis缓存基于精确匹配,无法处理用户提问的语义相似性,导致重复调用昂贵的LLM API。语义缓存通过将问题向量化并在向量空间中进行相似度匹配,可识别30%-50%的重复提问,直接返回历史答案。文章详细解析了技术原理(Embedding+向量搜索)、架构设计,并提供了基于Python和ChromaDB的50行核心实现代码。同时指出了生产环境中的三大挑战:阈值设定、隐私保护和多轮对话处理,并给出相应解决方案。该技术能以极低成

BUG猿的博客 1055

oracle locking and latching,LoopJump

读了Architecture of a Database System这篇经典论文,挑了些不太熟悉的内容做了笔记。论文内容基本上谈不上是在讲架构吧,基本上就是罗列了下有哪些组件,而且内容基本上针对原来传统数据库的。主要包括几个组件:Client Communication ManagerProcess ManagerRelational Query ProcessorTransaction Sto...

weixin_39608134的博客 154

华为OD新系统机试真题 2026.5.10 - 美观的灯笼

华为OD新系统机试真题【美观的灯笼】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【美观的灯笼】

qq_45776114的博客 640

Velvet1.2.10的安装和使用

1. Velvet的安装 Velvet用于基因组的de novo组装,支持各种原始数据,包括Illumina的short reads和454的long reads。 首先下载velvet的安装包,直接使用make命令来编译,即可获得可执行主程序velveth和velvetg。安装如下: $ wget http://www.ebi.ac.uk/~zerbino/velvet/velv...

a12141986的博客 1217

机器人动力学仿真软件:PyBullet_(10).案例分析:双足机器人行走仿真

在本节中,我们将详细探讨如何使用PyBullet进行双足机器人的行走仿真。双足机器人行走仿真是一个复杂的动力学问题,涉及多个关节的协调运动和环境交互。通过本节的学习,您将了解如何创建和控制双足机器人模型,设置仿真环境,以及实现基本的行走算法。首先,我们需要创建一个双足机器人模型。PyBullet支持多种模型格式,包括URDF(Unified Robot Description Format)和MJCF(MuJoCo XML Format)。URDF是一种广泛使用的机器人模型描述格式,我们将使用URDF来创建

kkchenjj的博客 909

NR PUCCH(二)PUCCH format 2/3/4

继续看PUCCH2/3/4:PUCCH format 0和1所携带的信息bits少,UCI bits2bits,信息bit需要经过编码等过程下面分别来看。

ModemProtocol的博客 538

下一个SWE-bench?解读Meta最新软件工程基准ProgramBench

arXiv:2605.03546v1 (预印本标识)John Yang, Kilian Lieret, Jeffrey Ma, Parth Thakkar 等总结1: 评估范式由SWE-bench的修bug改为直接重建整个项目。现有的代码大模型评估(如SWE-bench)陷入了“填空题”和“局部修补”的瓶颈。ProgramBench首创了“黑盒逆向工程+从零构建”的范式,强迫AI承担真正的“软件架构师”角色,是极具前瞻性的基准测试。总结2: 评测与实现方式无关,只关注项目最终表现是否一致。

hxshine的博客 654

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Java学习笔记-多态机制的意义及实现

在面向对象编程(Object-Oriented Programming, OOP)中,多态机制无疑是其最具特色的功能,甚至可以说,不运用多态的编程不能称之为OOP。这也是为什么有人说,使用面向对象语言的编程和面向对象的编程是两码事。 多态并没有一个严格的定义,维基百科上给它下的定义比较宽松: Subtype polymorphism, almost universally called just po...

JustDI0209的博客 320

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

RawTherapee与dcraw对比分析:为什么选择这款开源照片处理神器

RawTherapee是一款功能强大的跨平台开源原始照片处理程序,它在dcraw的基础上进行了深度优化与扩展,为摄影爱好者和专业人士提供了更全面、更灵活的照片编辑体验。本文将深入对比RawTherapee与dcraw的核心差异,帮助您理解为何这款开源神器能成为RAW处理的理想选择。 ## 📌 核心差异:从命令行工具到专业工作站 dcraw作为经典的RAW解码工具,主要专注于原始数据的读取与转

gitblog_00445的博客 443

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

QEMU 8-早期项目

以下是 Fabrice Bellard(QEMU、FFmpeg 等知名项目的创始人)在。(通过将 Java 代码转换为 C 实现)。改进 Linux 图形帧缓冲驱动的架构设计。,与 Sylvain Delas 合作完成。实现高效渲染(大部分用汇编编写)。:2024 年 12 月 26 日。完成的一系列技术项目,涵盖。计算并输出当时已知的最大素数。的实时缩放演示,并提供源码。,程序可实时旋转查看,用于。实习期间完成的首个版本。等重大项目奠定了基础。,小巧、免费且高效。(检测其他机器人)。

hxsln11的博客 1019

《Monkey Android》第5课之剖析第一个App

通过本节课可以学习到的内容: 第一个App最重要的三个文件 MainAcivity.java代码分析 activity_main.xml代码分析 AndroidManifest.xml代码分析

安卓猴的专栏 805
上一篇: LLVM MC 简介
下一篇: Adlik如何实现与燧原芯片的对接?
Linux基金会AI&Data基金会
博客等级 码龄6年 100粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值