传统编译器与 AI 编译器区别

news/2024/9/30 14:18:46
传统编译器与 AI 编译器区别
接下来,来了解一下 AI 编译器与传统编译器的区别与联系。
1. 区别与联系
1)目标相同:AI 编译器与传统编译器都是通过自动化的方式进行程序优化和代码生成,从而节省大量的人力对不同底层硬件的手动优化。
2)优化方式类似:在编译优化层,AI 编译器与传统编译器都是通过统一 IR 执行不同的 Pass 进行优化,从而提高程序执行时的性能。
3)软件栈结构类似:它们都分成前端、优化、后端三段式,通过 IR 解耦前端和后端使得可以进行模块化表示。
4)AI 编译器依赖传统编译器:AI 编译器对 Graph IR 进行优化后,将优化后的 IR 转化成传统编译器 IR,最后依赖传统编译器进行机器码生成。因为传统编译器经过几十年的发展已经趋于稳定,所以 AI 编译器的角色更像是对传统编译器的一种补充。
2. 编译目标的差异
传统编译器的起点是高级编程语言,终点则是硬件能够执行的机器码。相对地,AI 编译器的输入是深度学习模型的计算图,而输出同样是机器码。这在输入层面构成了传统编译器与 AI 编译器最根本的区别,如图8-7所示。
进一步的区别体现在编译器的目标上。对于传统编译器而言,其核心使命是简化编程过程,将人类可读的高级语言代码转化为机器可执行的代码。通常不会直接编写机器码来让芯片运行,传统编译器便扮演了这一桥梁的角色。此外,传统编译器通过各种优化技巧,如使用 GCC 编译 C 程序时开启-O3 选项,进一步提升程序性能。
图8-7编译技术支持编译目标的差异性
而对于 AI 编译器,其主要目标则是优化整个程序的性能,确保深度学习模型在硬件上高效运行。降低编程难度虽然也是 AI 编译器的目标之一,但相较于性能优化,它退居次要位置。
3. 依赖的层级关系
在下面的图表中,左侧展示了传统编译器的软件栈结构,右侧则呈现了 AI 编译器的架构。通过对比这两部分,可以清晰地辨识出它们之间的差异。
传统编译器的前端专注于对高级编程语言进行深入的语义分析、语法分析和词法分析,将源代码转化为中间表示(IR)。在中间阶段,编译器执行一系列优化 Pass,专门针对高级语言代码进行性能提升。而在后端,编译器负责处理代码的具体布局、寄存器分配等任务。
相比之下,AI 编译器的架构则有显著的不同。它的前端主要负责将深度神经网络的 API 表达为计算图,这一过程涉及到模型的构建和转换。在中间优化阶段,AI 编译器专注于图算融合、算子融合、自动微分和并行切分等特定优化技术。后端则根据目标硬件平台,对 kernel 进行定制化优化,确保代码在不同硬件上都能高效运行。在某些情况下,如 CPU 或 TPU 等芯片,AI 编译器甚至可能利用类似 LLVM 这样的传统编译器技术。
由此可见,AI 编译器在很多方面是站在传统编译器的肩膀上,它们之间形成了一种互补和协同的关系,如图8-8所示。
图8-8编译技术层次关系依赖性

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

如何解决k8s CNI 子网不够问题

问题现象 CNI 状态 CrashLookBackOff问题原因 默认环境下 k8s 每个 node 的CNI subnet 子网是一个 24位掩码的子网。当集群总结点数超过 255 个将导致 CNI 子网不足。我们有两种方式结局 解决方案 init 集群指定 kube-controller-manager 参数 apiVersion: kubeadm.k8s.io/v1be…

php docker image

Quick referenceMaintained by: the Docker Community⁠Where to get help the Docker Community Slack⁠, Server Fault⁠, Unix & Linux⁠, or Stack Overflow⁠Supported tags and respective Dockerfile links Note: the description for this image is longer than th…

为什么需要 AI 编译器

为什么需要 AI 编译器 随着硬件技术的不断进步,进入了一个新的计算加速时代,这个时代的硬件平台变得越来越复杂和多层次。现代计算加速平台采用了多层架构,包括标量、向量、多核、多包、多机架等不同层次的并行处理能力。这种设计不仅提高了性能,也增加了硬件设计的复杂性。…

apisix dashboard 基本操作

apisix dashboard 基本操作安装1、下载rpm包wget https://github.com/apache/apisix-dashboard/releases/download/v3.0.1/apisix-dashboard-3.0.1-0.el7.x86_64.rpm2、安装apisix-dashboard-3.0.1-0.el7.x86_64.rpm3、启动systemctl start apisix-dashboard 修改WEB登陆账户1…

怎么搭建Plane

Github地址 https://github.com/makeplane/plane环境查看 系统环境# cat /etc/redhat-release CentOS Stream release 9 # uname -a Linux CentOSStream9Zabbix203 5.14.0-391.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Nov 28 20:35:49 UTC 2023 x86_64 x86_64 x86_64 GNU/Linu…

实时语音交互中文基准首期测评出炉;美取消 SB-1047 法案,大模型厂商大难不死丨 RTE 开发者日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文章 」、「有看点的 会议 」,但内容仅代表编辑…

五,MyBatis-Plus 当中的 “ActiveRecord模式”和“SimpleQuery工具类”(详细实操)

五,MyBatis-Plus 当中的 “ActiveRecord模式”和“SimpleQuery工具类”(详细实操) @目录五,MyBatis-Plus 当中的 “ActiveRecord模式”和“SimpleQuery工具类”(详细实操)1. ActiveRecord 模式2. ActiveRecord介绍2.1 ActiveRecord实现3. SimpleQuery 工具类3.1 SimpleQu…

快速入门Java中的HTTP请求

1. 使用java.net.HttpURLConnection Java标准库中的HttpURLConnection是最基本的方式,用于发送HTTP请求。 示例:发送GET请求发送POST请求2. 使用Apache HttpClient Apache HttpClient是一个强大的HTTP客户端库,支持高级HTTP通信功能。 添加依赖 如果你使用Maven,添加以下依…