嵌套的多进程



我目前正在尝试从下面显示的过程中获得结果。但是,对于所需的步骤数来说,它花费的时间太长。我想加快结果。 如何针对这种情况实现多处理?

在我正在构建的类中,我有以下定义

def class_corr(self,Delta,xi_q,Q,counter):
to = self.t
npts = 512
x0 = 12
dx =2*x0/npts
norm=0
classic=0
for n in range(0,npts+1):
qi = -x0+n*dx
for m in range(0,npts+1):
pj = -x0+m*dx
for k in range(0,npts+1):
xi_pk = -x0+k*dx
f1    += dx**3*wt(qi,pj,qo,po,to)*F(qi,xi_pk,Delta, Q)
fn += dx**3*wt(qi,pj,qo,po,to)*G(qi,xi_pk,xi_q,Delta,Q)
if counter:
return  [f1, fn/f1]
return  fn/f1

使用多处理是否合理?

到目前为止,我已经检查了这些:

  1. 多处理嵌套 python 循环
  2. 傻瓜的 Python 多处理

但我无法实施这些,也无法获得解决方案。

正如我所想的,你在这里真正遇到的是一个动态编程风格的问题。您不断重新计算相同的项。例如,您只需要计算一次dx^3,但您却要计算npts^3次。同样,您只需要计算每个3*wt(qi,pj,qo,po,to)项一次,但您可以计算2*npts次。

尝试类似操作:

def class_corr(self,Delta,xi_q,Q,counter):
to = self.t
npts = 512
x0 = 12
dx =2*x0/npts
dx3 = dx**3
norm=0
classic=0
for n in range(0,npts+1):
qi = -x0+n*dx
for m in range(0,npts+1):
pj = -x0+m*dx
wt_curr = wt(qi,pj,qo,po,to)
for k in range(0,npts+1):
xi_pk = -x0+k*dx
f1 += dx3*wt_curr*F(qi,xi_pk,Delta, Q)
fn += dx3*wt_curr*G(qi,xi_pk,xi_q,Delta,Q)
if counter:
return  [f1, fn/f1]
return  fn/f1

此外,您计算FGnpts的次数比您需要的要多。看起来每个都只随着qixi_pk而变化(xi_qDeltaQ在这种方法中似乎没有变化(。如果您尝试使用某种 2 层 defaultdict 来记录您已经计算F(或G(的qixi_pk值,那么您将节省大量不必要的调用和F(或G(的计算。

(PS - 我知道这不是你要找的方法,但我认为它解决了你问题的核心。您花费大量时间重新计算已计算的项。

相关内容

  • 没有找到相关文章

最新更新