Numba介绍及安装
编译型语音和解释型语言
计算机是不能理解高级语言的,更不能直接执行高级语言,它只能直接理解机器语言,所以使用任何高级语言编写的程序若想被计算机运行,都必须将其转换成计算机语言,也就是机器码。而这种转换的方式有两种,也就是编译和解释。由此高级语言也分为编译型语言和解释型语言。
主要区别在于,前者源程序编译后即可在该平台运行,后者是在运行期间才编译。所以前者运行速度快,后者跨平台性好。
编程型语言
(C、C++、Delphi、Pascal、Fortran )等,使用专门的编译器,针对特定的平台,将高级语言源代码一次性的编译成可被该平台硬件执行的机器码,并包装成该平台所能识别的可执行性程序的格式。
特点:在编译型语言写的程序执行之前,需要一个专门的编译过程,把源代码编译成机器语言的文件,如exe格式的文件,以后要再运行时,直接使用编译结果即可,如直接运行exe文件。因为只需编译一次,以后运行时不需要编译,所以编译型语言执行效率高。
总结:可以一次性的编译成想要的机器语言文件,运行时脱离开发环境,因此运行效率高。同时带来的缺点就是跨平台性不好,一般无法移植到其他平台。
解释型语言
(Java、Basic、javascript、python)等,使用专门的解释器对源程序逐行解释成特定平台的机器码并立即执行。是代码在执行时才被解释器一行行动态翻译和执行,而不是在执行之前就完成翻译。
特点:不需要提前执行,是直接将源代码解释成机器码并立即执行,所以只要有平台对应的解释器就可以运行改程序。
总结:解释型语言每次运行都要解释为机器码并执行,效率很低,可移植性能好。
特例Java
Java和其他的语言不太一样。因为java针对不同的平台有不同的JVM,实现了跨平台。所以Java语言有一次编译到处运行的说法。
python编译过程概述
当我们执行Python代码的时候,在Python解释器用四个过程“拆解”我们的代码,最终被CPU执行返回给用户。
具体的过程如下:
python解释器的类型有cpython、IPython、PyPy、Jython、IronPython,我们常见的cpython解释器是用c语言的方式来解释字节码的,而numba则是使用LLVM编译技术来解释字节码的。
numba是在一个叫做LLVM的编译器上进行编译,Numba将Python字节码转换为LLVM中间表示(IR),请注意,LLVM IR是一种低级编程语言,与汇编语法类似,与Python无关。
Numba
Numba有两种模式:nopython
和object
。前者不使用Python运行时并生成没有Python依赖的本机代码。本机代码是静态类型的,运行速度非常快。而对象模式使用Python对象和Python C API,而这通常不会显着提高速度。在这两种情况下,Python代码都是使用LLVM编译的。
LLVM
LLVM是一个编译器,它采用代码的特殊中间表示(IR)并将其编译为本机(机器)代码。编译过程涉及许多额外的传递,其中LLVM编译器可以优化IR。LLVM工具链非常擅长优化IR,因此它不仅可以编译Numba的代码,还可以优化它。
因此总结:
Numba的优点:便于使用,自动并行化,支持numpy操作和对象,支持调用GPU
Numba的缺点:debug非常麻烦,无法在nopython
模式下与Python及其模块进行交互,numba目前在nopython模式下支持python模块有限,比如pandas是不支持的,但是不支持意味着无法加速并不意味着不能运行。
安装
我实在RK3399pro(ubuntu18.04)上面安装,直接pip会报错,因为需要手动安装依赖包llvmlite,而安装llvmlite依赖包需要安装llvm,尝试过很多次对应版本的安装,结果都是失败。因为我只能找得到llvmlite和LLVM的对应关系。
最后参考网上其他人的安装思路,选择numba0.31.0+llvmlite0.16.0+llvm3.9
1.安装LLVM3.9
sudo apt-get install llvm-3.9
(我安装的时候这一步没有问题)
2.安装llvmlite0.16.0
sudo LLVM_CONFIG=/usr/bin/llvm-config-3.9 pip3 install llvmlite==0.16.0
(我在这样安装的时候会报错,提示没有这个路径,具体原因不知)
因此决定从源码安装,源码安装网址,下载对应安装包解压,然后在改解压缩路径下
sudo LLVM_CONFIG=/usr/bin/llvm-config-3.9 python setup.py install
3.安装Numba0.31.0
sudo LLVM_CONFIG=/usr/bin/llvm-config-3.9 pip install numba==0.31
同上提示有路径找不到问题,因此同样选择源码安装,源码安装网址,同样的方法解压缩,然后
sudo LLVM_CONFIG=/usr/bin/llvm-config-3.9 python setup.py install
最后可以检查一下自己是否安装成功,^<^ !