Numba加速python代码

网友投稿 678 2022-08-31

Numba加速python代码

Numba加速python代码

Numba 读取装饰函数的 Python 字节码,并将其与有关函数输入参数类型的信息结合起来,分析和优化代码,最后使用编译器库(LLVM)针对你的 CPU 生成量身定制的机器代码。每次调用函数时,都会使用此编译版本,来达到加速的目的。

​​原始代码

import mathimport timedef is_prime(num): if num == 2: return True if num <= 1 or not num % 2: return False for div in range(3, int(math.sqrt(num) + 1), 2): if not num % div: return False return Truedef run_program(N): total = 0 for i in range(N): if is_prime(i): total += 1 return totalif __name__ == "__main__": N = 10000000 start = time.time() total = run_program(N) end = time.time() print(f"total prime num is {total}") print(f"cost {end - start}s")

运行结果:

total prime num is 664579 cost 53.910285234451294s

2 导入 Numba 的 njit,再在函数上方放个装饰器 @njit

import mathimport timefrom numba import njit# @njit 相当于 @jit(nopython=True)@njitdef is_prime(num): if num == 2: return True if num <= 1 or not num % 2: return False for div in range(3, int(math.sqrt(num) + 1), 2): if not num % div: return False return True# @njit 相当于 @jit(nopython=True)@njit(parallel = True)def run_program(N): total = 0 for i in range(N): if is_prime(i): total += 1 return totalif __name__ == "__main__": N = 10000000 start = time.time() total = run_program(N) end = time.time() print(f"total prime num is {total}") print(f"cost {end - start}s")

运行结果:

total prime num is 664579 cost 3.5231616497039795s

3 加入prange 参数来并行计算

import mathimport timefrom numba import njit, prange# @njit 相当于 @jit(nopython=True)@njitdef is_prime(num): if num == 2: return True if num <= 1 or not num % 2: return False for div in range(3, int(math.sqrt(num) + 1), 2): if not num % div: return False return True# @njit 相当于 @jit(nopython=True)@njit(parallel = True)def run_program(N): total = 0 for i in prange(N): if is_prime(i): total += 1 return totalif __name__ == "__main__": N = 10000000 start = time.time() total = run_program(N) end = time.time() print(f"total prime num is {total}") print(f"cost {end - start}s")

运行结果:

total prime num is 664579 cost 1.087864875793457s

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:python设计模式之装饰器模式(Decorator Pattern)
下一篇:Go语言之goroutine的调度原理
相关文章

 发表评论

暂时没有评论,来抢沙发吧~