よく使うプログラムがあります。したがって、私はそれを高速化し、マルチプロセッシングを試みたいと考えています。プログラムで低解像度を使用すると、うまく機能しました(パワースペクトルを実行しています。低解像度は、高速に実行されることを意味しますが、あまり正確ではありません)。約 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
(ハイレゾ)では効かないというのは、とても不思議だと思います。
どんな助けも非常に高く評価されています。