我正在使用异构多尺度方法 (HMM)解决多尺度问题。本质上,我的特定过程使用以下迭代过程:
- 求解许多局部矩阵系统。
- 从本地系统的解决方案中计算感兴趣的值。
- 从本地“感兴趣的值”组装一个全局矩阵系统
- 求解全局矩阵系统
- 使用全局矩阵系统的解来形成新的局部矩阵系统。
重复直到满足某些收敛标准。
由于有许多本地(独立)线性方程组,并且多个系统可以放入本地 RAM 内存中,我认为最好将多个“本地”系统加载到每个处理器中并按顺序求解每个系统(请参阅发布的问题)。
我的问题是关于组装和解决全局矩阵系统的最佳策略。在我的特殊情况下,全局矩阵系统足够小,可以完全适应任何处理器的 RAM 内存。此外,局部和全局矩阵在迭代之间不会改变大小。因此,我预见了三种可能的策略之一:
- 将“感兴趣的值”收集到单个处理器上,并在一个处理器上按顺序组装/求解全局矩阵系统。
- 将感兴趣的值复制到每个处理器上,并在每个处理器上按顺序组装/求解相同的全局矩阵系统。
- 假设每个处理器都拥有生成全局矩阵的连续块所必需的“感兴趣的值”,那么我们可以在本地组装全局矩阵的分区,然后并行解决它们。
我可以看到每种方法的一些优点/缺点。在方法 1 中,求解阶段不需要通信,但与根处理器之间的通信可能会成为瓶颈(尤其是在规模上)。与第一种方法相比,方法 2 可能需要更多的处理器间通信来组装全局矩阵,但在求解阶段或随后的局部矩阵组装阶段不需要通信。方法 3 不需要处理器间通信来组装局部或全局矩阵,但在求解阶段需要它。
假设每个本地系统的顺序为X并且有X局部矩阵系统。让我们进一步假设全局矩阵系统有大小X. 在这些假设下,上述三种策略中的哪一种可能会导致全球系统的更快解决?是否有其他全局矩阵的映射策略可能在每次迭代时工作得更快?