前面说过使用Cython来加速python程序的运行速度,但是相对来说程序改动较大,这次就说一种简单的方式来加速python计算速度的方法,就是使用numba库来进行,numba库可以使用JIT技术即时编译,达到高性能,另外也可以使用cuda GPU的计算能力来加速,对python来说是一个提速非常好的工具库,使用简单,但是安装稍微复杂一些,具体过程如下:

  安装numba需要的依赖如下:

  Python依赖有(按顺序):

  setuptools

  enum34     pypi下载地址:https://pypi.python.org/pypi/enum34

  funcsigs 下载地址:https://pypi.python.org/pypi/funcsigs/

  singledispatch 下载地址:https://pypi.python.org/pypi/singledispatch/

  llvmlite https://pypi.python.org/pypi/llvmlite/  这个下载的是最新版的0.16.0

  上面这些python依赖的安装很简单,都是解压完然后执行python setup.py install即可

  其中安装llvmlite的时候需要最艰难的一步,llvmlite需要llvm环境的支持,并且0.16.0的版本必须依赖于3.9.x的环境,llvm官网下载地址是:http://releases.llvm.org/download.html 最新的版本是4.0.0,记住要下载3.9.1的,如果安装了4.0.0那么安装llvmlite的时候会提示llvm版本问题,下载好的包如下:

  llvm-3.9.1.src.tar.xz

  cfe-3.9.1.src.tar.xz

  clang-tools-extra-3.9.1.src.tar.xz

  compiler-rt-3.9.1.src.tar.xz

  依次执行如下命令解压并操作:

xz -d llvm-3.9..src.tar.xz
xz -d cfe-3.9..src.tar.xz
xz -d clang-tools-extra-3.9..src.tar.xz
xz -d compiler-rt-3.9..src.tar.xz
tar -xvf llvm-3.9..src.tar
tar -xvf cfe-3.9..src.tar
tar -xvf clang-tools-extra-3.9..src.tar
tar -xvf compiler-rt-3.9..src.tar
mv cfe-3.9..src clang
mv clang llvm-3.9..src/tools/
mv clang-tools-extra-3.9..src extra
mv extra/ llvm-3.9..src/tools/clang/
mv compiler-rt-3.9..src compiler-rt
mv compiler-rt llvm-3.9..src/projects/

  放好之后开始编译源代码,编译需要使用cmake 如果没有安装需要安装,下面开始编译,编译过程非常长,64G服务器还得半个小时左右,并且编译出来的文件有20多G大小,硬盘也要留够,为防止编译过程中断,尽量使用screen会话执行:

mkdir build-3.9
cmake -G "Unix Makefiles" ../llvm-3.9..src
make -j4
make install

  完了之后可以删除原来的代码目录

  然后如果接下来再安装llvmlite的话,如果报cannot find -lstdc++的错误的话那么是缺少下面的包,可以使用yum安装:

yum -y install glibc-static
yum -y install libstdc++-devel
yum -y install libstdc++-static

  必须注意第三个一定要安装,如果不安装的话那么一直会报上面的错误,也可以下载libstdc++-static包进行离线安装,下载地址是:https://pkgs.org/download/libstdc++-static 下载之后使用rpm安装成功之后,再次安装llvmlite就成功了

  然后开始安装numba,numba下载地址是:http://numba.pydata.org/download.html 这里我们下载最新版的0.31.0,下载之后和安装普通依赖一样执行setup.py就可以了,最后安装完成numba就可以使用了,下面写一个小案例来看一下加速后的程序和加速前的程序的区别,借用官网上最经典的例子:

#!/usr/bin/env python
# coding=utf-8
from numba import jit
from numpy import arange
import time @jit
def sum2d(arr):
M, N = arr.shape
result = 0.0
for i in range(M):
for j in range(N):
result += arr[i,j]
return result a = arange(9).reshape(3,3)
start_time = time.time()
for i in range(10000000):
sum2d(a)
end_time = time.time()
print (end_time - start_time)

  这里使用numpy生成三行三列的矩阵,[[0,1,2],[3,4,5],[6,7,8]]然后做二维累加计算,值显然应该是36,这里做了10000000次这样的计算,使用@jit注解可以直接的使用numba jit技术实时编译,从而提高速度,最终运行时间大约是3.86s,如果去掉注解的话那么运行时间大约是25.45s从这里可以看出来大约有6.6倍的性能提升,所以使用numba加速python程序确实是方便简单

