社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

麻省理工Python增强编译器Codon 让Python像C\C++一样高效

IEEE电气电子工程师 • 2 年前 • 553 次点击  

点击蓝字 关注我们

SUBSCRIBE to US


GETTY IMAGES/IEEE SPECTRUM


Python作为最流行(没有之一)的高级编程语言之一,使用广泛。然而,尽管高级语言的简化语法使其易于学习和使用,但与C或C++等低级语言相比,它可能会慢一些。


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


麻省理工学院CSAIL研究生Ariya Shajii说:“普通Python编译成所谓的字节码,然后字节码在虚拟机中执行,这要慢得多。使用Codon,我们正在进行本机编译,因此您可以直接在CPU上运行最终结果,而不需要中间的虚拟机或解释器。”


EXALOOP


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


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


Shajii说:“在常规Python中,它将所有类型都留给运行时使用。使用Codon,我们在编译过程中进行类型检查,这样在运行时就不需要耗费判断数据类型的开销。”


麻省理工学院教授、CSAIL首席研究员Saman Amarasinghe也是Codon论文的合著者,他补充道,“如果你有一种动态语言(比如Python),每次你有一些数据时,你都需要保留大量额外的元数据,以在运行时确定类型。”Codon去掉了这些元数据,所以“代码更快,数据更小,”他说。


Shajii表示,在运行时没有任何不必要的数据或类型检查的情况下,Codon的开销为零。谈到性能,“Codon通常与C++不相上下。与Python相比,我们通常看到的是10到100倍的改进,”他说。


但Codon的方法也有取舍。Shajii说:“我们做这种静态类型检查,不允许Python的一些动态特性,例如在运行时动态更改类型,同时有些Python库暂时还不支持Codon,也就是兼容性还有待提高。”


Amarasinghe补充道:“Python已经经过了许多人的实战项目测试,但Codon才刚开始,还没有达到和Python一样的完美。它需要运行更多的程序,获得更多的反馈,并加强和修复更多。达到Python的强化水平需要一些时间。”


Codon最初被设计用于基因组学和生物信息学。Shajii说:“这些领域的数据集越来越大,像Python和R这样的高级语言处理每组测序数据太慢了。这就是我们想要填补的空白,通过培训一种无需编写C或C++代码即可处理大数据的方法,为不一定是计算机科学家或程序员的领域专家提供帮助。”


MIT/EXALOOP/UNIVERSITY OF VICTORIA/ACM


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


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


此外,组织可以使用Codon进行原型设计和应用程序开发。Shajii说:“我们看到的一种模式是,人们用Python进行原型设计和测试,因为它很容易使用,但当紧要关头,他们必须重写(他们的应用程序),或者让其他人用C或C++重写它,以便在更大的数据集上进行测试。有了Codon,你可以继续使用Python,两全其美。”


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


微信号|IEEE电气电子工程师

新浪微博|IEEE中国

 · IEEE电气电子工程师学会 · 


人工智能团队合作或可大幅削减芯片开发成本

液体盐使按钮镜片聚焦

机器人系统被用于研究蜂群中的集体行为

Neuralink的人体试验申请已因安全问题被美国FDA拒绝

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/153428