想知道MLGO是如何工作的吗?看完这篇文章你就懂了

news2024/7/4 5:09:31

在当今软件开发领域,代码优化对于提高性能和减小代码体积至关重要。在这方面,内联(Inlining)被认为是一项关键的优化技术之一。而MLGO能够在编译过程中智能地做出内联/非内联的决策,从而提供更高效、更紧凑的代码。本文将深入探讨MLGO的工作原理,让您全面了解这一令人激动的技术。

3f6805ef78ab291204b0403ebcf5a7ad.jpeg

内联(Inlining)是一种优化技术,旨在通过删除冗余代码来减小代码大小。在代码中存在大量的函数相互调用时,构成了一个称为调用图(Call graph)的结构。在内联阶段,编译器遍历整个调用图,并根据一定的决策规则来确定是否内联某些调用者-被调用者对。这是一个连续的决策过程,因为之前的内联决策会改变调用图,从而影响后续的决策和最终的结果。通过内联调用者-被调用者对,编译器可以生成更简洁的代码,从而减小代码的体积。

然而,在传统的启发式方法中,内联/非内联的决策通常是基于一些经验规则或启发式规则进行的。随着时间的推移,这种方法越来越难以改进,特别是在面对复杂的代码结构和大规模软件包时。为了解决这个问题,MLGO(Machine Learning Guided Optimization)引入了机器学习模型来替代传统的启发式方法。MLGO使用策略梯度和进化策略算法对决策网络进行强化学习训练,以提供内联/非内联的决策建议。

f57aeefdf57bdf80696df7fd6f7b3318.jpeg

在MLGO中,编译器在遍历调用图的过程中,通过提取相关特征作为输入,向神经网络模型咨询是否对特定的调用者-被调用者对进行内联。根据模型的建议,编译器依次做出内联/非内联的决策,直到整个调用图都被遍历完毕。这样的迭代决策过程将收集状态、行动和奖励的日志,在线强化学习(Online Reinforcement Learning)的方式下,不断改进策略,并更新模型。

在训练过程中,编译器使用经过训练的策略来进行内联/非内联决策,并记录下顺序决策过程的日志。然后,这些日志被传递给训练器,用于更新神经网络模型。这一训练过程不断迭代,直到获得一个满意的模型。

d236ada0c068448c83034f258359ee32.jpeg

训练完成后,训练好的策略被嵌入到编译器中,在实际的编译过程中提供内联/非内联的决策。与训练阶段不同,该策略不再生成日志。通过将TensorFlow模型嵌入到XLA AOT(Ahead-of-Time Compilation)中,可以将模型转换为可执行代码,避免了TensorFlow运行时的依赖和额外的时间与内存开销。

在大型内部软件包上进行的实验表明,通过MLGO训练得到的内联策略可以在其他软件的编译过程中推广使用,并减少3%至7%的时间和内存开销。这种通用性不仅适用于不同软件之间的比较,而且在软件和编译器的持续发展中也具有跨时间的通用性。经过三个月的评估,该模型在相同软件集合上的性能只出现轻微退化。

随着机器学习技术的不断进步和发展,我们可以期待MLGO在未来进一步推动代码优化领域的创新,为我们带来更高效、更可靠的软件。

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

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

相关文章

apk应用完整性校验

测试客户端程序是否对自身完整性进行校验。攻击者能够通过反编译的方法在客户端 程序中植入自己的木马,客户端程序如果没有自校验机制的话,攻击者可能会通过篡改客 户端程序窃取手机用户的隐私信息。 用 ApkTool 将目标 APK 文件解包,命令如…

linux下实现串口功能

1.先从wiringpi库复制一个串口代码 2.查看串口类型 3.将代码修改成ttyS5 4.改完代码后打开串口助手然后编译 代码示例&#xff1a; #include <stdio.h> #include <string.h> #include <errno.h> #include <pthread.h> #include <wiringPi.h> #i…

Ubuntu18.04.6本地部署PaddleSpeech实验代码(CPU版)

前言 因为本人不是搞python和AI的&#xff0c;所以部署这个项目是耗时耗力&#xff0c;本地部署还是挺麻烦的&#xff0c;发现了很多问题&#xff0c;关键就是权限和源代码路径问题&#xff0c;经历了14天&#xff08;大部分时间扔在做系统&#xff0c;装环境&#xff0c;代码阅…

【数学建模】常微分方程

常微分方程 博客园解释 https://www.cnblogs.com/docnan/p/8126460.html https://www.cnblogs.com/hanxi/archive/2011/12/02/2272597.html https://www.cnblogs.com/b0ttle/p/ODEaid.html matlab求解常微分方程 https://www.cnblogs.com/xxfx/p/12460628.html https://www.cn…

使用FreeMarker生成word文件自定义每页页眉或页脚

最新工作中遇到生成word中表格时&#xff0c;要求文档中每页头部和底部都是固定格式的表格&#xff0c;但是内容不一样&#xff0c;头部信息在word中画样式的时候就可以设置为“在各页顶端以标题形式重复出现”&#xff0c;而底部就没有办法这样设置了&#xff0c;之后就想着在…

【GPT模型】遥感云大数据在灾害、水体与湿地领域中的应用

近年来遥感技术得到了突飞猛进的发展&#xff0c;航天、航空、临近空间等多遥感平台不断增加&#xff0c;数据的空间、时间、光谱分辨率不断提高&#xff0c;数据量猛增&#xff0c;遥感数据已经越来越具有大数据特征。遥感大数据的出现为相关研究提供了前所未有的机遇&#xf…

TypeScript 中【class类】与 【 接口 Interfaces】的联合使用解读

