使用numba加速python程式

2021-09-07 10:16:21 字數 2315 閱讀 2081

前面說過使用cython來加速python程式的執行速度,但是相對來說程式改動較大,這次就說一種簡單的方式來加速python計算速度的方法,就是使用numba庫來進行,numba庫可以使用jit技術即時編譯,達到高效能,另外也可以使用cuda gpu的計算能力來加速,對python來說是乙個提速非常好的工具庫,使用簡單,但是安裝稍微複雜一些,具體過程如下:

安裝numba需要的依賴如下:

python依賴有(按順序):

setuptools

上面這些python依賴的安裝很簡單,都是解壓完然後執行python setup.py install即可

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

.xzxz -d cfe-3.9.1.src.tar

.xzxz -d clang-tools-extra-3.9.1.src.tar

.xzxz -d compiler-rt-3.9.1.src.tar

.xztar -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

#

!/usr/bin/env python

#coding=utf-8

from numba import

jitfrom numpy import

arange

import

time

@jit

defsum2d(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 利用numba加速python

importtime fromnumpyimportarange fromnumbaimportjit jit defz num 2147483647 質數大於 1 ifnum 1 檢視因子 foriinrange 2,num if num i 0 print num,不是質數 print i,乘於...

python加速模組 numba

numba的使用比較簡單,它不需要更換python的直譯器,只需要將numba的裝飾器寫在python方法上,當這個帶有numba裝飾器的方法被呼叫時,就會被just in time即時編譯為機器 然後執行。使用numba之前,我們需要安裝這個庫 trusted host mirrors.aliyu...

cuda入門 numba加速和pycuda加速

本專案旨在研究gpu混合計算框架對spark分布式計算進行加速,以下為研究測試 目錄結構 batch numba方式的批處理 cuda pycuda方式的批處理 data 測試資料 select ul data as jiakuan dns 001,dl data as jiakuan dns 00...