python的动态性

def f(x,y):return x+yprint(f(1,2))
print(f("a","b"))

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

AOT 提前编译 ahead-of-time compilation

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

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

· 安装包

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.ints: cython.doubledx: cython.doubles = 0dx = (b - a) / Nfor 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 icdef double scdef double dxs = 0dx = (b - a) / Nfor i in range(N):s += f(a + i * dx)return s * dx
# 更多参见链接
from setuptools import setup
from Cython.Build import cythonizesetup(ext_modules = cythonize("example.pyx")
)

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
  • 简单使用
from numba import jit
# 只需要添加一个装饰器
## 普通的方式
@jit(nopython=True)
def f(x): ...
## 强制类型的方式
@jit(["int32(int32)", "float32(float32)"], nopython=True)
def f(x): ...

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

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/)

python 高性能编程 AOT VS JIT相关推荐

  1. python后台开发性能问题_《Python高性能编程》——2.14 确保性能分析成功的策略-阿里云开发者社区...

    本节书摘来自异步社区<Python高性能编程>一书中的第2章,第2.14节,作者[美] 戈雷利克 (Micha Gorelick),胡世杰,徐旭彬 译,更多章节内容可以访问云栖社区&quo ...

  2. python花猫_Python猫荐书系列之五:Python高性能编程

    稍微关心编程语言的使用趋势的人都知道,最近几年,国内最火的两种语言非 Python 与 Go 莫属,于是,隔三差五就会有人问:这两种语言谁更厉害/好找工作/高工资-- 对于编程语言的争论,就是猿界的生 ...

  3. Python猫荐书系列之五:Python高性能编程

    2019独角兽企业重金招聘Python工程师标准>>> 稍微关心编程语言的使用趋势的人都知道,最近几年,国内最火的两种语言非 Python 与 Go 莫属,于是,隔三差五就会有人问: ...

  4. Python高性能编程指南大纲

    Time: 20190925 关于本系列学习大纲 Python是一门开箱即用的语言了,但是往往会停在基础使用水平不能再往前一步,实际上它有非常多值得深挖,深入理解的点,本系列主要学习自<High ...

  5. python高性能编程第一章读书笔记

    计算机底层组件分为三大基本部分:计算单元.存储单元以及两者之间的连接. 计算单元:具有将接收到的任意输入转换成输出的能力以及改变当前处理状态的能力.CPU是最常见的计算单元.它的主要属性是其每个周期能 ...

  6. python微控制器编程pdf_Python高性能编程 中文高清pdf完整版[17MB]

    Python语言是一种脚本语言,其应用领域非常广泛,包括数据分析.自然语言处理.机器学习.科学计算.推荐系统构建等.Python高性能编程共有12章,围绕如何进行代码优化和加快实际应用的运行速度进行详 ...

  7. 面试分析《疯狂Python讲义》PDF代码+《Python核心编程第3版》PDF代码问题

    python语言现在很流行了,除了用在学校,也用在很多行业.python学起来较为简单,语法容易理解,也可用于数据分析. 国内的教材推荐看<疯狂python讲义>,对比国外也有很多好的参考 ...

  8. 【洁洁送书第一期】Python高并发与高性能编程: 原理与实践

    这里写目录标题 Python高并发.高性能 解决问题 书本介绍 关于作者 直播预告 Python高并发.高性能 Python成为时下技术革新的弄潮儿,全民Python的发展趋势让人们不再满足于简单地运 ...

  9. Python 高级编程(第2版)

    内容简介 Python 作为一种高级程序设计语言,凭借其简洁.易读及可扩展性日渐成为程序设计领域备受推崇的语言之一. 本书基于 Python 3.5 版本进行讲解,深度揭示了 Python 编程的高级 ...

  10. python语言编程入门先学什么-自学编程入门,先学什么语言好?

    强烈推荐Python.其实这个问题在入门阶段一直是争议十分大的问题,n多语言,n多推荐,到最后搞到新手一会听说这种语言适合新手,于是学习这种语言,一会又有人说xx语言是垃圾.弱爆了,学了也没用,之类的 ...

最新文章

  1. Mybatis执行过程源码分析
  2. 计算机专业复试线380,445名400+的科软复试线388分,计算机学硕380分,卷炸了
  3. 并联系统的失效率公式推导_电容的串并联计算方法
  4. html5跨域 postmessage,html5跨域通讯之postMessage的用法总结
  5. tomcat 绑定ipv4端口
  6. 大剑无锋之mysql中的行转列如何写?【面试推荐】
  7. pap chap认证配置
  8. python的实验报告怎么写_学号:20191221,《python实验设计》实验报告三
  9. 《Python Cookbook 3rd》笔记(5.5):文件不存在才能写入
  10. 2019马哥python的百度网盘_马哥 2018 Python 全栈视频
  11. 苹果推送证书不受信任解决办法2022年
  12. android字体右对齐,Android TextView将文本右对齐和左对齐
  13. c语言写莫迪康通信,常用PLC通信协议有哪些?
  14. 如何用c语言对隐函数求导,隐函数求导的方法
  15. 基于单片机万用表量程手动自动电阻电流电压设计-全套资料
  16. random.seed(0)
  17. C++11中,获取随机数的新方法default_random_engine
  18. 极大似然估计,最大后验概率估计(MAP),贝叶斯估计
  19. python游戏彩蛋_用python写游戏之2D跑酷游戏(一)
  20. IBM欧洲裁员一万人、Salesforce 考虑收购 Slack​、杰夫·贝佐斯如何做决定等|Decode the Week...

热门文章

  1. (已解决)报错:collect2 error ld returned 1 exit status
  2. 查看MySQL初始密码并修改
  3. excel表格操作之数据分级统计
  4. 我为什么从阿里巴巴集团离职?
  5. 听过闰年闰月,可你听过闰秒吗?
  6. IDEA破解教程(破解到2100年)的注意事项
  7. 高中生如何结合生物思维导图做好知识点整理?
  8. python慢画炫彩圆圈_pygame绘画与动画
  9. wifi无线破解记录
  10. java编写时间流逝_如何测量Java中的时间流逝?