Python3.12的加速与JIT解读

2024-01-2710:54:48编程语言入门到精通Comments355 views字数 1754阅读模式

对于大多数Python开发者来说,看懂Python香农计划有点难度,Python开发和开发Python是两码事,So大家先了解下基本的各种Python名词,以便可以阅读下去,不需要特别懂!文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/58832.html

开发CPython相关知识点

  1. HotPy / HotPy2 / VM ,Python 的高性能虚拟机,一个很古董的话题
  2. GC ,Python的内存管理与回收
  3. Cffi,Python调用C函数的接口
  4. JIT,将解释性语言(比如Python,Java)生成机器码
  5. PyPy,Python的JIT实现,超级快
  6. Numba,使用 LLVM 实现的 JIT,专门用于数字类型 (numpy)
  7. LLVM,使用C++11编写,比GCC更加现代化,模块化的编译器,各种动态语言(Java,.Net等)JIT实现必备的编译器

汇编代码(速度)=机器码(速度),JIT=机器码文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/58832.html

普通Python代码的转换

Python -> C++ -> 汇编码 -> 机器码文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/58832.html

Python(Numba,Taichi,PyPy) JIT的转换(运行一次后,部分py略过汇编代码)

Python+机器码(第二次运行) ->机器码 + C++(汇编码) ->机器码文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/58832.html

Python使用Nuitka的转换

Python+C++ -> 汇编码 ->机器码文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/58832.html


Python3.12解读

Python3.12的加速与JIT解读
  1. 和nuitka一样,只编译部分代码为C语言或者机器码,比如numpy,win32api模块本就是pyd的调用(不透明的C代码块),或者函数写的不符合C语言的类型,缺少类型或者Nonetype,这等代码不会去编译成机器码,编译失败的概率比较高
  2. 加速解释器中运行的代码,可以理解成部分代码编译机器码和优化后的C语言,比如for循环,类型确认,计数器等亟需优化的空间,便于C语言和机器码的运行,faster-cpython已经说明3.12会生成新的本地代码,某种意义上Python3.12开启了JIT,如下图加速CPython的实施方案
  3. 内存管理的开销,这是上面提及的GC,Python维护者一直努力在改进内存回收机制,内存占用越大运行越慢,这是必然的,特别是for循环
  4. 希望3.12的JIT不光解决数字型的,还解决其他已知类型的数值;不过文中暗示3.12只是一个小范围的JIT,大家还是不要报太多希望,Nuitka在这方面也遇到到极大的阻碍,在以往的版本更新中,nuitka维护者在C++代码转化中,也只转化了一部分数字计算和index类为C++,编程界的难题都是一样的
Python3.12的加速与JIT解读
python3.12的JIT生成机器码

Python3.12解读

Python3.12的加速与JIT解读
Python3.12实现的前提
  1. Python3.12优先转换没有return或者引用的功能性函数为C语言
  2. 针对99%的通用代码准备通用的C语言转换和优化模块(我不敢确定理解是否正确,在cffi上有优化空间是可以确定的)
  3. 同上
  4. JIT之后,变量命名简化以及计数器上,回收方法上GC有极大的优化空间(下面会有讨论)

Python3.12解读

Python3.12的加速与JIT解读
Python3.12的加速与JIT解读
  1. Python 虚拟机中使用并发的内存管理机制,一个区别与Jython和IronPython的JIT解释器(翻译可能有误,欢迎大家指正)
  2. 优化已经能确定的方向和区域以及GC优化空间,比如已声明的类型,可判断的类型,计数,数值,可确定结果的函数和模块(Nuitka以前就是这么做的),这里开发者有大量的工作任务
  3. 开发者有一个判断优化的标准或者测试模块和数据请参考我没有直接按字面意思去翻译,各位看官结合文档来看,轻喷

补充优化的评测标准,再次补充优化的内容文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/58832.html

Python3.12的加速与JIT解读

JIT和C语言的一些代码转化的标准化,JIT必备;这些坑在我们QQ群以前遇到好多类似的提问文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/58832.html

Python3.12的加速与JIT解读

Python3.12解读

Python3.12的加速与JIT解读
  1. 在3.12的版本中JIT和内存管理占了很大的板块,JIT带来了可操作的空间(转化机器码后减少一部分解释代码),加上本身cpython也有很大的操作空间,可参考大佬的文章,GC这一块的优化摘抄如下图
  2. 前面我们提到的值和数值,特别是最新爆火的ordered-set,极大提速了大家对Python加速类型的可能性
  3. #125有效的减少了内存的占用 (突然觉得nuitka的混淆变量名设置的新名字好大方,取名都是那么长的)JIT之后的新命名是Class A,Class B,Class D,Class E.......也可见faster-cpython的开发者用心良苦和认真
Python3.12的加速与JIT解读
Python3.12的加速与JIT解读
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/58832.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/ymba/58832.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定