如何从不同处理器中生成的值并行组装和求解矩阵系统?

计算科学 并行计算 映射策略
2021-11-28 06:27:32

我正在使用异构多尺度方法 (HMM)解决多尺度问题。本质上,我的特定过程使用以下迭代过程:

  1. 求解许多局部矩阵系统。
  2. 从本地系统的解决方案中计算感兴趣的值。
  3. 从本地“感兴趣的值”组装一个全局矩阵系统
  4. 求解全局矩阵系统
  5. 使用全局矩阵系统的解来形成新的局部矩阵系统。

重复直到满足某些收敛标准。

由于有许多本地(独立)线性方程组,并且多个系统可以放入本地 RAM 内存中,我认为最好将多个“本地”系统加载到每个处理器中并按顺序求解每个系统(请参阅发布的问题)。

我的问题是关于组装和解决全局矩阵系统的最佳策略。在我的特殊情况下,全局矩阵系统足够小,可以完全适应任何处理器的 RAM 内存。此外,局部和全局矩阵在迭代之间不会改变大小。因此,我预见了三种可能的策略之一:

  1. 将“感兴趣的值”收集到单个处理器上,并在一个处理器上按顺序组装/求解全局矩阵系统。
  2. 将感兴趣的值复制到每个处理器上,并在每个处理器上按顺序组装/求解相同的全局矩阵系统。
  3. 假设每个处理器都拥有生成全局矩阵的连续块所必需的“感兴趣的值”,那么我们可以在本地组装全局矩阵的分区,然后并行解决它们。

我可以看到每种方法的一些优点/缺点。在方法 1 中,求解阶段不需要通信,但与根处理器之间的通信可能会成为瓶颈(尤其是在规模上)。与第一种方法相比,方法 2 可能需要更多的处理器间通信来组装全局矩阵,但在求解阶段或随后的局部矩阵组装阶段不需要通信。方法 3 不需要处理器间通信来组装局部或全局矩阵,但在求解阶段需要它。

假设每个本地系统的顺序为103X103并且有103X103局部矩阵系统。让我们进一步假设全局矩阵系统有大小103X103. 在这些假设下,上述三种策略中的哪一种可能会导致全球系统的更快解决?是否有其他全局矩阵的映射策略可能在每次迭代时工作得更快?

1个回答

我不认为在任何情况下您都想在等级 0 上求解。冗余求解几乎总是更好,因为对于小事情,allreduce 与 reduce 一样有效,而冗余计算只有一个而不是两个。

但是,是在所有节点上进行冗余计算,还是在子集上进行冗余计算,或者在冗余子集上进行冗余计算,取决于硬件和系统大小。因此,您应该有一个可以执行其中任何一项的系统。PETSc 中的 PCREDUNDANT 可以对所有进程、某些进程或进程子集进行冗余求解。

但如果全球问题的规模106正如您在评论中所说,它足够大,可以从并行求解中显着受益。并行组装是非常标准和推荐的方案。