• 使用numba加速python程序


      前面说过使用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.1.src.tar.xz
    xz -d cfe-3.9.1.src.tar.xz
    xz -d clang-tools-extra-3.9.1.src.tar.xz
    xz -d compiler-rt-3.9.1.src.tar.xz
    tar -xvf llvm-3.9.1.src.tar
    tar -xvf cfe-3.9.1.src.tar
    tar -xvf clang-tools-extra-3.9.1.src.tar
    tar -xvf compiler-rt-3.9.1.src.tar
    mv cfe-3.9.1.src clang
    mv clang llvm-3.9.1.src/tools/
    mv clang-tools-extra-3.9.1.src extra
    mv extra/ llvm-3.9.1.src/tools/clang/
    mv compiler-rt-3.9.1.src compiler-rt
    mv compiler-rt llvm-3.9.1.src/projects/

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

    mkdir build-3.9
    cmake -G "Unix Makefiles" ../llvm-3.9.1.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程序确实是方便简单

  • 相关阅读:
    HDU2026 首字母变大写
    HDU2026 首字母变大写
    Recursive Bubble Sort(递归冒泡排序)
    Recursive Bubble Sort(递归冒泡排序)
    Topological Sorting(拓扑排序)
    Topological Sorting(拓扑排序)
    HDU1870 愚人节的礼物【堆栈+输入输出】
    HDU1870 愚人节的礼物【堆栈+输入输出】
    HDU1233 还是畅通工程
    HDU1233 还是畅通工程
  • 原文地址:https://www.cnblogs.com/freeweb/p/6652607.html
Copyright © 2020-2023  润新知