PETSc 中 DMDA 对象的内存占用

计算科学 宠物
2021-12-16 16:50:23

为什么 DMDA 对象在 PETSc 3.2-p7 上需要这么多内存。

运行代码时:

  ...
  N = 8000;
  ierr = DMDACreate2d(PETSC_COMM_WORLD, DMDA_BOUNDARY_PERIODIC, DMDA_BOUNDARY_PERIODIC, 
            DMDA_STENCIL_STAR, N, N, size, PETSC_DECIDE, PETSC_DECIDE, 
            0, PETSC_NULL, PETSC_NULL, &da);
  //ierr = DMCreateGlobalVector(da, &x); CHKERRQ(ierr);
  ...

使用命令./prog -log_summary,我得到以下内存使用摘要:

   Distributed Mesh: 512004856 bytes
   Vector: 2944 bytes
   Vector Scatter: 1256 bytes
   Index Set: 256003752 bytes
   IS L to G Mapping: 256000572 bytes

通过取消注释 DMCreateGlobalVector 行,内存摘要中的向量大小增加到:

   Vector: 512004384

DMDA 对象的大小似乎与矢量数据大小成正比。根据文档,数据不存储在分布式网格中。因此,为什么 DMDA 对象需要这么多内存?有没有办法减少 DMDA 使用的内存开销?

1个回答

该存储位于散点图和本地到全局地图中。DMDA 还在设置过程中创建(和销毁)一个向量;它可能不计入峰值内存使用量。

您是否有一个应用程序以任何方式限制您的能力,或者它是学术兴趣?模拟中通常有几个向量(对于某些应用程序,矩阵),因此 DMDA 内存使用量相当微不足道,值得用更快的数据结构换取。