0

よく使うプログラムがあります。したがって、私はそれを高速化し、マルチプロセッシングを試みたいと考えています。プログラムで低解像度を使用すると、うまく機能しました(パワースペクトルを実行しています。低解像度は、高速に実行されることを意味しますが、あまり正確ではありません)。約 2 倍の速度が得られましたが、高解像度を実行するときは、シングル プロセッサよりも長時間実行した後、終了する前に終了しました。

私のメインファイルはこのようなものです(私は定義しましたf_min,f_max,df,t,f

import multiprocessing as mp
from ast_power import power_spectrum

tasks = mp.cpu_count()
bound = mp.Queue()
res   = mp.Queue()
mint  = [mp.Process(target=power_spectrum,args=(t,f,bound,res)) for i in range(tasks)]


DF = (f_max-f_min)/tasks
for i in mint:
    i.start()
for i in range(1,tasks+1):
    a = i*f_min
    b = a+DF
    c = df
    d = 1
    bound.put([a,b,c,d])
for i in mint:
    i.join()
fr,p = [],[]
while tasks:
    frp,pp = res.get()
    frp,pp = list(frp),list(pp)
    fr += frp
    p  += pp
    tasks -= 1

そして私のast_power姿はこんな感じ

import numpy as np
def power_spectrum(time, data, param, R='None' ):


    if R == 'None': #Normal
        f_min = param[0]
        f_max = param[1]
        df    = param[2]
        w     = param[3]
    else: # Multiprocessing
        f_min,f_max,df,w = param.get()
    freq = np.arange(f_min,f_max,df)    

    for i in xrange( len(freq) ):
        # Do the power spectrum...
        # will produce; power, alfa, beta

    if R == 'None': #Normal
        return freq,power,alfa,beta
    else: #Multiprocessing
        R.put([freq,power,alfa,beta])

私はそれを正しくやっていますか?dfハイ(ローレゾ)では効くのにローdf(ハイレゾ)では効かないというのは、とても不思議だと思います。

どんな助けも非常に高く評価されています。

4

1 に答える 1

1

join() 呼び出しは、完了するまでプロセスをブロックします。次のプロセスを実行する前に各プロセスが終了するのを待つと、マルチプロセッシングの利点が失われます。プロセスを独立して実行するには、start() を使用します。

于 2012-06-07T09:41:29.250 に答える