一、numba有加速的使用吗?
实验一
%%time
def compute_sum(size: float) -> int:
sum = 0
for i in range(size):
sum += i
return sum
def main():
size = 10000
for _ in range(size):
sum = compute_sum(size)
main()
output:
Wall time: 7.66 s
实验二
%%time
import numba
@numba.jit
def compute_sum(size: float) -> int:
sum = 0
for i in range(size):
sum += i
return sum
def main():
size = 10000
for _ in range(size):
sum = compute_sum(size)
main()
output:
Wall time: 61.5 ms
实验三
结论:numba有非常大的加速效果
二、 numba为什么有加速效果呢?
答案当然是运行本机编译代码比运行动态解释代码快很多倍。 Numba 的工作原理是允许您为 Python 函数指定类型签名,这样可以在运行时进行编译(这是“ Just-in-time ”或 JIT 编译)。 Numba 动态编译代码的能力意味着您不会放弃 Python 的灵活性。这是向提供高生产率编程和高性能计算的理想组合迈出的一大步
Numba是一个针对Python的开源JIT编译器,由Anaconda公司主导开发,可以对Python原生代码进行CPU和GPU加速。Just-In-Time(JIT)技术为解释语言提供了一种优化,它能克服上述效率问题,极大提升代码执行速度,同时保留Python语言的易用性。使用JIT技术时,JIT编译器将Python源代码编译成机器直接可以执行的机器语言,并可以直接在CPU等硬件上运行。这样就跳过了原来的虚拟机,执行速度几乎与用C语言编程速度并无二致。