写点什么

Python JIT 编译器 PyPy 4 引入 SMD 向量化并提升了性能

  • 2015-11-10
  • 本文字数:848 字

    阅读完需:约 3 分钟

PyPy 是 Python 的一个即时编译器,PyPy 4.0 是其最新发布的一个大版本,带来很多新的特性,诸如支持 SIMD 矢量、预热时间的改进、以及对 Numpy 的改进。PyPy声称要比Cpython 快6 倍以上。

PyPy 4 的 SIMD 矢量会在追踪代码时启用,而且会自动探测到可用的 SIMD 硬件从而提高常见的向量和矩阵操作。根据版本的公告,实时矢量相比前置(ahead-of-time)矢量更具有领先优势,因为其更加的容易探测到可能的矢量。

在性能方面,PyPy 的内部进行重构从而能够更有效的使用 guards 。它能够减少 20% 的内存消耗,而且改进了 unrolling,这样可以较少 20% 的预热时间。

PyPy 中的 Numpy 和 Python 的 NumPy 扩展是一个道理。Python 的 NumPy 曾经谈及,NumPy 是能够将使用PyPy 的开发者们纠回到Python 本身的一个理由。在PyPy 4.0,Numpy 带来了新的扩展支持,如ndarray 和数字的dtypes,这也就意味着Numpy 的功能接近完善。对于record、string、以及unicode dtypes 的支持都有所改进。

PyPy 4.0 目的是兼容 CPython2.7。对于缺少对 Python3 的支持被认为是人们采用PyPy 的一个限制因素。事实上,PyPy3 是兼容Python3.2.5 的,而且PyPy 团队正在尝试启动对Python3.4 的支持。

在迁移到PyPy 之前还应该考虑另外两个因素,一个是PyPy 还缺乏像C Python 那样的扩展如Pandas,SciPy 等的等量支持,这样的话,若是用户使用了这些扩展的话,PyPy 就不如C Python 效率更高;另外一个就是,PyPy 为其即时编译器带来的好处是对长时间运行的脚本支持,若是简单而短小的脚本的话,预热时间就显得长了点。

更多关于PyPy 4.0 的细节请参考其官方声明。PyPy 4 可以在这里下载

查看英文原文: Python JIT Compiler PyPy 4 Brings SMD Vectorization,Performance Improvements,and More


感谢张龙对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015-11-10 18:003230
用户头像

发布了 30 篇内容, 共 12.8 次阅读, 收获喜欢 0 次。

关注

评论

发布
暂无评论
发现更多内容

Prometheus Exporter (十四)MySQL Server Exporter

耳东@Erdong

MySQL Prometheus 28天写作 12月日更

博客?Newsletter?付费订阅?Papyrus 都帮你搞定!

遇见

程序员 博客 Blog newsletter

react源码解析11.生命周期调用顺序

buchila11

React React Hooks

react源码解析12.状态更新流程

buchila11

React React Hooks

数据也需要滴血认亲?

Justin

大数据 数据治理 28天写作

Java本地事务失效了,线上应该如何排查?

JavaEdge

Spring Framework 签约计划第二季

大厂算法面试之leetcode精讲17.栈

全栈潇晨

LeetCode 算法面试

从deadline和被狗追说起(2/28)

赵新龙

28天写作

生产环境的线程池出问题了,我到底该如何正确使用线程池?

JavaEdge

Java java 并发 签约计划第二季

架构训练营 Week1 作业

红莲疾风

「架构实战营」

AOP+MybatisPlus 优化特殊的日志模块

4ye

Java spring 程序员 后端 签约计划第二季

大厂算法面试之leetcode精讲18.队列

全栈潇晨

算法 LeetCode

面试官:重写 equals 时为什么一定要重写 hashCode?

王磊

dart系列之:HTML的专属领域,除了javascript之外,dart也可以

程序那些事

flutter dart 程序那些事 12月日更

为什么我们需要Pulsar?

博文视点Broadview

模块五作业

panxiaochun

架构实战营

自定义规则删除过期文件(linux)

liuzhen007

28天写作 12月日更

1.《重学JAVA》开篇

杨鹏Geek

Java Java 25 周年 28天写作 12月日更

我的应用 OOM 了,我该做点什么?

JavaEdge

JVM 签约计划第二季

服务器宕机了,除了坐等,我还能做点什么?

JavaEdge

JVM 签约计划第二季

我的Spring AOP没生效,我该如何排查?

JavaEdge

Spring Framework 签约计划第二季

听说过python协程没?听说过 asyncio 库没?都在这一篇博客了

梦想橡皮擦

12月日更

Git进阶(五):git 分支管理策略

No Silver Bullet

git 学习 12月日更

为什么我们需要Pulsar?

博文视点Broadview

架构训练营 - 模块五作业

VegetableBird

架构实战营 架构师实战营 「架构实战营」

有人问你什么是CAP?你就把这篇文章发给他

李子捌

redis CAP理论 28天写作 12月日更

微信小程序开发:新建文件报错Error:pages/xxx/xxx.json Expecting ’STRING’,’NUMBER’,’NULL’,’TRUE’

三掌柜

28天写作 12月日更

DDD 领域驱动设计落地实践系列:微服务拆分之道

慕枫技术笔记

后端 签约计划第二季

模块五课后作业-设计微博系统中评论架构

断水风春

架构实战营

【Dart 专题】Factory 工厂构造函数

阿策小和尚

28天写作 0 基础学习 Flutter Android 小菜鸟 12月日更

小伙伴如何更有效的自学java开发

@零度

JAVA开发 自学java

Python JIT编译器PyPy 4引入SMD向量化并提升了性能_Python_Sergio De Simone_InfoQ精选文章