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
Branches
Tags
1 merge request!175Print execution statistics at the end of execution
......@@ -4,6 +4,7 @@
#include <mesh/DualMeshManager.hpp>
#include <mesh/MeshDataManager.hpp>
#include <mesh/SynchronizerManager.hpp>
#include <utils/ExecutionStatManager.hpp>
#include <utils/PugsUtils.hpp>
#include <utils/RandomEngine.hpp>
......@@ -18,14 +19,18 @@ main(int argc, char* argv[])
MeshDataManager::create();
DualConnectivityManager::create();
DualMeshManager::create();
ExecutionStatManager::create();
parser(filename);
ExecutionStatManager::printInfo();
ExecutionStatManager::destroy();
DualMeshManager::destroy();
DualConnectivityManager::destroy();
MeshDataManager::destroy();
RandomEngine::destroy();
QuadratureManager::destroy();
RandomEngine::destroy();
SynchronizerManager::destroy();
finalize();
......
......@@ -8,6 +8,7 @@ add_library(
ConsoleManager.cpp
Demangle.cpp
Exceptions.cpp
ExecutionStatManager.cpp
FPEManager.cpp
Messenger.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