1
私は行列の乗数をしばらく前にコード化して、高速化しようとしました。同じプロセスでスレッドが実行されていることを発見するために試みました..後でマルチプロセッシング私が以下のコードで実装したライブラリ。さて、私は、結果が共有メモリにないので、生成されたプロセスによって行われた作業をどのようにマージするのか分かりません。Pythonマルチプロセッシングで浮動小数点配列に同時に書き込む
分散計算を「final_multi」変数にマージするにはどうすればよいですか?
HERESに私のコード:
#!/usr/bin/env python
import numpy as np
from multiprocessing import Process, Array
T=64
v1 = np.empty([T,T], dtype=np.float32)
v2 = np.empty_like(v1)
final_multi = np.empty_like(v1)
#shared = Array('f', final_multi) This doesnt work
def calclinea(mat1, mat2, fil, col):
escalar = 0
for vl in range(T):
escalar += mat1[fil,vl]*mat2[vl,col]
return escalar
def mulshared(vec1, vec2, froY, toY, froX, toX):
global final_multi
for y in range(froY,toY):
for x in range(froX, toX):
final_multi[x,y] = calclinea(vec1,vec2,x,y)
#shared[x,y] = calclinea(vec1,vec2,x,y)
def main():
for r in range(T): ### Allocate host memory
for c in range(T):
v1[r,c] = r
v2[r,c] = c+2
final_multi[r,c] = 0
#p1 =Process(target=mulshared, args=(v1,v1,0,(T*1/4 -1),0,T))
#p2 =Process(target=mulshared, args=(v1,v1,(T*1/4),(T*2/4 -1),0,T))
#p3 =Process(target=mulshared, args=(v1,v1,(T*2/4),(T*3/4 -1),0,T))
p4 =Process(target=mulshared, args=(v1,v1,T*3/4,T*4/4,0,T)) #All four processes to demo distribution of data, only 4th is initialized so result can be seen, p1 result is all zeros so..
p4.start()
p4.join()
print "\nfinal_multi\n", final_multi
main()
私はちょうど、事前にどのようにマルチプロセッシング作品、感謝を勉強したい、これは行列の乗算の非効率的な方法であることを知っています。