0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

这款编译器能让Python和C++一样快!

CVer 来源:机器之心 2023-04-04 14:21 次阅读

甚至比 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 编译器构建国际会议上。

项目链接:https://github.com/exaloop/codon

论文:https://dl.acm.org/doi/abs/10.1145/3578360.3580275

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

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

e24fc900-d2ab-11ed-bfe3-dac502259ad0.png



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++ 代码即可处理大数据的方法,从而为非计算机科学或专业开发者的领域专家提供帮助。」

e26edb24-d2ab-11ed-bfe3-dac502259ad0.png

上述图表在几个基准上比较了 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 浏览器上运行代码。

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C++
    C++
    +关注

    关注

    21

    文章

    2066

    浏览量

    72900
  • 编译器
    +关注

    关注

    1

    文章

    1577

    浏览量

    48617
  • 机器学习
    +关注

    关注

    66

    文章

    8123

    浏览量

    130567

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

文章出处:【微信号:CVer,微信公众号:CVer】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Arm编译器怎么

    供裸机和内核级别的调试与跟踪功能。也包含了Arm唯和处理联合开发的商用编译器,提供强大完善的技术支持。  DS5是端到端的基于Arm核的嵌入式C/
    发表于 03-19 15:48

    请问对RX23T似乎不能对c++进行编译,是编译器版本问题吗?

    对于RX23T似乎不能对c++进行编译,请问是编译器版本问题吗?
    发表于 07-23 06:47

    C++笔记010:C++C的扩展——register关键字增强

    很好的补充。我们说C++编译器的优化方式:像for循环这种频繁使用i的地方,C++编译器会做优化,将变量i放到寄存
    发表于 08-11 12:34

    CC++文本编辑与VS编译器的使用

    C程序语言的编译环境的搭建就是指安装编译器或集成开发环境(Integrated Development Environment —— IDE)的安装、配置与调试,直至能让
    发表于 10-27 16:10

    MCUXPRESSO编译器C++有问题怎么处理?

    我的 MCUXPRESSO 编译器 C++ 有问题
    发表于 04-20 06:11

    如何为Arm编译Cc++代码

    C++源代码翻译成机器代码的编译器。 •将汇编语言源代码翻译成机器代码的汇编程序。 •个链接,用于将多个机器代码模块组合成个可执行文
    发表于 08-02 17:28

    Arm C/C++编译器开发人员和参考指南

    提供帮助您使用Arm®编译器Linux版的Arm®C/C++编译器组件的信息。Arm®C/C++
    发表于 08-10 06:17

    Arm C/C++编译器22.1版开发人员和参考指南

    提供帮助您使用ARM®编译器Linux版的ARM®C/C++编译器组件的信息。 ARM®C/C++
    发表于 08-11 07:46

    RealView用于BREW编译器和库的编译工具指南

    99的些功能,如Long Long,也是可用的。 ARM C++编译器期望C++符合国际标准化组织/国际电工委员会14822:1998年的C++
    发表于 08-12 07:38

    Linux下C/C++编译器gcc使用指南

    1.gcc包含的c/c++编译器 gcc,cc与c++,g++ gcc和cc是一样的,c++和g++是
    发表于 11-02 10:59 0次下载

    英特尔C++和Fortran编译器的逐渐优化过程介绍

    这是一个介绍视频,解释了英特尔®C++和Fortran编译器提供的逐步优化。
    的头像 发表于 11-05 06:21 2911次阅读

    SuperH C/C++ 编译器包 V.9.04 用户手册

    SuperH C/C++ 编译器包 V.9.04 用户手册
    发表于 01-12 18:45 1次下载
    SuperH C/<b class='flag-5'>C++</b> <b class='flag-5'>编译器</b>包 V.9.04 用户手册

    C/C++编译器的缺省字节对齐方式

    C/C++编译器的缺省字节对齐方式为自然对界。即在缺省情况下,编译器为每一个变量或是数据单元按其自然对界条件分配空间。
    的头像 发表于 04-15 11:24 711次阅读

    SuperH C/C++ 编译器包 V.9.01 用户手册

    SuperH C/C++ 编译器包 V.9.01 用户手册
    发表于 04-21 19:55 0次下载
    SuperH C/<b class='flag-5'>C++</b> <b class='flag-5'>编译器</b>包 V.9.01 用户手册

    SuperH C/C++ 编译器包 V.9.04 用户手册

    SuperH C/C++ 编译器包 V.9.04 用户手册
    发表于 07-03 18:38 4次下载
    SuperH C/<b class='flag-5'>C++</b> <b class='flag-5'>编译器</b>包 V.9.04 用户手册