麻省理工学院的研究人员建立了一个新的基准测试工具,可以准确预测给定代码在计算机芯片上执行所花费的时间,这可以帮助程序员调整代码以提高性能。预测错误率甚至比英特尔自家的工具低50%。
为了让代码尽可能快地运行,开发人员和编译器(将编程语言转换为机器可读代码的程序)通常使用性能模型,通过模拟给定的芯片体系结构来运行代码。
编译器使用这些信息来自动优化代码,开发人员使用这些信息来解决运行这些代码的微处理器的性能瓶颈问题。但是,机器代码的性能模型是由少数专家团队写的,未经过合适的验证。其结果是,模拟出的性能标准通常与实际结果有偏差。
现在,MIT的研究人员开始着手解决这个问题,他们在去年6月的国际机器学习大会上提出了一种新的机器学习pipeline,可以将上面的模拟过程自动执行,使这个过程更便捷,更快速,更准确。据研究人员介绍,Ithemal是一种神经网络模型,它以“基本块”(计算指令的基本摘要)的形式训练标记数据,以自动预测给定芯片执行以前看不见的基本块需要多长时间。Ithemal的性能要比传统的手动调整模型精确得多。
在去年11月举行的IEEE国际研讨会上,研究人员提出了各个领域的基本模块的基准套件,包括机器学习,编译器,密码学和可用于验证性能模型的图形。他们将超过30万个已分析的块合并到一个名为BHive的开源数据集中。在评估过程中,Ithemal预测出英特尔芯片运行代码的速度要比英特尔自己构建的性能模型还要好。
开发人员和编译器可以使用该工具来生成代码,让代码在越来越多的多“黑匣子”芯片设计方案上更快,更高效地运行。现代计算机处理器的设计是不透明的,设计方案极其复杂且难以理解。如何编写代码才能在这些处理器实现尽可能快的执行速度,是一个很大的挑战。”
MIT 助理教授,人工智能实验室研究员迈克尔·卡宾(Michael Carbin)是这款工具的作者之一,他表示,该工具是“朝着对这些芯片的性能进行完全建模来提高代码效率的重要一步。”
最近,在12月举行的NeurIPS 2019上,团队又提交一篇论文,提出了一种自动生成编译器优化的新技术。具体来说,就是自动生成一个名为Vemal的算法,将某些代码转换为向量,可用于并行计算。实验表明,Vemal的性能优于业界常用的LLVM编译器中使用的手工矢量化算法。
从数据中学习,不需要技术文档
Carbin说,手工设计性能模型可能是“一门黑科技”。英特尔提供了超过3000页的详尽文档,描述了其芯片的体系结构。但是目前只有一小部分专家能够构建性能模型,以模拟这些架构上代码的执行情况。
Mendis说:“英特尔的文档中既存在错误,也够不完整,并且将一些信息略去不提,因为涉及专有知识产权。但是,如果利用的是数据,就无需了解文档。即使有些东西被略去了,也可以直接从数据中学习。”
为此,研究人员记录了给定微处理器计算基本块指令的平均需要多少个周期,这些指令基本上是启动、执行和关闭操作序列,无需人工干预。对这个过程实现自动化,就可以快速分析成千上万个基本指令块。
专有域架构:纯文本学习,无需手动添加特征
在训练中,Ithemal模型分析了数百万个自动划分的基本块,准确了解不同的芯片体系结构执行计算的方式。重要的是,Ithemal将原始文本作为输入,不需要手动向输入数据中添加特征。在测试中,可以将以前不可见的基本块和给定的芯片信息作为输入提供给Ithemal,Ithemal将生成一个数字,表示出该芯片执行该代码段的速度。
研究人员发现,Ithemal预测的错误率(即预测速度与实际速度之间的差异)比传统的手工模型降低了50%。此外,在之后的一篇论文中,研究人员表明,Ithemal的预测错误率为10%,而Intel自己的性能预测模型在多个不同域的各种基本模块上的预测错误率为20%。
Mendis说,目前这款工具可以让人们更轻松地快速了解任何新芯片架构的性能速度。例如,专门用于神经网络的Google新型TPU。“如果要在某些新架构上训练模型,只需从这种架构上收集更多数据,通过我们的探查器运行,使用这些信息来训练Ithemal,就能生成预测性能的模型。” Mendis说。
未来,研究人员正在研究如何让模型变得可解释。机器学习在很大程度上是个黑匣子,人们不清楚特定模型会做出某种预测的原因是什么。“我们的模型显示,某个处理器要执行一个基本块需要10个周期。现在,我们在研究模型为什么做出这样的预测。” Carbin说。“对于此类的工具来说,这已经达到了微粒度级别,真是太好了。”
研究人员还希望用Ithemal进一步增强Vemal的性能,让其自动达到更高的性能。