• Numba:高性能Python编译器


    一、简介

    Numba是一个开源JIT编译器,它将Python和NumPy代码的子集转换为快速机器代码。

    二、主要特点

    加速Python功能

    Numba使用行业标准的LLVM编译器库在运行时将Python函数转换为优化的机器代码。 Python中的Numba编译数值算法可以接近C或FORTRAN的速度。
    您不需要替换Python解释器,运行单独的编译步骤,甚至安装C / C ++编译器。 只需将其中一个Numba装饰器应用到Python函数中,Numba就会完成剩下的工作。

    专为科学计算而打造

    Numba旨在与NumPy阵列和功能一起使用。 Numba为不同的阵列数据类型和布局生成专门的代码,以优化性能。特殊装饰器可以创建通用功能,可以像NumPy函数那样在NumPy数组上进行广播。
    Numba还可以与Jupyter笔记本电脑配合使用,实现交互式计算,以及分布式执行框架,如Dask和Spark。

    并行化您的算法

    Numba提供了一系列用于并行化CPU和GPU代码的选项,通常只需要很少的代码更改。


    便携式编译

    运送高性能Python应用程序,而不必担心二进制编译和打包。您的源代码仍然是纯Python,而Numba在运行时处理编译。我们在200多种不同的平台配置中持续测试Numba。
    Numba支持Intel和AMD x86,POWER8 / 9和ARM CPU,NVIDIA和AMD GPU,Python 2.7和3.4-3.7,以及Windows / macOS / Linux。大多数系统的预编译Numba二进制文件可用作conda软件包和pip可安装的轮子。


    三、示例

    python一直被病垢运行速度太慢,但是实际上python的执行效率并不慢,慢的是python用的解释器Cpython运行效率太差。

    “一行代码让python的运行速度提高100倍”这绝不是哗众取宠的论调。

    我们来看一下这个最简单的例子,从1一直累加到1亿。

    最原始的代码:

    import time
    def foo(x,y):
            tt = time.time()
            s = 0
            for i in range(x,y):
                    s += i
            print('Time used: {} sec'.format(time.time()-tt))
            return s
    
    print(foo(1,100000000))

    结果:

    Time used: 6.779874801635742 sec
    4999999950000000

    我们来加一行代码,再看看结果:

    from numba import jit
    import time
    @jit
    def foo(x,y):
            tt = time.time()
            s = 0
            for i in range(x,y):
                    s += i
            print('Time used: {} sec'.format(time.time()-tt))
            return s
    print(foo(1,100000000))

    结果:

    Time used: 0.04680037498474121 sec
    4999999950000000

    是不是快了100多倍呢?
    就因为使用了 numba库的jit模块。

  • 相关阅读:
    一致性哈希的理解与实践
    nil in Go
    为什么Go没有math.Min/Max(int, int) 函数?
    What happens when I type kubectl run?
    kubelet简要分析
    编译安装nginx和模块
    nginx与tengine添加check模块(nginx_upstream_check_module)
    多台ESXI 6.5 添加 iSCSI 共享存储 --centos 7.4 作为target
    Cannot open the disk '/vmfs/volumes/5e97f429-a56d6ea0-1ef3-000c29a09445/oracle_node1/oracle_node1_1.vmdk' or one of the snapshot disks it depends on.
    RabbitMQ windows2016 镜像模式 haproxy+keepalived
  • 原文地址:https://www.cnblogs.com/bitquant/p/python-numba.html
Copyright © 2020-2023  润新知