不久前我编写了一个矩阵乘法器,为了使它更快,我尝试使它线程化,只是为了发现线程在同一进程上运行。。后来我发现了我在下面代码中实现的多处理库。现在,我不知道如何合并生成的进程所做的工作,因为结果不在共享内存中。你知道吗
如何将分布式计算合并到“final\u multi”变量中?你知道吗
这是我的密码:
#!/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()
我知道这是一种低效的矩阵乘法方法,我只想学习多处理的工作原理,提前谢谢。你知道吗
您可以使用sharedmem模块,它是Python附带的多处理模块的增强版本。它提供了一种在进程之间共享内存的简单方法。你知道吗
在这个最小的例子中,输出矩阵将由四个并行的worker填充。你知道吗
相关问题 更多 >
编程相关推荐