• python加速包numba并行计算多线程


    1、下面直接上代码需要注意的地方numba的官网找到

      1)有一些坑自己去numba的官网找找看,下面是我的写的一个加速的程序,希望对你有帮助。

    #coding:utf-8
    import time
    
    from numba import jit, prange, vectorize
    from numba import cuda
    from numba import njit
    import numpy as np
    
    
    def adds(x,y,m):
        return [x*i for i in range(y)]
    
    @jit(parallel=True,nogil=True)
    # @njit(parallel=True,nogil=True)
    def adds1(x,y,m):
        sd =  np.empty((y))
        for i in prange(y):
            for j in range(m):
                sd[i]=x*i*m
        return sd
    
    @jit(parallel=True,nogil=True)
    def test(n):
        temp = np.empty((50, 50)) # <--- allocation is hoisted as a loop invariant as `np.empty` is considered pure
        for i in prange(n):
            temp[:] = 0           # <--- this remains as assignment is a side effect
            for j in range(50):
                temp[j, j] = i
        return temp
    
    if __name__=="__main__":
        n = 50
        max = 10000**2*12
        m=100
        # st1 = time.time()
        # val_1 = adds(n,max,m)
        # print(time.time()-st1)
    
        st2 = time.time()
        val_2 = adds1(n,max,m)
        print(time.time()-st2)
    
        st3 = time.time()
        tmp = test(100**3*10)
        print(time.time()-st3)
    

      

      2) 最后一个显示时间输入,

      如果不调用jit装饰器的话这两个程序在我的电脑直接跑不下来。调用过后,Python可以做并行计算,开启多线程,忽略gil动态锁。

  • 相关阅读:
    第4章 栈和队列
    第3章 线性表
    第2章 算法
    第1章 数据结构绪论
    First Blood
    第52条:通过接口引用对象
    第51条:当心字符串连接的性能
    第50条:如果其他类型更合适,则尽量避免使用字符串
    第49条:基本类型优先于装箱基本类型
    第48条:如果需要精确的答案,请避免使用float和double
  • 原文地址:https://www.cnblogs.com/wuzaipei/p/10660641.html
Copyright © 2020-2023  润新知