Bir matris çarpanı bir süre önce kodladım, daha hızlı bir hale getirme çabasıyla, iş parçacığının aynı süreçte işlediğini keşfetmeye çalıştım. Daha sonra çoklu işlemeyi keşfettim. Aşağıdaki kodda uyguladığım kütüphane. Şimdi, sonuç paylaşılan bellekte olmadığı için ortaya çıkan süreçlerin nasıl yapıldığını bilmiyorum.Aynı anda python çoklu işleme ile float dizisine yazmak için yazınız
Dağıtılmış hesaplamaları "final_multi" değişkenine nasıl birleştirebilirim?
İşte benim kod:
#!/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()
ben sadece önceden ne kadar çoklu işlem eserler sayesinde öğrenmek istiyorum, bu matris çarpım bir verimsiz bir yoludur biliyorum.