为什么 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 使用的内存开销?