赞
踩
def f(x,y):
return x+y
print(f(1,2))
print(f("a","b"))
python具有动态性但实际较少用到,这给编译器的编译带来困难,编译时会进行选择跳转,导致动态语言很慢.
· 安装包
pip install Cpython
· 引入包
import cython
# 如官方的教程,编写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
# 更多参见链接
from setuptools import setup
from Cython.Build import cythonize
setup(
ext_modules = cythonize("example.pyx")
)
pip install numba
from numba import jit
# 只需要添加一个装饰器
## 普通的方式
@jit(nopython=True)
def f(x): ...
## 强制类型的方式
@jit(["int32(int32)", "float32(float32)"], nopython=True)
def f(x): ...
from jax import jit
@jit
def f(x): ...
或者
高阶函数的方法
jitf = jit(f)
在使用是可以对程序中的重要部分抽取出来机型jit的单独优化,更多详细的使用见官方文档链接。
具体实现可以参考 Python高性能((加)加布丽埃勒·拉纳诺著;袁国忠译):
# AOT
[https://micropython.org/](https://micropython.org/)
[添加链接描述](http://www.360doc.com/content/21/0618/14/66515661_982600652.shtml)
[漫游深度学习编译器](https://zhuanlan.zhihu.com/p/410507557)
# 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/)
# 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/)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。