用MPI进行数值优化

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

我试图通过使用MPI指令并行化优化例程。程序的结构大致类似于文本末尾的框图。数据被送到优化程序,它调用一个目标函数子程序和另一个子程序,它计算一个叫做“雅可比”的矩阵。优化例程根据需要迭代多次以达到目标函数的最小值并以结果退出。雅可比矩阵用于确定最小值可能在哪个方向,并朝该方向迈出一步。我无法控制优化例程,我只提供目标函数和计算雅可比行列函数。大部分时间都花在计算雅可比行列式上。由于雅可比行列式的每个矩阵元素独立于其余元素,因此它似乎是并行化的良好候选者。但是,我无法做到这一点。最初我认为我可以在大量节点上分配雅可比行列式的计算,每个节点只计算一些矩阵元素。我这样做但是在一次迭代之后,节点上的所有线程都退出并且程序停止。我开始认为没有优化例程的源代码,这可能是不可能的。原因是将代码分布在多个节点上,并指示它们只计算Jacobian的一小部分,除了主控之外,还要对所有节点进行优化。有没有办法解决它,使用MPI而不触及优化例程中的代码?只能在除主控之外的所有节点上执行计算雅可比行列式的函数吗?你会怎么做?

blockdia

mpi openmpi nonlinear-optimization
1个回答
0
投票

结果比我想象的要容易。正如问题中所解释的那样,工作线程只在一次迭代后退出。解决方案是将代码包含在由工作人员执行的雅可比计算中,并使用无限循环,并通过从主线程(主)退出答案后发出消息来突破它。

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