相关文章推荐
俊秀的冲锋衣  ·  Python链表实现·  1 月前    · 
正直的键盘  ·  Python 有指针吗?_python中有没有指针·  1 月前    · 
耍酷的枕头  ·  Python txt 特定位置写入内容·  1 月前    · 
爱喝酒的充值卡  ·  几种编程语言中的索引开头是0还是1?_在计算 ...·  1 月前    · 
痴情的铁板烧  ·  前端開發環境 + React + TS - ...·  1 月前    · 
失恋的马铃薯  ·  excel巧用REPT函数在数字前补0-阿里 ...·  1 年前    · 
单身的菠萝  ·  conda和pip区别,安装package包 ...·  2 年前    · 
逆袭的签字笔  ·  prettier - How do I ...·  2 年前    · 
任性的弓箭  ·  c++ - How can I get ...·  2 年前    · 
开朗的路灯  ·  vue + ...·  2 年前    · 
Code  ›  让 Python 拥有 C/C++ 一样的速度,编译神器 Codon 发布!开发者社区
编译程序 python 编程语言
https://cloud.tencent.com/developer/article/2259118
留胡子的电影票
2 年前
作者头像
AI科技大本营
0 篇文章

让 Python 拥有 C/C++ 一样的速度,编译神器 Codon 发布!

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > AI科技大本营的专栏 > 让 Python 拥有 C/C++ 一样的速度,编译神器 Codon 发布!

让 Python 拥有 C/C++ 一样的速度,编译神器 Codon 发布!

作者头像
AI科技大本营
发布 于 2023-04-06 14:11:26
220 0
发布 于 2023-04-06 14:11:26
举报

编译 | 苏宓

出品 | CSDN(ID:CSDNnews)

Python 的运行速度快吗?虽说不同场景不同定论,但整体而言,它没有 C、Java 快。这也导致 Python 凭借可读性、简单易上手、良好的生态系统横行 AI 领域时,一提到速度,就成为众多开发者头疼的问题。

为了解决这一难题,麻省理工学院的计算机科学家出手了,他们共同研发了一种名为 Codon 的 Python 编译器,可以将 Python 代码转化为本地机器代码,而不会对运行时的性能产生影响。

当前,Codon 已经在 GitHub 上开源:https://github.com/exaloop/codon,斩获 6300 个 Star。

Codon 与 C/C++ 性能相当

"在单线程上,比 Python 的典型速度提高了 10-100 倍或更多,"Codon repo写道,"Codon 的性能通常与 C/C++ 的性能相当(有时甚至更好)。"

与 Python 不同的是,Codon 支持本地多线程,这可以使速度提高许多倍。

Codon 最初是作为一个在 Python 中创建高性能特定领域语言(DSL,domain-specific language)的框架而开发的。DSL 是专注于特定目的的语言,而不是像 Python 或 C 这样的通用编程语言。

据官方 GitHub repo 透露,Codon 源于 Seq 项目,后者是一个用于生物信息学和遗传学的 DSL,现如今它已经成长为一个与 Python 3 基本兼容的语言编译器。

近期,外媒 The Register 通过该工具的研究团队内部最新分享了一个关于 Codon 的论文。本论文的作者包含了,MIT、维多利亚大学等多名研究人员,如 Ariya Shajii(Exaloop)、Gabriel Ramirez(MIT CSAIL)、Haris Smajlović(加拿大维多利亚大学)、Jessica Ray(MIT CSAIL)、Bonnie Berger(MIT CSAIL)、Saman Amarasinghe(MIT CSAIL)和 Ibrahim Numanagić(维多利亚大学)。

这篇论文指出,"与其他面向性能的 Python 实现(如 PyPy 或 Numba)不同,Codon 是作为一个独立的系统从头开始构建的,它可以提前编译为静态可执行文件,并且不与现有的 Python 运行时(如 CPython 或 RPython)绑定执行。因此,Codon 可以实现更好的性能,并克服运行时的特定问题,如全局解释器锁"。

在论文中,作者也讨论了各种基于 Codon 的高性能 DSL,这些 DSL 设计用于生物信息学、数据压缩和并行编程,也利用了 Codon 的编译器基础设施。但是 Codon 可以大幅加速标准的 Python 程序,尽管那些依赖外部库(如 Django 或 DocUtils)的程序必须依赖 CPython 桥接,这就限制了 CPython 的性能。

"Codon 不需要使用像 numpy 这样的 C 语言实现的库来重写程序,也不需要完全用 C 语言重写,而是可以使用相同的 Python 实现,并给出你用 C 语言重写的相同性能",麻省理工学院教授和 CSAIL 首席研究员 Saman Amarasinghe说 道,"因此,我相信 Codon 是成功的 Python 应用程序的最简单的前进道路,这些应用程序由于缺乏性能而达到了一个极限。"

测试

那么 Codon 是否真的如说的那样快?在 Codon 论坛上,一位开发者进行了测试:

$ cat fib.py 
def fib(n):    if n == 0:        return 0    elif n == 1:        return 1    else:        return fib(n-1) + fib(n-2)
if __name__ == "__main__":    import sys    print(fib(int(sys.argv[1])))

