这款编译器能让Python和C++一样快:最高提速百倍,MIT出品

简介: 这款编译器能让Python和C++一样快:最高提速百倍,MIT出品


甚至比 C 的速度还快,现在已在 GitHub 上可用。


自深度学习兴起以来,Python 一直是最热门的编程语言之一,它在数据科学和机器学习领域占主导地位,甚至是科学和数学计算领域的主角。如今你能想象到的任何项目,几乎都可以找到一个相应的 Python 包。


然而,尽管高级语言的简化语法使其易于学习和使用,但和 C 或 C++ 等低级语言相比,它的速度更慢。


麻省理工学院计算机科学与人工智能实验室(CSAIL)的研究人员希望通过 Codon 来改变这一现状,Codon 是一种基于 Python 的编译器,允许用户编写与 C 或 C++ 程序一样高效运行的 Python 代码,同时可以定制和适应不同的需求和环境。


该研究的最新论文《Codon: A Compiler for High-Performance Pythonic Applications and DSLs》发表在了 2 月份的第 32 届 ACM SIGPLAN 编译器构建国际会议上。



在开发工作中,人们需要使用编译器将源代码转换为可由计算机处理器执行的机器代码,Codon 能帮助开发者在 Python 中创建新的领域特定语言(DSL),同时仍然获得其他语言的性能优势。


「常规 Python 会被编译成所谓的字节码,该字节码在虚拟机中执行,这就会让速度慢上很多,」Codon 论文的主要作者 Ariya Shajii 表示,「通过 Codon,我们则进行本地编译,因此你可以直接在 CPU 上运行最终结果 —— 不经过中间虚拟机或解释器。」


Codon 的编译管道包括类型检查,使其能够更高效地运行 Python 代码。

基于 Python 的编译器带有适用于 Linux 和 macOS 的预构建二进制文件,你还可以从源代码构建或生成可执行文件。「使用 Codon,你可以像 Python 一样分发源代码,或者你可以将它编译成二进制文件,」Shajii 说。「如果你想分发一个二进制文件,它将与像 C++ 这样的语言一样,例如一个 Linux 二进制文件或一个 Mac 二进制文件。」


为了让 Codon 更快,研究人员决定在编译时执行类型检查。类型检查涉及将数据类型(例如整数、字符串、字符或浮点数等)分配给值。例如数字 5 可以分配为整数,字母 c 可以分配为字符,单词 hello 可以分配为字符串,十进制数 3.14 可以分配为浮点数。


「在常规 Python 中,所有类型都给了 runtime,」Shajii 介绍道。「使用 Codon,我们在编译过程中进行类型检查,这让我们避免了在 runtime 进行所有昂贵的类型操作。」


MIT CSAIL 首席研究员 Saman Amarasinghe 补充说,「如果你有一种动态语言(比如 Python),每次你有一些数据时,你都需要在它周围保留很多额外的元数据,以确定 runtime 的类型。Codon 取消了这种元数据,因此代码速度更快,数据更小。」


根据 Shajii 的说法,Codon 在运行时没有任何不必要的数据或类型检查,所以开销为零。在性能方面,「Codon 通常与 C++ 不相上下。与 Python 相比,我们通常看到的是 10 到 100 倍的速度改进。」


另一方面,Codon 的方法有其权衡。「我们进行这种静态类型检查,并且不允许使用 Python 的一些动态特性,比如在 runtime 动态更改类型,」Shajii 表示。


「还有一些 Python 库我们还没有实现。」Amarasinghe 补充说,「Python 已经过无数人的实际测试,而 Codon 还没有达到那样的水平,它需要运行更多的程序,获得更多的反馈,并加固更多。达到常规 Python 的稳定水平需要一些时间。」


Codon 最初设计用于基因组学和生物信息学的工作。研究人员尝试了大约 10 个用 Python 编写的常用基因组学应用程序,并使用 Codon 对其进行了编译,与最初的手动优化实现相比实现了 5 到 10 倍的加速。


「如今这些领域的数据集已变得非常大,而像 Python 和 R 这样的高级语言速度太慢,无法处理每组测序 TB 级的数据量,」Shajii 说道。「这就是我们想要填补的空白 —— 通过构建一种无需写 C 或 C++ 代码即可处理大数据的方法,从而为非计算机科学或专业开发者的领域专家提供帮助。」


上述图表在几个基准上比较了 Python(CPython 3)、PyPy、Codon 和 C++ 的性能。y 轴显示 Codon 实现相对于 CPython 实现的加速。MIT/EXALOOP/UNIVERSITY OF VICTORIA/ACM


