diff --git a/NumLib/DOF/SimpleMatrixVectorProvider.cpp b/NumLib/DOF/SimpleMatrixVectorProvider.cpp index 67fe93e71545deeaa79bc6d978f9f34e984d8e5b..6068240c68f38ca987788bd28d7590bed9fc8e9e 100644 --- a/NumLib/DOF/SimpleMatrixVectorProvider.cpp +++ b/NumLib/DOF/SimpleMatrixVectorProvider.cpp @@ -111,6 +111,7 @@ GlobalMatrix& SimpleMatrixVectorProvider:: getMatrix(std::size_t& id) { + INFO("MEMORY SimpleMatrixVectorProvider: used_matrices: {:d}, unused_matrices: {:d}", _used_matrices.size(), _unused_matrices.size()); return *getMatrix_<true>(id).first; } @@ -180,6 +181,7 @@ GlobalVector& SimpleMatrixVectorProvider:: getVector(std::size_t& id) { + INFO("MEMORY SimpleMatrixVectorProvider: used_vectors: {:d}, unused_vectors: {:d}", _used_vectors.size(), _unused_vectors.size()); return *getVector_<true>(id).first; } diff --git a/NumLib/ODESolver/NonlinearSolver.cpp b/NumLib/ODESolver/NonlinearSolver.cpp index 6a8ffcd420afcdd6813fc01fbe47eb3e62127571..978625d828c0c7c4a481a1c2183573ab6001e0e3 100644 --- a/NumLib/ODESolver/NonlinearSolver.cpp +++ b/NumLib/ODESolver/NonlinearSolver.cpp @@ -15,6 +15,7 @@ #include "BaseLib/ConfigTree.h" #include "BaseLib/Error.h" #include "BaseLib/Logging.h" +#include "BaseLib/MemWatch.h" #include "BaseLib/RunTime.h" #include "ConvergenceCriterion.h" #include "MathLib/LinAlg/LinAlg.h" @@ -53,6 +54,8 @@ NonlinearSolverStatus NonlinearSolver<NonlinearSolverTag::Picard>::solve( postIterationCallback, int const process_id) { + BaseLib::MemWatch mem_watch; + namespace LinAlg = MathLib::LinAlg; auto& sys = *_equation_system; @@ -79,8 +82,8 @@ NonlinearSolverStatus NonlinearSolver<NonlinearSolverTag::Picard>::solve( BaseLib::RunTime time_iteration; time_iteration.start(); - timer_dirichlet.start(); + sys.computeKnownSolutions(*x_new[process_id], process_id); sys.applyKnownSolutions(*x_new[process_id]); time_dirichlet += timer_dirichlet.elapsed(); @@ -89,9 +92,17 @@ NonlinearSolverStatus NonlinearSolver<NonlinearSolverTag::Picard>::solve( BaseLib::RunTime time_assembly; time_assembly.start(); + const unsigned long mem_begin = mem_watch.getVirtMemUsage() / (1024 * 1024); sys.assemble(x_new, x_prev, process_id); + const unsigned long mem_assemble = mem_watch.getVirtMemUsage() / (1024 * 1024); + INFO("MEMORY solve: assemble {:d} MB", mem_assemble - mem_begin); sys.getA(A); + const unsigned long mem_get_A = mem_watch.getVirtMemUsage() / (1024 * 1024); + INFO("MEMORY solve: mem_get_A {:d} MB", mem_get_A - mem_assemble); sys.getRhs(*x_prev[process_id], rhs); + const unsigned long mem_get_Rhs = mem_watch.getVirtMemUsage() / (1024 * 1024); + INFO("MEMORY solve: mem_get_Rhs {:d} MB", mem_get_Rhs - mem_get_A); + INFO("[time] Assembly took {:g} s.", time_assembly.elapsed()); // Subtract non-equilibrium initial residuum if set @@ -179,6 +190,9 @@ NonlinearSolverStatus NonlinearSolver<NonlinearSolverTag::Picard>::solve( // Update x s.t. in the next iteration we will compute the right delta x LinAlg::copy(*x_new[process_id], *x[process_id]); + const unsigned long mem_end = mem_watch.getVirtMemUsage() / (1024 * 1024); + INFO("MEMORY solve: iteration {:d} MB", mem_end - mem_begin); + INFO("[time] Iteration #{:d} took {:g} s.", iteration, time_iteration.elapsed()); diff --git a/NumLib/ODESolver/TimeDiscretizedODESystem.cpp b/NumLib/ODESolver/TimeDiscretizedODESystem.cpp index d28ea348a1c45f9a2e17e8b815ddb70edc619b3d..b742bdd283ab32e32652ca6c77672205ee9b500a 100644 --- a/NumLib/ODESolver/TimeDiscretizedODESystem.cpp +++ b/NumLib/ODESolver/TimeDiscretizedODESystem.cpp @@ -10,6 +10,7 @@ #include "TimeDiscretizedODESystem.h" +#include "BaseLib/MemWatch.h" #include "MathLib/LinAlg/ApplyKnownSolution.h" #include "MathLib/LinAlg/UnifiedMatrixSetters.h" #include "NumLib/IndexValueVector.h" @@ -85,6 +86,8 @@ void TimeDiscretizedODESystem<ODESystemTag::FirstOrderImplicitQuasilinear, std::vector<GlobalVector*> xdot(x_new_timestep.size()); _xdot_ids.resize(x_new_timestep.size()); + INFO("MEMORY _xdot_ids[0]: {:d}", _xdot_ids[0]); + for (std::size_t i = 0; i < xdot.size(); i++) { xdot[i] = &NumLib::GlobalVectorProvider::provider.getVector(_xdot_ids[i]); @@ -215,6 +218,9 @@ void TimeDiscretizedODESystem<ODESystemTag::FirstOrderImplicitQuasilinear, std::vector<GlobalVector*> const& x_prev, int const process_id) { + BaseLib::MemWatch mem_watch; + const unsigned long mem_begin = mem_watch.getVirtMemUsage() / (1024 * 1024); + namespace LinAlg = MathLib::LinAlg; auto const t = _time_disc.getCurrentTime(); @@ -244,6 +250,8 @@ void TimeDiscretizedODESystem<ODESystemTag::FirstOrderImplicitQuasilinear, { NumLib::GlobalVectorProvider::provider.releaseVector(*v); } + const unsigned long mem_assemble = mem_watch.getVirtMemUsage() / (1024 * 1024); + INFO("MEMORY TimeDiscretizedODESystem: assemble {:d} MB", mem_assemble - mem_begin); } void TimeDiscretizedODESystem< diff --git a/ProcessLib/TimeLoop.cpp b/ProcessLib/TimeLoop.cpp index dd0fafac70675a24962fe05589c0bb88605193e4..0cc388ba15e91ccb0cd59586300ae66aa2ee25c1 100644 --- a/ProcessLib/TimeLoop.cpp +++ b/ProcessLib/TimeLoop.cpp @@ -585,7 +585,7 @@ bool TimeLoop::loop() BaseLib::MemWatch mem_watch; while (t < _end_time) { - const unsigned long mem_begin_time_step = mem_watch.getVirtMemUsage(); + const unsigned long mem_begin_time_step = mem_watch.getVirtMemUsage() / (1024 * 1024); BaseLib::RunTime time_timestep; time_timestep.start(); @@ -615,6 +615,9 @@ bool TimeLoop::loop() preTimestepForAllProcesses(t, dt, _per_process_data, _process_solutions); + const unsigned long mem_preTimestepForAllProcesses = mem_watch.getVirtMemUsage() / (1024 * 1024); + INFO("MEMORY timestep {:d}: before non-linear solver : {:d} MB", timesteps, mem_preTimestepForAllProcesses - mem_begin_time_step); + if (is_staggered_coupling) { nonlinear_solver_status = @@ -625,6 +628,8 @@ bool TimeLoop::loop() nonlinear_solver_status = solveUncoupledEquationSystems(t, dt, timesteps); } + const unsigned long mem_nonlinear_solver = mem_watch.getVirtMemUsage() / (1024 * 1024); + INFO("MEMORY timestep {:d}: after non-linear solver: {:d} MB", timesteps, mem_nonlinear_solver - mem_begin_time_step); // Run post time step only if the last iteration was successful. // Otherwise it runs the risks to get the same errors as in the last @@ -664,8 +669,8 @@ bool TimeLoop::loop() dt, timesteps, t); break; } - const unsigned long mem_end_time_step = mem_watch.getVirtMemUsage(); - INFO("memory at begin of timestep: {:d}, memory at end of timestep: {:d}, diff: {:d}", mem_begin_time_step, mem_end_time_step, mem_end_time_step - mem_begin_time_step); + const unsigned long mem_end_time_step = mem_watch.getVirtMemUsage() / (1024 * 1024); + INFO("MEMORY timestep {:d}: mem at begin: {:d} MB, mem at end: {:d} MB, diff: {:d} MB", timesteps, mem_begin_time_step, mem_end_time_step, mem_end_time_step - mem_begin_time_step); } INFO(