机器学习在编译器中的应用

原文来自微信公众号“编程语言Lab”:机器学习在编译器中的应用
搜索关注“编程语言Lab”公众号(HW-PLLab)获取更多技术内容!
欢迎加入编程语言社区 参与交流讨论(加入方式:添加文末小助手微信,备注“编程语言社区”)。

作者 | 王焕廷

整理 | Hana

作者简介

王焕廷,英国利兹大学计算机专业博士生,研究方向为编译器优化,漏洞检测。

个人主页 / Github 主页:https://github.com/HuantWang

个人邮箱:schwa@leeds.ac.uk

近些年来,越来越多的学者和研究人员将目光对准了机器学习技术在编译器领域的应用。在本文里,我们将阐述机器学习和编译器优化之间的关系,并介绍其中的一些典型应用。

编译器 & 机器学习

对于 编译器 本身,我们可以将其理解成一个翻译器程序,一个将 “一种语言(通常为高级编程语言,如 C 语言)” 翻译为 “另一种语言(通常为低级语言,如可执行的汇编指令)” 的程序。关于编译器的作用,可以归纳为代码翻译和性能优化两部分。首先,它们必须正确地将程序翻译为可执行的二进制文件;其次,它们必须找到最有效(执行速度最快或代码量最小)的汇编指令。

传统编译器 GCC 的翻译优化过程如下图所示,源代码被传入编译器中,经过转换器进行从高级语言到低级语言的优化,再经过编译器中对不同级别语言的优化选项进行优化,最终得到优化后的汇编指令。当前,绝大多数针对编译器的研究工作和工程实践都集中在 性能优化 这一目标上 1

在这里插入图片描述

GCC 编译器的工作流

机器学习 技术,近些年来已经被广泛应用于生活中的不同领域:如自然语言处理、自动驾驶、图像处理等。机器学习技术旨在基于已知(或先验)的数据对未知的数据样本结果进行预测。如果能合理地使用机器学习算法构筑对应的模型去寻找最有效的汇编指令,那无疑将大大减少编译器优化工程师的压力。

基于机器学习的编译技术,本质上在解决 “最优化” 的问题,更通俗地讲,它试图将优化问题转换成预测问题并加以解决。一般来说,开发人员将编译器领域的代码优化问题转换为机器学习中的预测问题,并将基于机器学习构筑的模型作为最优代码的预测器,从而对代码优化结果进行预测。

编译器发展过程中的 “变”vs“不变”

基于机器学习的编译器优化技术作为一个研究领域,一直受到研究人员的广泛关注。然而,相比于机器学习技术在传统的图像、自然语言处理领域中的大放异彩,它在编译器领域的应用却一直无法得到广泛应用。我们发现,传统的编译器优化模块仍然依赖于几十年前的架构,基于机器学习的优化模块并未在编译器领域得到充分体现。

因此,一个值得我们思考的问题是,为什么会出现这样的情况呢?是传统的编译优化方式已经足够好,所以编译器开发人员不需要对已有方法进行改进了吗?

事实并非如此,目前主流的编译器架构已经被研究了很多年,其架构本身却一直没有任何变化。这套 “过时” 的架构

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值