除了基因组学,Codon 还可以应用于处理海量数据集的类似应用程序,以及基于 Python 的编译器支持的 GPU 编程和并行编程等领域。事实上,Codon 现在正通过初创公司 Exaloop 在生物信息学、深度学习和量化金融领域进行商业应用,Shajii 创立了该公司,旨在将 Codon 从学术项目转变为行业应用。


为了使 Codon 能够适应不同领域,该团队开发了一个插件系统。「它就像一个可扩展的编译器,」Shajii 说道。「你可以为基因组学或其他领域编写插件,这些插件可以有新的库和新的编译器优化。」


此外,公司和机构可以使用 Codon 来制作原型和开发自己的应用程序。「我们看到的一种模式是:人们使用 Python 进行原型设计和测试,因为它易于使用,但到了某些重要事项上,他们就不得不重写应用程序,或让其他人用 C 或 C++ 在更大的数据集上进行重写与测试,」Shajii 表示。「通过 Codon,你就可以完全使用 Python,并获得两全其美的好处。」


关于 Codon 的未来,Shajii 和他的团队目前正在研究广泛使用的 Python 库的本地实现,以及特定于库的优化,以帮助人们从这些库中获得更好的性能。他们还计划创建一个广受欢迎的功能:Codon 的 WebAssembly 后端,以支持在 Web 浏览器上运行代码。


参考内容:

https://spectrum.ieee.org/python-compiler

https://news.mit.edu/2023/codon-python-based-compiler-achieve-orders-magnitude-speedups-0314

相关文章
|
3月前
|
算法框架/工具 C++ Python
根据相机旋转矩阵求解三个轴的旋转角/欧拉角/姿态角 或 旋转矩阵与欧拉角(Euler Angles)之间的相互转换,以及python和C++代码实现
根据相机旋转矩阵求解三个轴的旋转角/欧拉角/姿态角 或 旋转矩阵与欧拉角(Euler Angles)之间的相互转换,以及python和C++代码实现
205 0
|
6天前
|
机器学习/深度学习 算法 编译器
Python程序到计算图一键转化,详解清华开源深度学习编译器MagPy
【10月更文挑战第26天】MagPy是一款由清华大学研发的开源深度学习编译器,可将Python程序一键转化为计算图,简化模型构建和优化过程。它支持多种深度学习框架,具备自动化、灵活性、优化性能好和易于扩展等特点,适用于模型构建、迁移、部署及教学研究。尽管MagPy具有诸多优势,但在算子支持、优化策略等方面仍面临挑战。
19 3
|
4月前
|
编译器 开发工具 C++
【Python】已解决error: Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C++ Build
【Python】已解决error: Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C++ Build
1765 0
|
26天前
|
C++ Python
探索Python与C/C++混合编程的艺术
探索Python与C/C++混合编程的艺术
30 1
WK
|
2月前
|
机器学习/深度学习 Java 程序员
为什么Python比C++慢很多?
Python相较于C++较慢主要体现在:动态类型系统导致运行时需解析类型,增加开销;作为解释型语言,逐行转换字节码的过程延长了执行时间;自动内存管理和垃圾回收机制虽简化操作但也带来了额外负担;全局解释器锁(GIL)限制了多线程性能;尽管Python库方便灵活,但在性能上往往不及C++底层库。然而,Python在某些领域如数据分析、机器学习中,凭借其高级别抽象和简洁语法仍表现出色。选语言需依据具体应用场景和需求综合考量。
WK
69 1
|
3月前
|
编解码 编译器 C++
VS Code C/C++ MSVC编译器
VS Code C/C++ MSVC编译器
65 2
|
3月前
|
Unix C语言 C++
Python调用C/C++
Python调用C/C++
23 2
|
3月前
|
PHP C++ Python
右手坐标系,空间点绕轴旋转公式&程序(Python和C++程序)
右手坐标系,空间点绕轴旋转公式&程序(Python和C++程序)
58 0
|
3月前
|
编译器 C++
VS Code设置C++编译器路径
VS Code设置C++编译器路径
44 0
WK
|
3月前
|
机器学习/深度学习 运维 Java
Python 相对于 C++ 有哪些明显的优势
C++是一种强大且高效的编程语言,被广泛应用在系统软件、游戏开发、嵌入式系统等多个领域。然而Python在某些方面展现出显著优势:Python语法简洁直观,易于学习与使用,提高了代码的可读性和团队协作效率;拥有丰富的第三方库和框架资源,能有效提升开发效率;具备良好的跨平台性,无需大量修改即可适应不同操作系统;
WK
50 0