当前位置:   article > 正文

python 高性能编程 AOT VS JIT_python aot

python aot

python的动态性

def f(x,y):
    return x+y

print(f(1,2))
print(f("a","b"))
  • 1
  • 2
  • 3
  • 4
  • 5

python具有动态性但实际较少用到,这给编译器的编译带来困难,编译时会进行选择跳转,导致动态语言很慢.

AOT 提前编译 ahead-of-time compilation

  • 在运行程序代码之前在单独的步骤中编译函数,生成可以独立分发的磁盘二进制对象。这是 C、C++ 或 Fortran 等语言中已知的传统编译类型。
  • 运行时没有编译开销。
  • AOT 编译为您的 CPU 架构系列(例如“x86-64”)生成通用代码,而 JIT 编译为您的特定 CPU 型号生成优化的代码

Cpython(将Cpython的代码编译为.so)

· 安装包

pip install Cpython
  • 1

· 引入包

import cython

  • 1
  • 2
# 如官方的教程,编写Cpython的代码有两种方式,与传统python不同的是代码都有明显的类别标志
# 一是编写py文件 integrate_cy.py
def f(x: cython.double):
    return x ** 2 - x
def integrate_f(a: cython.double, b: cython.double, N: cython.int):
    i: cython.int
    s: cython.double
    dx: cython.double
    s = 0
    dx = (b - a) / N
    for i in range(N):
        s += f(a + i * dx)
    return s * dx
# 另一种是编写pyx文件 integrate_cy.pyx
def f(double x):
    return x ** 2 - x
def integrate_f(double a, double b, int N):
    cdef int i
    cdef double s
    cdef double dx
    s = 0
    dx = (b - a) / N
    for i in range(N):
        s += f(a + i * dx)
    return s * dx
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
# 更多参见链接
from setuptools import setup
from Cython.Build import cythonize

setup(
    ext_modules = cythonize("example.pyx")
)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

JIT 即时编译 Just In Time Compilation

  • 在程序运行时不断检测统计,进行编译
Layer 1 func f(x,y){ // f(1,y) cost 500us y+=x; if x%2 == 1{ while x>0{ return y; } x-=1; } } Partial Evaluation define new f f_old=f func f1(y){ return y+1; } // f1(y) cost 100us func f(x,y){ } x==1? return f1(y); return f_old(x,y); //cost 50us

PyPy

numba

  • 安装
pip install numba
  • 1
  • 简单使用
from numba import jit
# 只需要添加一个装饰器
## 普通的方式
@jit(nopython=True)
def f(x): ...
## 强制类型的方式
@jit(["int32(int32)", "float32(float32)"], nopython=True)
def f(x): ...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

jax(google出品的主要应用与及其学习)

from jax import jit

  • 1
  • 2
@jit
def f(x): ...
或者
高阶函数的方法
jitf = jit(f)
  • 1
  • 2
  • 3
  • 4
  • 5

在使用是可以对程序中的重要部分抽取出来机型jit的单独优化,更多详细的使用见官方文档链接。

参考

具体实现可以参考 Python高性能((加)加布丽埃勒·拉纳诺著;袁国忠译):
pypy https://zhuanlan.zhihu.com/p/293154940

# AOT
[https://micropython.org/](https://micropython.org/)
[添加链接描述](http://www.360doc.com/content/21/0618/14/66515661_982600652.shtml)
[漫游深度学习编译器](https://zhuanlan.zhihu.com/p/410507557)
  • 1
  • 2
  • 3
  • 4
# JIT
[numba](https://numba.pydata.org/)
[numba doc](https://numba.pydata.org/numba-doc/dev/user/pycc.html)
[numba从入门到精通(1)—为什么numba能够加速](https://zhuanlan.zhihu.com/p/68720474)
[Pyjion is a drop-in JIT Compiler for Python 3.10. It can be pip installed into a CPython 3.10 installation on Linux, Mac OS X, or Windows.](https://www.trypyjion.com/)
【【编译原理】Python性能提升20倍的背后原理 - JIT做了什么事情-哔哩哔哩】 https://b23.tv/FOY3vaa
[Representation-based just-in-time specialization and the psyco prototype for python](https://www.semanticscholar.org/paper/Representation-based-just-in-time-specialization-Rigo/8ebddcd309160b5dfe302bd32139a8baca4ac8a2)
[添加链接描述](https://www.doc88.com/p-9925242953098.html)
[CS 6120 课程博客-动态语言的基于跟踪的即时类型专业化](https://www.cs.cornell.edu/courses/cs6120/2019fa/blog/tbjit-type-specialization/)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
# pytorch 的jit
[PyTorch 的 1.0 版本发布的最核心的两个新特性就是 JIT 和 C++ API,这两个特性一起发布不是没有道理的,JIT 是 Python 和 C++ 的桥梁,我们可以使用 Python 训练模型,然后通过 JIT 将模型转为语言无关的模块,从而让 C++ 可以非常方便得调用,从此「使用 Python 训练模型,使用 C++ 将模型部署到生产环境」对 PyTorch 来说成为了一件很容易的事。而因为使用了 C++,我们现在几乎可以把 PyTorch 模型部署到任意平台和设备上:树莓派、iOS、Android 等等](https://zhuanlan.zhihu.com/p/370455320)
[我简单写了一个简单的 MNIST demo,从使用 Python 训练到用 JIT 将 Python 模型转换为 TorchScript Module,然后用 C++ 加载 TorchScript Module 做推断的完整的过程](https://github.com/louis-she/torchscript-mnist)
[pytorch JIT浅解析](https://blog.csdn.net/xxradon/article/details/86504906)

# 其它
## 反汇编模块dis
[python中dis的用法](https://www.jianshu.com/p/9553fa2c5c8b)

## Jython
[Jython:在java中写python](https://www.jython.org/)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/75023
推荐阅读
相关标签
  

闽ICP备14008679号