使用numba加速python程序的更多相关文章

  1. Numba加速Python程序

    众所周知,Python和Java一样是基于虚拟机的语言,并不是像C/C++那样将程序代码编译成机器语言再运行,而是解释一行执行一行,速度比较慢.使用Numba库的JIT技术编译以后,可以明显提高程序的 ...

  2. 用Cython加速Python程序以及包装C程序简单测试

    用Cython加速Python程序 我没有拼错,就是Cython,C+Python=Cython! 我们来看看Cython的威力,先运行下边的程序: import time def fib(n): i ...

  3. 用 Numba 加速 Python 代码

    原文出自微信公众号:Python那些事 一.介绍 pip install numba Numba 是 python 的即时(Just-in-time)编译器,即当你调用 python 函数时,你的全部 ...

  4. numba jit加速python程序

    numba numba加速循环.numpy的一些运算,大概是将python和numpy的一些代码转化为机器代码,速度飞快! 加速耗时很长的循环时: from numba import jit # 在函 ...

  5. 使用numba加速python科学计算

    技术背景 python作为一门编程语言,有非常大的生态优势,但是其执行效率一直被人诟病.纯粹的python代码跑起来速度会非常的缓慢,因此很多对性能要求比较高的python库,需要用C++或者Fort ...

  6. python程序的pypy加速

    我们知道,python作为一种几乎是脚本语言的语言,其优点固然有,但是其有一个最大的缺点,就是运行速度没有办法和c,c++,java比.最近在些一些代码的时候也是碰到了这样的问题. 具体而言,pyth ...

  7. 贡献python prim多源最短路搜索算法 numba加速方法的demo和总结

    1.测试两个算法 #coding:utf-8 import time import numba import numpy as np ''' 使用numba加速总结, (1).在数值计算比如int f ...

  8. 5款Python程序员高频使用开发工具推荐

    很多Python学习者想必都会有如下感悟:最开始学习Python的时候,因为没有去探索好用的工具,吃了很多苦头.后来工作中深刻体会到,合理使用开发的工具的便利和高效.今天,我就把Python程序员使用 ...

  9. 构建可扩展的GPU加速应用程序(NVIDIA HPC)

    构建可扩展的GPU加速应用程序(NVIDIA HPC) 研究人员.科学家和开发人员正在通过加速NVIDIA GPU上的高性能计算(HPC)应用来推进科学发展,NVIDIA GPU具有处理当今最具挑战性 ...

随机推荐

  1. NOIP练习赛题目4

    肥得更高 难度级别:C: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 自2009年以来,A.B站的历史就已经步入了农业变革的黎明期.在两站的 ...

  2. hadoop 视频教程3之实战教程

    一,视频内容: 海量数据处理平台框架 hadoop介绍 hadoop 生态系统介绍 hdfs 设计原则 hdfs 系统架构 namenode datanode secondarynamenode hd ...

  3. 使用 IntraWeb (15) - 基本控件之 TIWEdit、TIWMemo、TIWText

    TIWEdit //单行文本框, 通过 PasswordPrompt 属性可以作为密码框 TIWMemo //多行文本框 TIWText //相当于多行的 TIWLabel 或不能编辑的 TIWMem ...

  4. 10 个理由让你继续干 IT

    1.钱,钱,钱 对,我们努力工作就是为了赚钱,而IT专业人士的努力工作的确得到了很好的补偿.报酬不仅仅是好而已,而是非常棒.根据美国劳工部<2010年美国 就业与报酬情况概览>(表6,PD ...

  5. [原创]浅谈H5页面性能测试

    [原创]浅谈H5页面性能测试 H5页面我想各位都不陌生,随着移动互联网兴起,不管是App,还是H5都火起来了,最突出的2个表现是ios/android/前端等工程师薪水大涨,尤其是资深前端工程师40W ...

  6. 使用 Spring 2.5 注释驱动的 IoC 功能(转)

    基于注释(Annotation)的配置有越来越流行的趋势,Spring 2.5 顺应这种趋势,提供了完全基于注释配置 Bean.装配 Bean 的功能,您可以使用基于注释的 Spring IoC 替换 ...

  7. SIMATIC PID温度控制

    SIMATIC PID温度控制 // VAR_INPUT ------------------------------------------------------------------- #if ...

  8. spanner-becoming-a-sql-system 2017

    https://blog.acolyer.org/2017/07/03/spanner-becoming-a-sql-system/?utm_source=tuicool&utm_medium ...

  9. mmc生产任务分配问题续

    mmc生产任务分配问题续,本题目比上个题目难, 要注意的是,生产,销售,库存的关系, 生产+上月库存-销售=本月库存, 期初,生产=库存,销售没有.

  10. 多个按钮触发同一个Bootstrap自适应模态窗口

    在项目中可能会面对这样的一个场景: 界面上有多个按钮,我们希望点击这些按钮弹出同一个模态窗口,但希望模态窗口的内容是动态生成的,即,点击每个按钮弹出的模态窗口内容不同. 通常情况下,一个按钮对应一个模 ...