CPython 3.11

$ python fib.py 40102334155# mem: 8'816_KB# time: 18.42_s

PyPy 7.3.9

$ pypy fib.py 40102334155# mem: 74'596_kB# time: 4.99_s# ~= 3.7x
Codon compiled
$ codon build -release fib.py$ ./fib 40102334155# mem: 5'612_kB# time: 0.26_s# ~= 70.8x

Codon with python interpreter

# in fibpy.py, we just add `@python` decorator to fib function$ codon build -release fibpy.pyexport CODON_PYTHON=/path/to/libpython3.11.so$ ./fibpy 40102334155# mem: 12'828# time: 18.49# ~= 1x

最终发现,一个简单的 Codon 编译的斐波那契脚本比 CPython 版本快 70 多倍。

除此之外,该研究团队也在 GitHub 上贴出了 Codon 基准测试套件的结果,比较了 Python、PyPy、C++ 和 Codon 在一系列任务和应用上的表现。该基准测试是在以下设置上运行的:

最终结果如下所示:

据 Codon 官方文档显示,虽然 Codon 的语法和语义与 Python 的几乎相同,但还是有一些值得一提的区别,如数据类型方面:

  • 整数。Codon 的 int 是一个 64 位有符号的整数,而 Python 的(在版本 3 之后)可以是任意大的。然而 Codon 通过 Int[N] 支持更大的整数,其中 N 是位宽。
  • 字符串。Codon 目前使用 ASCII 字符串,与 Python 的 unicode 字符串不同。
  • 字典。Codon 的字典类型不保留插入顺序,与 Python 3.6 的不同。

此外,Codon 和 Python 在类型检查、数值运算、模块等维度还有些许的不同,更详细的内容可参考:https://docs.exaloop.io/codon/general/differences据悉,Codon 已经被商业化地应用在金融和生物信息学、深度学习等领域。

参考来源:

https://www.theregister.com/2023/03/11/python_codon_compiler/

GitHub 地址:https://github.com/exaloop/codon

本文参与 腾讯云自媒体分享计划 ,分享自微信公众号。
原始发表:2023-03-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除
c++
编译
测试
论文
性能

本文分享自 AI科技大本营 微信公众号, 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!

c++
编译
测试
论文
性能
评论
登录 后参与评论
0 条评论
热度
最新
登录 后参与评论
关于作者
AI科技大本营
0
文章
0
累计阅读量
0
获赞
前往专栏
领券
  • 社区

    • 专栏文章
    • 阅读清单
    • 互动问答
    • 技术沙龙
    • 技术视频
    • 团队主页
    • 腾讯云TI平台
  • 活动

    • 自媒体分享计划
    • 邀请作者入驻
    • 自荐上首页
    • 技术竞赛
  • 资源

    • 技术周刊
    • 社区标签
    • 开发者手册
    • 开发者实验室
  • 关于

    • 社区规范
    • 免责声明
    • 联系我们
    • 友情链接

腾讯云开发者

扫码关注腾讯云开发者

扫码关注腾讯云开发者

领取腾讯云代金券

热门产品

  • 域名注册
  • 云服务器
  • 区块链服务
  • 消息队列
  • 网络加速
  • 云数据库
  • 域名解析
  • 云存储
  • 视频直播

热门推荐

  • 人脸识别
  • 腾讯会议
  • 企业云
  • CDN加速
  • 视频通话
  • 图像分析
  • MySQL 数据库
  • SSL 证书
  • 语音识别

更多推荐

  • 数据安全
  • 负载均衡
  • 短信
  • 文字识别
  • 云点播
  • 商标注册
  • 小程序开发
  • 网站监控
  • 数据迁移

Copyright © 2013 - 2023 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有

深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 深公网安备号 44030502008569

腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287

问题归档 专栏文章 快讯文章归档 关键词归档 开发者手册归档 开发者手册 Section 归档

Copyright © 2013 - 2023 Tencent Cloud.

All Rights Reserved. 腾讯云 版权所有

登录 后参与评论
 
推荐文章
俊秀的冲锋衣  ·  Python链表实现
1 月前
正直的键盘  ·  Python 有指针吗?_python中有没有指针
1 月前
耍酷的枕头  ·  Python txt 特定位置写入内容
1 月前
爱喝酒的充值卡  ·  几种编程语言中的索引开头是0还是1?_在计算机编程中,行或元素的索引通常是从几开始的
1 月前
痴情的铁板烧  ·  前端開發環境 + React + TS - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天
1 月前
失恋的马铃薯  ·  excel巧用REPT函数在数字前补0-阿里云开发者社区
1 年前
单身的菠萝  ·  conda和pip区别,安装package包,虚拟环境 | AI技术聚合
2 年前
逆袭的签字笔  ·  prettier - How do I turn off this Eslint error "Expected new line break before and after html tags"? - Stack Overflow
2 年前
任性的弓箭  ·  c++ - How can I get rid of deprecated warnings in deprecated functions in GCC? - Stack Overflow
2 年前
开朗的路灯  ·  vue + 科大讯飞语音听写功能(解决vue new Worker报错问题)_javascript_EUV-DevPress官方社区
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号