Dymos:使用黑盒函数时如何跨配置节点并行计算

问题描述 投票:0回答:1

我正在尝试使用黑盒求解器来计算 Dymos 中的 ODE 函数之一。例如,该组件将计算

x_dot = f(x)
,其中
f
是现有的基于物理的求解器,
x
是大小为
N
的状态变量向量。

使用搭配时,

x
现在呈现
MxN
的形状,其中
M
是搭配节点的数量。问题是基于物理的求解器无法采用这种形状的输入。目前,我必须迭代
M
次才能按顺序计算每个搭配点上的
f(x)
。例如

def compute(self, inputs, outputs):

     M = self.options['num_nodes']

     x = inputs["x"]

     x_dot = np.zeros((M, N))

     for i in range(0, M):
         x_dot[i] = f(x[i])

     outputs["x_dot"] = x_dot

这显然计算效率低下,我正在寻找一种并行化此计算方法的方法。

Dymos 有支持的原生方法吗?仅供参考,我尝试使用多处理(池)但收到错误

TypeError: cannot pickle 'weakref' object

谢谢。

parallel-processing openmdao
1个回答
0
投票

dymos 所基于的 OpenMDAO 通过 MPI 进行并行化,主要通过两种方式:

首先,您可以将多个组件放入ParallelGroup中。当代码通过

mpirun
运行时,每个组件都会同时执行。

然后,您可以将输出重新组合到单个数组中。

第二种更先进的方法是在单个组件中使用分布式输入和输出。当对其进行编码时,它似乎是单个组件,但 MPI 在不同处理器上提供该组件的副本,并在输入/输出数组中的不同元素上进行计算。这里有一些关于它如何工作的解释

© www.soinside.com 2019 - 2024. All rights reserved.