狂揽两千星,速度百倍提升,高性能Python编译器Codon开源

news2024/11/15 11:07:37

这个高性能 Python 编译器具有支持 Python 众多语法、完美互通其他框架等优点。

众所周知,Python 是一门简单易学、具有强大功能的编程语言,在各种用户使用统计榜单中总是名列前茅。相应地,围绕 Python,研究者开发了各种便捷工具,以更好的服务于这门语言。

编译器充当着高级语言与机器之间的翻译官,不同版本的 Python 编译器已被开发出来,下面我们将为大家介绍一款新的高性能 Python 编译器:Codon。该项目上线短短几天,已收获 2.2k 星。

项目地址:https://github.com/exaloop/codon

技术提升

论文探讨、算法交流、求职内推、干货分享、解惑答疑,与2000+来自港大、北大、腾讯、科大讯飞、阿里等开发者互动学习。

项目源码、数据、技术交流提升,均可加交流群获取,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友

方式①、添加微信号:mlc2060,备注:来自CSDN +研究方向
方式②、微信搜索公众号:机器学习社区,后台回复:加群

作为高性能 Python 编译器,Codon 可将 Python 代码编译为本机机器代码,而无需任何运行时开销。在单线程上,Python 的典型加速大约为 10-100 倍或更多。Codon 的性能通常与 C/C++ 的性能相当。与 Python 不同,Codon 支持本机多线程,这可以使速度提高很多倍。Codon 可通过插件基础结构进行扩展,它允许用户合并新的库、编译器优化甚至关键字。

Codon 框架是完全模块化和可扩展的,允许无缝集成新模块、编译器优化、领域特定语言等,并积极为生物信息学和量化金融等多个领域开发新的 Codon 扩展。

Codon Pipeline

这个一经发布就疯狂揽星的编译器效果如何呢?下面我们来看看一些基准测试结果。

基准测试

以下是来自 Codon 基准测试套件的结果,比较了 Python、PyPy、C++ 和 Codon 在一系列任务和应用程序上的表现。

基准测试在以下设置上运行:

Python、PyPy、Codon 的对比

Python、PyPy、C++ 、Codon 的对比

几种语言的具体对比如下:

Codon 尽可能地遵循 CPython 语法、语义和 API,但在一些特殊情况下,考虑性能原因,Codon 与 CPython 会有些不同,例如 Codon 为 64 位 int,CPython 是任意宽度 int。在性能方面,CPython 的加速通常是 10-100 倍的加速。

虽然 Codon 确实提供了一个类似于 Numba 的 JIT 装饰器,但 Codon 通常是一个提前(ahead-of-time)编译器,可以将端到端程序编译为本机代码。它还支持编译更广泛的 Python 构造和库集。

PyPy 的目标是成为 CPython 的简易替代品,而 Codon 在一些地方有所不同,这些不同主要体现在消除动态运行时或虚拟机上,从而获得更好的性能。

Codon 通常生成与等效的 C 或 C++ 程序相同的代码,有时可以生成比 C/C++ 编译器更好的代码。原因有很多,例如更好的容器实现,Codon 不使用目标文件和内联所有库代码,或者不使用 C 执行的特定于 Codon 的编译器优化或 C++。

Codon 的编译过程实际上更接近 C++ 而不是 Julia。Julia 是一种动态类型语言,它执行类型推断作为优化,而 Codon 类型是提前检查整个程序。Codon 还试图通过采用 Python 的语法和语义来规避新语言的学习曲线。

**常见问题解答
**

虽然 Codon 几乎支持 Python 的所有语法,但它并不是一个简单的替代品,大型代码库可能需要修改才能通过 Codon 编译器运行。例如,一些 Python 的模块还没有在 Codon 中实现,一些 Python 的动态特性是不允许的。Codon 编译器会生成详细的错误消息,以帮助识别和解决任何不兼容问题。Codon 支持无缝的 Python 互操作性,以处理需要特定 Python 库或动态性的情况。

我想使用 Codon,但我有一个大型 Python 代码库且不想移植,怎么办?

你可以通过 @codon.jit 装饰器来使用 Codon,这将只编译带注释的函数,并自动处理与 Codon 之间的数据转换。它还允许使用任何特定于 Codon 的模块或扩展,例如多线程。

