OpenMDAO 1.x 相关性降低
OpenMDAO 1.x relevance reduction
我在 OpenMDAO 中有一个没有输出的组件,用于为组的其他成员提供输入。 apply_linear 在该组件中被调用,尽管它的输出未连接。 OpenMDAO 1.x 中的相关性降低算法难道不应该指出永远不需要调用此方法的 apply_linear 吗?
事实证明,默认情况下并未启用基于每个变量的相关性降低。您可以通过以下方式打开它:
prob.root.ln_solver = LinearGaussSeidel()
prob.root.ln_solver.options['single_voi_relevance_reduction'] = True
此选项默认设置为 False,因为它通过为每个感兴趣的数量分配单独的向量来使用更多内存(尽管每个向量较小,因为它只包含相关变量,但总大小可能更大。)此外,相关性降低仅适用于使用线性高斯赛德尔作为顶级线性求解器时。
我的声誉还不够高,无法发表评论,所以我只是添加另一个答案。我只是想提一下,如果您不在 MPI 下 运行,激活 single_voi_relevance_reduction 基本上是免费的。内存使用的真正增加不是由于向量本身,而是由于我们存储的索引数组,以便将数据从源数组传输到目标数组。我们被迫在 MPI 下使用索引数组,因为 PETSc 需要它,但是当我们不使用 MPI 时,我们使用 python 切片对象来进行数据传输。切片对象需要很少的内存。
我在 OpenMDAO 中有一个没有输出的组件,用于为组的其他成员提供输入。 apply_linear 在该组件中被调用,尽管它的输出未连接。 OpenMDAO 1.x 中的相关性降低算法难道不应该指出永远不需要调用此方法的 apply_linear 吗?
事实证明,默认情况下并未启用基于每个变量的相关性降低。您可以通过以下方式打开它:
prob.root.ln_solver = LinearGaussSeidel()
prob.root.ln_solver.options['single_voi_relevance_reduction'] = True
此选项默认设置为 False,因为它通过为每个感兴趣的数量分配单独的向量来使用更多内存(尽管每个向量较小,因为它只包含相关变量,但总大小可能更大。)此外,相关性降低仅适用于使用线性高斯赛德尔作为顶级线性求解器时。
我的声誉还不够高,无法发表评论,所以我只是添加另一个答案。我只是想提一下,如果您不在 MPI 下 运行,激活 single_voi_relevance_reduction 基本上是免费的。内存使用的真正增加不是由于向量本身,而是由于我们存储的索引数组,以便将数据从源数组传输到目标数组。我们被迫在 MPI 下使用索引数组,因为 PETSc 需要它,但是当我们不使用 MPI 时,我们使用 python 切片对象来进行数据传输。切片对象需要很少的内存。