您的位置:首页 → 基于Python的编译器实现了数量级的加速

2018年,《经济学人》发表了一篇关于编程语言Python的深入文章。“在过去的12个月里,”文章说,“谷歌在美国的用户搜索Python的频率超过了Kim Kardashian。真人秀明星,要警惕。

高级语言也赢得了它的流行,每天都有大量用户涌向该语言,因为它易于使用,部分原因是其简单易学的语法。这导致麻省理工学院计算机科学和人工智能实验室(CSAIL)和其他地方的研究人员制作了一种工具,以帮助更有效地运行Python代码,同时允许定制和适应不同的需求和上下文。编译器是一种软件工具,可将源代码转换为可由计算机处理器执行的机器代码,它允许开发人员在 Python 中创建新的领域特定语言 (DSL),这通常比 C 或 C++ 等语言慢几个数量级,同时仍然获得其他语言的性能优势。

DSL 是为特定任务量身定制的专用语言,比通用编程语言更容易使用。但是,从头开始创建新的DSL可能有点令人头疼。

“我们意识到,人们不一定想学习一门新语言或新工具,尤其是那些非技术人员。所以我们想,让我们采用Python语法,语义和库,并将它们合并到从头开始构建的新系统中,“Ariya Shajii博士说,他是关于团队新系统Codon的新论文的第一作者。“用户只需像他们习惯的那样编写Python,而不必担心数据类型或性能,我们会自动处理 - 结果是他们的代码运行速度比普通Python快10到100倍。密码子已经在定量金融、生物信息学和深度学习等领域得到商业应用。

该团队对Codon进行了一些严格的测试,它超过了它的重量。具体来说,他们采用了大约 10 个用 Python 编写的常用基因组学应用程序,并使用 Codedon 编译它们,并且比原始手动优化的实现实现了 10 到 <> 倍的加速。除了基因组学,他们还探索了定量金融中的应用,量化金融也处理大型数据集并大量使用Python。Codon平台还有一个并行后端,允许用户编写可以针对GPU或多个内核显式编译的Python代码,这些任务传统上需要低级编程专业知识。

飞机上的蟒蛇

与 C 和 C++ 等语言不同,它们都带有一个编译器,可以优化生成的代码以提高其性能,Python 是一种解释型语言。为了使Python更快,已经付出了很多努力,该团队表示,这种方法通常以“自上而下的方法”的形式出现,这意味着采用普通的Python实现并结合各种优化或“即时”编译技术 - 一种在执行过程中编译性能关键代码片段的方法。这些方法擅长保持向后兼容性,但极大地限制了您可以获得的加速类型。

“我们采取了更多的自下而上的方法,从头开始实施所有内容,这有局限性,但灵活性要大得多,”Shajii 说。“因此,例如,我们不能支持某些动态功能,但我们可以使用优化和其他静态编译技术,而这些技术在标准Python实现开始时是无法做到的。这是关键的区别——在自下而上的方法上没有投入太多精力,其中大部分Python基础设施都是从头开始构建的。

拼图的第一部分是向编译器提供一段 Python 代码。执行的关键的第一步称为“类型检查”,这是一个在程序中找出每个变量或函数的不同数据类型的过程。例如,有些可能是整数,有些可能是字符串,有些可能是浮点数——这是常规 Python 不会做的事情。在常规的Python中,你必须在运行程序时处理所有这些信息,这是导致它如此缓慢的因素之一。Codon的部分创新是该工具在运行程序之前进行此类型检查。这允许编译器将代码转换为本机机器代码,从而避免了 Python 在运行时处理数据类型的所有开销。

“Python是不是编程专家的领域专家的首选语言。如果他们编写了一个流行的程序,并且许多人开始使用它并运行越来越大的数据集,那么Python缺乏性能将成为成功的关键障碍,“麻省理工学院电气工程和计算机科学教授Saman Amarasinghe说。“Codon不需要使用像NumPy这样的C实现的库重写程序,或者用C这样的语言完全重写,而是使用相同的Python实现,并提供与用C重写相同的性能。因此,我相信Codon是成功的Python应用程序的最简单途径,这些应用程序由于缺乏性能而达到了极限。

比C的速度快

难题的另一部分是编译器中的优化。例如,使用基因组学插件将执行其自己的一组特定于该计算域的优化,例如,这涉及处理基因组序列和其他生物数据。结果是一个可执行文件,它以 C 或 C++ 的速度运行,一旦应用了特定于域的优化,甚至更快。

虽然Codon目前涵盖了Python的一个相当大的子集,但它仍然需要整合几个动态功能并扩展其Python库覆盖范围。Codon团队正在努力进一步缩小与Python的差距,并期待在未来几个月内发布几个新功能。Codon 目前在 GitHub 上公开发布。

除了Amarasinghe之外,Shajii还与前CSAIL学生,现任Jump Trading软件工程师Gabriel Ramirez一起撰写了这篇论文;麻省理工学院林肯实验室副研究员杰西卡·雷;Bonnie Berger,麻省理工学院数学、电气工程和计算机科学教授,CSAIL首席研究员;哈里斯·斯马伊洛维奇,维多利亚大学研究生;以及维多利亚大学计算机科学助理教授兼加拿大研究易卜拉欣·努马纳吉奇。

智能推荐