与其他语言和框架的互通性如何?

互通性是 Codon 的优先事项。我们不希望使用 Codon 使用户无法使用现有的其他优秀框架和库。Codon 支持与 Python 和 C/C++ 的完全互通。

Codon 是否使用垃圾收集?

是的,Codon 使用了 Boehm 垃圾收集器。

Codon 不支持 Python 模块 X 或函数 Y?

虽然 Codon 涵盖了 Python 标准库的一个相当大的子集,但它还没有涵盖每个模块的每个函数。请注意,仍然可以通过 Python 调用缺少的函数 from python import。许多缺少 Codon 本地实现的函数(例如 I/O 或 OS 相关功能)通常不会实现 Codon 的实质性加速。

对于我的应用程序,Codon 并不比 Python 快?

大部分时间用在 C 语言实现的库代码中的应用程序通常不会在 Codon 中看到实质性的性能提升。同样地,受 I/O 或网络限制的应用程序在 Codon 中也会遇到相同的瓶颈。

对于我的应用程序,Codon 比 Python 慢?

如果是这样,请将 Codon 明显比 Python 慢的情况报告给问题跟踪器。

Codon 是免费的吗?

对于非生产用途,Codon 始终是免费的。用户可以免费将 Codon 用于个人、学术或其他非商业应用。

Codon 是开源的吗?

Codon 是根据商业源代码许可证 (BSL) 获得许可的,它的源代码是公开可用的,并且可以免费用于非生产用途。BSL 在技术上不是「开源」许可证,尽管在许多情况下你仍然可以像对待任何其他开源项目一样对待 Codon。重要的是,根据 BSL,每个版本的 Codon 都会在 3 年后转换到实际的开源许可证(特别是 Apache)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/132176.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

G1垃圾回收

目录一、G1垃圾回收器G1垃圾回收阶段(3个)① Young Collection② Young Collection CM③ Mixed CollectionYoung Collection 跨代引用RemarkG1—垃圾回收器优化字符串去重类卸载巨型对象动态调整阈值一、G1垃圾回收器 定义: Garbage First&…

lanmp环境搭建,你需要一次独立安装来深入了解各个软件

一,安装Apache yum install httpd -y,安装apache,版本为2.4.6,最新为2.4.9。 cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bak; vim /etc/httpd/conf/httpd.conf (默认唯一) 端口改为8000,不能与Ngin…

File类的使用

java,File类File类静态成员变量构造方法常用方法用于创建、删除文件/文件夹的方法用于遍历文件/文件目录的方法文件过滤器方法File类 Java文件类以抽象的方式代表文件名和目录路径名。该类主要用于文件和目录的创建、文件的查找和文件的删除等。 File对象代表磁盘…

数据分析的大体思路

目录标题数据分析企业数据的分析的三个方向:离线分析(Batch Processing)实时分析(Real Time Processing |Streaming):机器学习(Machine Learning)数据分析的流程明确分析的目的和思路…

JVM调优基本概念

1、jvm组成以工作流程 jvm组成 类装载器、运行时数据区(内存模型)、字节码执行引擎 工作大致流程 首先我们的java类编译成class类文件,当我们的class文件开始执行,我们的虚拟机便开始工作。 类加载器将class加载到运行时数据区…

SSM之Spring(一)

目录 一:Spring简介 1.1 Spring概述 1.2 SpringFrameWork 1.2.1 SpringFrameWork特性 1.2.2 Spring Framework五大功能模块 二:IOC 2.1 IOC容器 2.1.1 IOC思想 2.1.2 IOC容器在Spring中的实现 2.2 基于XML管理bean 2.2.1 入门案例 2.2.2 获取bean…

Golang switch 的使用的注意事项和细节

内容来自:尚硅谷-韩老师教学笔记,链接:尚硅谷 1)case/switch 后是一个表达式( 即:常量值、变量、一个有返回值的函数等都可以) 2)case 后的各个表达式的值的数据类型,必须和 switch 的表达式数据类型一致 3…

辞暮尔尔烟火年年,朝朝暮暮岁岁平安。(2022年度总结)

