我是一名大学新生和 Python 新手,所以请多多包涵。我正在尝试并行化一些矩阵运算。这是我使用 ParallelPython 模块的尝试:
def testfunc(connectionMatrix, qCount, iCount, Htry, tStepCount):
test = connectionMatrix[0:qCount,0:iCount].dot(Htry[tStepCount-1, 0:iCount])
return test
f1 = job_server.submit(testfunc, (self.connectionMatrix, self.qCount, self.iCount, self.iHtry, self.tStepCount), modules = ("scipy.sparse",))
f2 = job_server.submit(testfunc, (self.connectionMatrix, self.qCount, self.iCount, self.didtHtry, self.tStepCount), modules = ("scipy.sparse",))
r1 = f1()
r2 = f2()
self.qHtry[self.tStepCount, 0:self.qCount] = self.qHtry[self.tStepCount-1, 0:self.qCount] + self.delT * r1 + 0.5 * (self.delT**2) * r2
似乎有一条正态曲线,x 轴上的矩阵大小和 y 轴上的加速百分比。在 100x100 矩阵上,它似乎以 30% 的速度增加为上限。越来越小的矩阵导致增加的次数越少,并且足够小和足够大的矩阵,串行代码更快。我的猜测是,问题在于论点的传递。复制大矩阵的开销实际上比作业本身花费的时间更长。我能做些什么来解决这个问题?有没有办法结合内存共享和通过引用传递矩阵?如您所见,没有修改任何参数,因此它可以是只读访问。
谢谢。