diff options
Diffstat (limited to 'Carpet/Carpet/src/Timing.cc')
-rw-r--r-- | Carpet/Carpet/src/Timing.cc | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/Carpet/Carpet/src/Timing.cc b/Carpet/Carpet/src/Timing.cc index 6f58b3a3b..470f6367d 100644 --- a/Carpet/Carpet/src/Timing.cc +++ b/Carpet/Carpet/src/Timing.cc @@ -461,6 +461,101 @@ namespace Carpet { + static + void + UpdateMemoryStats (cGH const * const cctkGH) + { + DECLARE_CCTK_ARGUMENTS; + + // Various metadata, excluding the small change + *metadata = 0.0 + + // memoryof(main_timer_tree) + + // memoryof(mode_timer_tree) + + memoryof(origin_space) + + memoryof(delta_space) + + // memoryof(domainspecs) + + memoryof(vhh) + + memoryof(vdd) + + memoryof(level_regridding_epochs); + // memoryof(groupdata) + + // memoryof(arrdata); + + // TODO: Add TimerNode.root(?), TimerSet.timers + + // Grid structure + *grid_structure = 0.0; + // Storage for grid arrays + *grid_arrays = 0.0; + // Storage for grid functions + *grid_functions = 0.0; + + for (size_t m=0; m<vhh.size(); ++m) { + *grid_structure += memoryof(*vhh.AT(m)); + } + for (size_t m=0; m<vdd.size(); ++m) { + *grid_structure += memoryof(*vdd.AT(m)); + } + *grid_structure += memoryof(*tt); + + const int myproc = CCTK_MyProc(0); + for (size_t gi=0; gi<arrdata.size(); ++gi) { + if (CCTK_GroupTypeI(gi) == CCTK_GF) { + for (size_t m=0; m<arrdata.AT(gi).size(); ++m) { + const gh& hh = *vhh.AT(m); + for (size_t vi=0; vi<arrdata.AT(gi).AT(m).data.size(); ++vi) { + const ggf* f = arrdata.AT(gi).AT(m).data.AT(vi); + if (f) { + *grid_structure += memoryof(*f); + for (int ml=0; ml<hh.mglevels(); ++ml) { + for (int rl=0; rl<hh.reflevels(); ++rl) { + const int tls = f->timelevels(ml, rl); + for (int lc=0; lc<hh.local_components(rl); ++lc) { + for (int tl=0; tl<tls; ++tl) { + const gdata* d = f->data_pointer(tl, rl, lc, ml); + *grid_structure += memoryof(*d); + // TODO: add memoryof(d->_memory); + if (d->has_storage()) { + assert(d->proc() == myproc); + *grid_functions += d->size() * d->elementsize(); + } + } + } + } + } + } + } + } + } else { // not CCTK_GF + const int m = 0; + *grid_structure += 0.0 + + memoryof(*arrdata.AT(gi).AT(m).hh) + + memoryof(*arrdata.AT(gi).AT(m).dd) + + memoryof(*arrdata.AT(gi).AT(m).tt); + for (size_t vi=0; vi<arrdata.AT(gi).AT(m).data.size(); ++vi) { + const ggf* f = arrdata.AT(gi).AT(m).data.AT(vi); + if (f) { + *grid_structure += memoryof(*f); + const int ml = 0; + const int rl = 0; + const int tls = f->timelevels(ml, rl); + const int lc = 0; + for (int tl=0; tl<tls; ++tl) { + const gdata* d = f->data_pointer(tl, rl, lc, ml); + *grid_arrays += memoryof(*d); + // TODO: add memoryof(d->_memory); + if (d->has_storage()) { + assert(d->proc() == myproc); + *grid_functions += d->size() * d->elementsize(); + } + } + } + } + } + } + } + + + // Calculate timing statistics (to be called before output) void UpdateTimingStats (cGH const * const cctkGH) @@ -470,6 +565,7 @@ namespace Carpet { UpdateIOStats (cctkGH); UpdateCommunicationStats (cctkGH); UpdatePhysicalTimePerHour (cctkGH); + UpdateMemoryStats (cctkGH); } |