目录 前言: 一、第一件事情,重新认识自己,从内核出发 二、第二件事情,告别内卷,拥抱微雕 三、第三件事情,愿2023,你我更更好 前言: 今天是2022年12月31日,2022年的最…

Shell——变量与脚本运行的方式

文章目录变量定义变量的几种方式1)无引号2)单引号3)双引号4)反引号export定义变量变量的提取、修改与删除1)变量的提取2)变量的修改3)变量的删除特殊变量1)位置参数2)${#…

Jetpack组件(fragment)(1)

一.什么是Fragment? 碎片是活动的一部分,使得活动更加的模块化设计。我们可以认为碎片是一种子活动。 碎片拥有自己的布局,自己的行为及自己的生命周期回调。当活动在运行的时候,你可以在活动中添加或者移除碎片。你可以合并多个碎片在一个…

Android修炼之混淆

自嘲时刻 作为Java和Android开发者,大家应该都对混淆很熟悉了。网上也有各路大神提供的混淆模板,基本上直接拿来用就好。但我还是想捋一捋,因为工作中被混淆这家伙“玩弄”了好几次,必须把它记在小本本上。 介绍 基本概念 混淆…

Cesium中使用Sampler3D,3D纹理,实现体渲染

Cesium中使用Sampler3D,3D纹理,实现体渲染 Cesium目前(20221231)还不支持直接使用3D纹理,但是其实内部已经可以WebGL2,而且内置常量也有3DTexture。所以,可以通过仿Texture,来实现3…

如何彻底的理解需求,做出更好的软件

背景: 最近接到了一个需求,大概的需求就是我们有一些数据,默认分为了两类。如果变多的话,用户找起来非常的困难,针对这个现象我们提出了两点解决方案。1:添加搜索。2:添加分组。 第一波设计&…

Android的adb命令实战篇-1

2023年 —— 是充满希望的一年. 对于Android开发者而言,ADB命令或多或少都使用过,今天我们就一起来整体回顾一下吧。 ADB的全称:Android Debug Bridge 1. ADB(Android Debug Bridge) 在实际工作中,周围同事会抱怨记不住常用的a…

过寒假

小时候,每到一放假就被父亲送回奶奶家。除了寒假作业,我还会带一堆书回去看。我小时候特别喜欢到邮电局大厅去订阅报刊杂志,就连学校也会报名订阅报刊。我小学时看完梁羽生的《七剑下天山》就是翻日报上每天的小说连载看完的。那时候过年时家…

Unity AR小游戏(玩具小车)踩坑记

最近对AR产生了兴趣。先科普一下什么是AR吧。AR是Augmented Reality(增强现实)的简称,是基于摄像头对现实世界的实时图像采集、分析和理解,然后在此基础上融入虚拟物体(信息),以达到增强体验的目…

Three.js学习(一)初识three.js

文章目录1.基本配置2.基本概念3.Api4.实现一个旋转动画1.基本配置 (1)安装 ​ npm install three (2)引入 import * as THREE from three2.基本概念 Three.js是基于原生WebGL封装运行的三维引擎。 (1)一…

【Linux】实验四 进程信号通信

文章目录一、实验目的二、 实验内容三、 实验原理1、信号3.1.1 信号的基本概念3.1.2、信号的发送2、所涉及的系统函数调用3.2.1 fork()3.2.2 kill( )This is my question.3.2.3 signal( )代码例子3.2.4 getpid()3.2.5 wait()四、 实验内容五、程序代码运行结果六、实验总结及心…

来玩,前端性能优化(+面试必问:宏任务和微任务)

前端性能优化相关的“技能点”笔者之前也写过几篇,但是大多都是小打小闹。我重新整理了曾经使用过的性能优化手段。本文介绍三种方案:页面资源预加载、服务请求优化和非首屏视图延迟加载。 页面资源预加载 页面是不可能真正预加载的,但是有…

Linux | PCIe Hotplug | 概念及工作原理的不完全总结

本文对 PCIe 热插拔的概念及工作原理进行不完全总结。 更新: 2022 / 12 / 31 Linux | PCIe Hotplug | 概念及工作原理的不完全总结热插拔组成部件实现代码通知式热插拔线程中断功耗管理意外移除错误处理整合移除BAR参考链接参考这里 1’ 2’ 3‘ 4’ 5 1992年初始…