在 PETSc 和/或 Trilinos 中重叠通信和计算?

计算科学 pde 软件 宠物 特里诺斯
2021-11-28 10:24:37

我只是在学习这些软件包,所以如果这是一个微不足道/愚蠢的问题,请原谅我。

我们的团队正在使用现代软件实践从头开始重新开发我们的代码。目前它是震源物理的显式波传播代码,但我们小组越来越多地致力于其他耦合震源问题。未来,我们将需要能够隐式处理部分域,使用非结构化网格,并且(像数值 PDE 世界中的许多其他人一样)将考虑使用 GPU。因此,我们真的希望从一开始就做出正确的设计决策来促进这一点。

正在研究的一个大问题是要考虑开发哪些大型国家实验室软件包,PETSc 或 Trilinos。我一直在寻找答案的一个问题是,重叠计算、I/O 和与这些包的通信是多么容易。例如,如果我们使用 PETSc 的分布式数组数据结构,这是否意味着我们将无法在将模板应用于域的其余部分时交换我们的光环单元?(与 EPetra/TPetra 类型的 Trilinos 类似。)

3个回答

是的,许多通信功能分为开始/结束对。一个典型的例子是MatMult_MPIAIJ()(标准的基于行的格式)的代码。

VecScatterBegin(a->Mvctx,xx,a->lvec,INSERT_VALUES,SCATTER_FORWARD);
(*a->A->ops->mult)(a->A,xx,yy);            /* multiply the diagonal block */
VecScatterEnd(a->Mvctx,xx,a->lvec,INSERT_VALUES,SCATTER_FORWARD);
(*a->B->ops->multadd)(a->B,a->lvec,yy,yy); /* add contribution from off-diagonal block */

显然,我需要学习如何更好地搜索!

在 PETSc 中,这可以通过(用户手册的第 49 页)来完成(我相信

   DMGlobalToLocalBegin(DM da,Vec g,InsertMode iora,Vec l);
   DMGlobalToLocalEnd(DM da,Vec g,InsertMode iora,Vec l);

我最初是一名 Trilinos 人(主要是通过 Python 绑定),并编写了一个大型流体代码,可以同时使用它和 PETSc。一般来说,我会说这些是矩阵库,通信功能很笨拙,有点烦人。来自 Trilinos 人的 TPetra 看起来真的很酷,但似乎在 trilinos-users 列表服务器上只会引起心痛。. .

我个人会推荐PETSc,它似乎在开发和使用中非常活跃。我要提出的一个警告是,如果您需要传递比向量更复杂的东西,使用诸如Zero-MQ之类的不同通信通道可以真正简化事情。