并行处理一个函数,它将前一个函数输出作为参数

时间:2018-04-19 19:20:20

标签: python-3.x parallel-processing

我正在尝试在数组H_n = Sum(Amp * B1 * B_{n-1})的并行处理中对等式W进行编码。

For i=0 Bn = Bn ** w, else Bn = B_{n-1} * B1 . 

然后乘以Amp并求和,为H中的每个w生成W

如何应用并行处理来加快速度?我无法弄清楚并行处理如何知道先前的索引Bn是否尚未计算,当并行处理将W拆分为块以应用该函数时。

对于每个核心正在处理的新Bn块的W,该块的第一个Bn值可以通过以下方式计算:

Bn[i] = Bn[0] * (B1**(i-1))

例如,如果W被分成8个CPU内核的8个数组,则可以使用上面的等式计算8个数组中每个数组的第一个Bn值。然后通过H_w计算sum(B_{i-1} * B1)会更快。

仅供参考:

exp(-j * w[ i ]  * t ) = exp(-j * delta_w * t) * exp(-j * w[i-1])

B的长度为48474705

K=2**16
k=np.arange(1,K)
Fs=40e3
delta_w=2*np.pi*Fs/K
W=k*delta_w
Amp=[Amplitude(l,m,n,u) for u in U for l in L for m in M for n in N 
if dist(l,m,n,u) < 1500]
B=[np.exp(-1j*dist(l,m,n,u)/room.speed_of_sound) for u in U for l 
in L for m in M for n in N if dist(l,m,n,u) < 1500]
B1=[np.exp(-1j*delta_w*dist(l,m,n,u)/room.speed_of_sound) for u in 
U for l in L for m in M for n in N if dist(l,m,n,u) < 1500]
Bn=np.array(B)


i=0
for w in W:
    if i=0:
        Bn=Bn**w
        Hw[i]=np.einsum('i,i->',Amp,Bn)
        i=i+1
    else:
        Bn=np.array(Bn*B1)
        Hw[i]=np.einsum('i,i->',Amp,Bn)        
        i=i+1
return(Hw)

0 个答案:

没有答案