Skip to content
Snippets Groups Projects
Commit db0d26e7 authored by Stéphane Del Pino's avatar Stéphane Del Pino
Browse files

Print execution statistics at the end of execution

First sequential implementation
parent 88ab5c28
No related branches found
No related tags found
1 merge request!175Print execution statistics at the end of execution
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include <mesh/DualMeshManager.hpp> #include <mesh/DualMeshManager.hpp>
#include <mesh/MeshDataManager.hpp> #include <mesh/MeshDataManager.hpp>
#include <mesh/SynchronizerManager.hpp> #include <mesh/SynchronizerManager.hpp>
#include <utils/ExecutionStatManager.hpp>
#include <utils/PugsUtils.hpp> #include <utils/PugsUtils.hpp>
#include <utils/RandomEngine.hpp> #include <utils/RandomEngine.hpp>
...@@ -18,14 +19,18 @@ main(int argc, char* argv[]) ...@@ -18,14 +19,18 @@ main(int argc, char* argv[])
MeshDataManager::create(); MeshDataManager::create();
DualConnectivityManager::create(); DualConnectivityManager::create();
DualMeshManager::create(); DualMeshManager::create();
ExecutionStatManager::create();
parser(filename); parser(filename);
ExecutionStatManager::printInfo();
ExecutionStatManager::destroy();
DualMeshManager::destroy(); DualMeshManager::destroy();
DualConnectivityManager::destroy(); DualConnectivityManager::destroy();
MeshDataManager::destroy(); MeshDataManager::destroy();
RandomEngine::destroy();
QuadratureManager::destroy(); QuadratureManager::destroy();
RandomEngine::destroy();
SynchronizerManager::destroy(); SynchronizerManager::destroy();
finalize(); finalize();
......
...@@ -8,6 +8,7 @@ add_library( ...@@ -8,6 +8,7 @@ add_library(
ConsoleManager.cpp ConsoleManager.cpp
Demangle.cpp Demangle.cpp
Exceptions.cpp Exceptions.cpp
ExecutionStatManager.cpp
FPEManager.cpp FPEManager.cpp
Messenger.cpp Messenger.cpp
Partitioner.cpp Partitioner.cpp
......
#include <utils/ExecutionStatManager.hpp>
#include <utils/Exceptions.hpp>
#include <utils/Messenger.hpp>
#include <cmath>
#include <rang.hpp>
#include <sys/resource.h>
ExecutionStatManager* ExecutionStatManager::m_instance = nullptr;
void
ExecutionStatManager::_printMaxResidentMemory() const
{
const std::vector<std::string> units = {"B", "KB", "MB", "GB", "TB", "PB", "EB"};
double count = [] {
rusage u;
getrusage(RUSAGE_SELF, &u);
return u.ru_maxrss * 1024;
}();
size_t i_unit = 0;
while ((count >= 1024) and (i_unit < units.size())) {
++i_unit;
count /= 1024;
}
std::cout << rang::style::bold << "Maximum memory: " << rang::fgB::cyan << count << rang::style::reset
<< rang::style::bold << units[i_unit] << rang::style::reset << '\n';
}
void
ExecutionStatManager::_printElapseTime() const
{
std::cout << rang::style::bold << "Execution time: " << rang::fgB::cyan << m_instance->m_elapse_time.seconds()
<< rang::style::reset << rang::style::bold << 's' << rang::style::reset << rang::fg::reset << '\n';
}
void
ExecutionStatManager::_printTotalCPUTime() const
{
rusage u;
getrusage(RUSAGE_SELF, &u);
double total_cpu_time = u.ru_utime.tv_sec + u.ru_stime.tv_sec + (u.ru_utime.tv_usec + u.ru_stime.tv_usec) * 1E-6;
std::cout << rang::style::bold << "Total CPU time: " << rang::fgB::cyan << total_cpu_time << rang::style::reset
<< rang::style::bold << 's' << rang::style::reset << rang::fg::reset << '\n';
std::cout << " Using " << parallel::allReduceSum(Kokkos::DefaultHostExecutionSpace::concurrency())
<< " threads distributed over " << parallel::size() << " processes"
<< "\n";
}
void
ExecutionStatManager::printInfo()
{
std::cout << "----------------- " << rang::fgB::green << "pugs exec stats" << rang::fg::reset
<< " ---------------------\n";
ExecutionStatManager::m_instance->_printElapseTime();
ExecutionStatManager::m_instance->_printTotalCPUTime();
ExecutionStatManager::m_instance->_printMaxResidentMemory();
}
void
ExecutionStatManager::create()
{
if (ExecutionStatManager::m_instance == nullptr) {
ExecutionStatManager::m_instance = new ExecutionStatManager;
} else {
throw UnexpectedError("ExecutionStatManager already created");
}
}
void
ExecutionStatManager::destroy()
{
// One allows multiple destruction to handle unexpected code exit
if (ExecutionStatManager::m_instance != nullptr) {
delete ExecutionStatManager::m_instance;
ExecutionStatManager::m_instance = nullptr;
}
}
#ifndef EXECUTION_STAT_MANAGER_HPP
#define EXECUTION_STAT_MANAGER_HPP
#include <utils/Timer.hpp>
class ExecutionStatManager
{
private:
static ExecutionStatManager* m_instance;
Timer m_elapse_time;
void _printMaxResidentMemory() const;
void _printElapseTime() const;
void _printTotalCPUTime() const;
explicit ExecutionStatManager() = default;
ExecutionStatManager(ExecutionStatManager&&) = delete;
ExecutionStatManager(const ExecutionStatManager&) = delete;
~ExecutionStatManager() = default;
public:
static void printInfo();
static void create();
static void destroy();
};
#endif // EXECUTION_STAT_MANAGER_HPP
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment