Parallelize these nested for loops in python

前端 未结 3 1336
北荒
北荒 2021-01-04 14:18

I have a multidimensional array (result) that should be filled by some nested loops. Function fun() is a complex and time-consuming function. I wan

3条回答
  •  执念已碎
    2021-01-04 14:35

    A simple approach could be to divide the array in sections and create some threads to operate throught these sections. For example one section from (0,0,0) to (5,10,15) and other one from (5,10,16) to (10,20,30).

    You can use threading module and do something like this

    import numpy as np
    import threading as t
    
    
    def fun(x, y, z):
        # time-consuming computation...
        # ...
    
        return output
    
    
    dim1 = 10
    dim2 = 20
    dim3 = 30
    
    result = np.zeros([dim1, dim2, dim3])
    #b - beginning index, e - end index
    def work(ib,jb,kb,ie,je,ke):
        for i in xrange(ib,ie):
            for j in xrange(jb,je):
                for k in xrange(kb,ke):
                    result[i, j, k] = fun(i, j, k)
    
     threads = list()
     threads.append(t.Thread(target=work, args(0,0,0,dim1/2,dim2/2,dim3/2))
     threads.append(t.Thread(target=work, args(dim1/2,dim2/2,dim3/2 +1,dim1, dim2, dim3))
    
     for thread in threads:
         thread.start()
    

    You can define these sections through some algorithm and determine the number of threads dynamically. Hope it helps you or at least give you some ideas.

提交回复
热议问题