【发布时间】:2014-08-19 04:34:45
【问题描述】:
在求解抛物线 PDE 的耦合系统时,我需要在每个时间步求解线性系统。通过使用 IMEX 方法,我可以并行求解这些线性系统,并且只需在每个时间步更新右侧。
我的尝试是使用来自multiprocessing 的工人池、稀疏矩阵和来自scipy.sparse 的稀疏求解器。不幸的是,并行求解方程并没有那么快。
矩阵Mat1、Mat2、Mat3和Mat4对于所有时间步长都是相同的,向量b1、b2、b3和b4必须在每一步都相互依赖,即我有类似b1 = b1+b2+b3**2的东西。
我正在考虑使用multiprocessing.Array,但据我了解,它的目的是使流程能够更改我并不真正需要的给定数据。
有没有什么方法可以提高multiprocessing的性能?
我刚开始使用multiprocessing,因此我还不熟悉所有的可能性。
提前感谢您的帮助:-)
sparse_Mat1 = scipy.sparse.csr_matrix(Mat1)
sparse_Mat2 = scipy.sparse.csr_matrix(Mat2)
sparse_Mat3 = scipy.sparse.csr_matrix(Mat3)
sparse_Mat4 = scipy.sparse.csr_matrix(Mat4)
pool = multiprocessing.Pool(4)
# time steps
while t <= T+1/2*dt:
# stuff to update b1, b2, b3 and b4
...
res1 = pool.apply_async(scipy.sparse.linalg, [sparse_Mat1, b1])
res2 = pool.apply_async(scipy.sparse.linalg, [sparse_Mat2, b2])
res3 = pool.apply_async(scipy.sparse.linalg, [sparse_Mat3, b3])
res4 = pool.apply_async(scipy.sparse.linalg, [sparse_Mat4, b4])
sol1 = = res1.get()
sol2 = = res2.get()
sol3 = = res3.get()
sol4 = = res4.get()
pool.close()
【问题讨论】:
标签: python parallel-processing multiprocessing sparse-matrix