导读&#xff1a; 前面章节&#xff0c;我们讲到过 接口&#xff08;Interface&#xff09;可以用于对「对象的形状&#xff08;Shape&#xff09;」进行描述。 本章节主要介绍接口的另一个用途&#xff0c;对类的一部分行为进行抽象。 类配合实现接口 实现&#xff08;impleme…

为什么Mate X3手机屏幕有水也不影响操作?

我知道现在的手机大多都防水&#xff0c;但没想到连折叠屏手机Mate X3在湿水状态下都丝毫不影响操作&#xff0c;现在的华为手机防水都做到这种程度了&#xff1f; 众所周知&#xff0c;如果手机屏幕上有水珠&#xff0c;那么手机的触屏就会变得飘忽不定。 这种“飘忽不定”是…

局域网聊天软件都有哪些?几款常用的局域网聊天软件推荐

随着科技的不断发展&#xff0c;人们在日常生活和工作中越来越需要高效便捷的沟通工具。而局域网聊天软件就是一种在局域网内使用的聊天工具&#xff0c;它能够帮助用户在同一网络内的设备之间进行即时通讯&#xff0c;无需依赖于互联网连接&#xff0c;安全又可靠。下面将为大…

学无止境·MySQL⑥(数据库备份和还原)

数据库备份和还原 备份和还原练习1、创建库和表2、使用mysqldump命令备份数据库中的所有表3、备份booksDB数据库中的books表4、使用mysqldump备份booksDB和test数据库5、使用mysqldump备份服务器中的所有数据库6、使用mysql命令还原第二题导出的book表7、进入数据库使用source命…

“快速批量去除文件夹名称中多余重复文字!轻松实现文件夹改名优化,提升整理效率!“

在日常的电脑使用中&#xff0c;我们常常面临着大量的文件和文件夹需要整理&#xff0c;而其中一个常见的问题就是文件夹名称中存在重复的文字&#xff0c;让整个文件夹结构变得混乱而不易管理。为了解决这一问题&#xff0c;我们自豪地推出了全新的文件夹改名工具&#xff0c;…

华为配置LLDP基本功能

华为配置LLDP基本功能 1.什么是lldp协议 定义 LLDP(Link Layer Discovery Protocol)是IEEE 802.1ab中定义的链路层发现协议。LLDP是一种标准的二层发现方式,可以将本端设备的管理地址、设备标识、接口标识等信息组织起来,并发布给自己的邻居设备,邻居设备收到这些信息后将…

产品新升级!MODBUS/SNMP智能协议转换器

“MODBUS TCP”是一种基于 TCP协议的工业控制设备通信协议&#xff0c;其主要功能是实现现场设备的远程控制。MODBUS TCP采用远程通讯的方式&#xff0c;通过 IP网络进行数据传输&#xff0c;因此其传输速率更快、网络负载更小、灵活性更高。 “ SNMP”是一种用于网络管理的…

如何考过PMP? 备考经历分享

考PMP的目的 周围很多同事、朋友都在学习PMP课程或者已获得证书&#xff0c;在日常工作中发现有些词语已经听不懂&#xff0c;比如项目集、项目组合&#xff0c;比如PM等&#xff0c;为了提升自己也为了能在侃大山时也能参与其中脱离“一清二白”的状态&#xff0c;所以下定决…

0基础学习云计算难吗?

很多人经常会问云计算是什么&#xff1f;云计算能干什么&#xff1f;学习云计算能做什么工作&#xff1f;其实我们有很多人并不知道云计算是什么&#xff0c;小知今天来给大家讲讲学习云计算能做什么。 中国的云计算行业目前正处于快速发展阶段&#xff0c;随着互联网和数字化…

SpringBoot 异常处理机制

SpringBoot中异常处理的流程图 在SpringBoot项目中&#xff0c;如果业务逻辑发生了异常&#xff0c;则首先看发生异常的类中有没有ExceptionHandle能处理&#xff0c;如果能&#xff0c;则执行方法进行处理&#xff0c;如果没有&#xff0c;则去找全局的ControllerAdvice注解…

X2000 Linux 调试VL53L4CD驱动

由于VL53L4CD具有更高的精度&#xff0c;更低的功耗&#xff0c;所以尝试将VL53L4CD移植到X2000上进行测试。 一、下载驱动 en.VL53L4CD_LinuxDriver 二、SDK中加入驱动 1、加入源码 在\module_driver\devices下创建VL53L4CD文件夹&#xff0c;再将\en.VL53L4CD_LinuxDriver…

Cyclo(Ile-Leu),91741-17-2,环(异亮氨酸-亮氨酸)二肽,可以根据实验需求定制

&#xff08;文章资料汇总来源于&#xff1a;陕西新研博美生物科技有限公司小编MISSwu&#xff09;​ Cyclo(Ile-Leu)&#xff0c;DL-isoleucyl-leucyl anhydride&#xff0c;环(异亮氨酸-亮氨酸)二肽&#xff0c;DL异亮氨酸酰酐 产品结构式&#xff1a; 产品规格&#xff1a;…

10.2.5 【Linux】变量的有效范围

在学理方面&#xff0c;为什么环境变量的数据可以被子程序所引用呢&#xff1f;这是因为内存配置的关系&#xff01;理论上是这样的&#xff1a; 当启动一个 shell&#xff0c;操作系统会分配一记忆区块给 shell 使用&#xff0c;此内存内之变量可让子程序取用 若在父程序利用…

从User-Agent获取浏览器类型

一、User-Agent User-Agent首部包含一个特征字符串&#xff0c;用来让网络协议的对端来识别发起请求的用户代理软件的应用类型、操作系统、软件开发商以及版本号。 二、从User-Agent中获取浏览器类型 1、通过自己编写js代码识别UA字符串中的浏览器类型 function getBrowser…