5 changed files with 244 additions and 207 deletions
-
4src/storm.cpp
-
162src/utility/cli.cpp
-
209src/utility/cli.h
-
35src/utility/initialize.cpp
-
41src/utility/initialize.h
@ -0,0 +1,162 @@ |
|||||
|
#include "cli.h"
|
||||
|
|
||||
|
// Includes for the linked libraries and versions header.
|
||||
|
#ifdef STORM_HAVE_INTELTBB
|
||||
|
# include "tbb/tbb_stddef.h"
|
||||
|
#endif
|
||||
|
#ifdef STORM_HAVE_GLPK
|
||||
|
# include "glpk.h"
|
||||
|
#endif
|
||||
|
#ifdef STORM_HAVE_GUROBI
|
||||
|
# include "gurobi_c.h"
|
||||
|
#endif
|
||||
|
#ifdef STORM_HAVE_Z3
|
||||
|
# include "z3.h"
|
||||
|
#endif
|
||||
|
#ifdef STORM_HAVE_MSAT
|
||||
|
# include "mathsat.h"
|
||||
|
#endif
|
||||
|
#ifdef STORM_HAVE_CUDA
|
||||
|
#include <cuda.h>
|
||||
|
#include <cuda_runtime.h>
|
||||
|
#endif
|
||||
|
|
||||
|
#ifdef STORM_HAVE_SMTRAT
|
||||
|
#include "lib/smtrat.h"
|
||||
|
#endif
|
||||
|
|
||||
|
namespace storm { |
||||
|
namespace utility { |
||||
|
namespace cli { |
||||
|
std::string getCurrentWorkingDirectory() { |
||||
|
char temp[512]; |
||||
|
return (GetCurrentDir(temp, 512 - 1) ? std::string(temp) : std::string("")); |
||||
|
} |
||||
|
|
||||
|
void printHeader(const int argc, const char* argv[]) { |
||||
|
std::cout << "StoRM" << std::endl; |
||||
|
std::cout << "--------" << std::endl << std::endl; |
||||
|
|
||||
|
|
||||
|
// std::cout << storm::utility::StormVersion::longVersionString() << std::endl;
|
||||
|
#ifdef STORM_HAVE_INTELTBB
|
||||
|
std::cout << "Linked with Intel Threading Building Blocks v" << TBB_VERSION_MAJOR << "." << TBB_VERSION_MINOR << " (Interface version " << TBB_INTERFACE_VERSION << ")." << std::endl; |
||||
|
#endif
|
||||
|
#ifdef STORM_HAVE_GLPK
|
||||
|
std::cout << "Linked with GNU Linear Programming Kit v" << GLP_MAJOR_VERSION << "." << GLP_MINOR_VERSION << "." << std::endl; |
||||
|
#endif
|
||||
|
#ifdef STORM_HAVE_GUROBI
|
||||
|
std::cout << "Linked with Gurobi Optimizer v" << GRB_VERSION_MAJOR << "." << GRB_VERSION_MINOR << "." << GRB_VERSION_TECHNICAL << "." << std::endl; |
||||
|
#endif
|
||||
|
#ifdef STORM_HAVE_Z3
|
||||
|
unsigned int z3Major, z3Minor, z3BuildNumber, z3RevisionNumber; |
||||
|
Z3_get_version(&z3Major, &z3Minor, &z3BuildNumber, &z3RevisionNumber); |
||||
|
std::cout << "Linked with Microsoft Z3 Optimizer v" << z3Major << "." << z3Minor << " Build " << z3BuildNumber << " Rev " << z3RevisionNumber << "." << std::endl; |
||||
|
#endif
|
||||
|
#ifdef STORM_HAVE_MSAT
|
||||
|
char* msatVersion = msat_get_version(); |
||||
|
std::cout << "Linked with " << msatVersion << "." << std::endl; |
||||
|
msat_free(msatVersion); |
||||
|
#endif
|
||||
|
#ifdef STORM_HAVE_SMTRAT
|
||||
|
std::cout << "Linked with SMT-RAT " << SMTRAT_VERSION << "." << std::endl; |
||||
|
#endif
|
||||
|
#ifdef STORM_HAVE_CARL
|
||||
|
std::cout << "Linked with CARL." << std::endl; |
||||
|
// TODO get version string
|
||||
|
#endif
|
||||
|
|
||||
|
#ifdef STORM_HAVE_CUDA
|
||||
|
int deviceCount = 0; |
||||
|
cudaError_t error_id = cudaGetDeviceCount(&deviceCount); |
||||
|
|
||||
|
if (error_id == cudaSuccess) |
||||
|
{ |
||||
|
std::cout << "Compiled with CUDA support, "; |
||||
|
// This function call returns 0 if there are no CUDA capable devices.
|
||||
|
if (deviceCount == 0) |
||||
|
{ |
||||
|
std::cout<< "but there are no available device(s) that support CUDA." << std::endl; |
||||
|
} else |
||||
|
{ |
||||
|
std::cout << "detected " << deviceCount << " CUDA Capable device(s):" << std::endl; |
||||
|
} |
||||
|
|
||||
|
int dev, driverVersion = 0, runtimeVersion = 0; |
||||
|
|
||||
|
for (dev = 0; dev < deviceCount; ++dev) |
||||
|
{ |
||||
|
cudaSetDevice(dev); |
||||
|
cudaDeviceProp deviceProp; |
||||
|
cudaGetDeviceProperties(&deviceProp, dev); |
||||
|
|
||||
|
std::cout << "CUDA Device " << dev << ": \"" << deviceProp.name << "\"" << std::endl; |
||||
|
|
||||
|
// Console log
|
||||
|
cudaDriverGetVersion(&driverVersion); |
||||
|
cudaRuntimeGetVersion(&runtimeVersion); |
||||
|
std::cout << " CUDA Driver Version / Runtime Version " << driverVersion / 1000 << "." << (driverVersion % 100) / 10 << " / " << runtimeVersion / 1000 << "." << (runtimeVersion % 100) / 10 << std::endl; |
||||
|
std::cout << " CUDA Capability Major/Minor version number: " << deviceProp.major<<"."<<deviceProp.minor <<std::endl; |
||||
|
} |
||||
|
std::cout << std::endl; |
||||
|
} |
||||
|
else { |
||||
|
std::cout << "Compiled with CUDA support, but an error occured trying to find CUDA devices." << std::endl; |
||||
|
} |
||||
|
#endif
|
||||
|
|
||||
|
// "Compute" the command line argument string with which STORM was invoked.
|
||||
|
std::stringstream commandStream; |
||||
|
for (int i = 1; i < argc; ++i) { |
||||
|
commandStream << argv[i] << " "; |
||||
|
} |
||||
|
std::cout << "Command line arguments: " << commandStream.str() << std::endl; |
||||
|
std::cout << "Current working directory: " << getCurrentWorkingDirectory() << std::endl << std::endl; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
void printUsage() { |
||||
|
#ifndef WINDOWS
|
||||
|
struct rusage ru; |
||||
|
getrusage(RUSAGE_SELF, &ru); |
||||
|
|
||||
|
std::cout << "===== Statistics ==============================" << std::endl; |
||||
|
std::cout << "peak memory usage: " << ru.ru_maxrss/1024/1024 << "MB" << std::endl; |
||||
|
std::cout << "CPU time: " << ru.ru_utime.tv_sec << "." << std::setw(3) << std::setfill('0') << ru.ru_utime.tv_usec/1000 << " seconds" << std::endl; |
||||
|
std::cout << "===============================================" << std::endl; |
||||
|
#else
|
||||
|
HANDLE hProcess = GetCurrentProcess (); |
||||
|
FILETIME ftCreation, ftExit, ftUser, ftKernel; |
||||
|
PROCESS_MEMORY_COUNTERS pmc; |
||||
|
if (GetProcessMemoryInfo( hProcess, &pmc, sizeof(pmc))) { |
||||
|
std::cout << "Memory Usage: " << std::endl; |
||||
|
std::cout << "\tPageFaultCount: " << pmc.PageFaultCount << std::endl; |
||||
|
std::cout << "\tPeakWorkingSetSize: " << pmc.PeakWorkingSetSize << std::endl; |
||||
|
std::cout << "\tWorkingSetSize: " << pmc.WorkingSetSize << std::endl; |
||||
|
std::cout << "\tQuotaPeakPagedPoolUsage: " << pmc.QuotaPeakPagedPoolUsage << std::endl; |
||||
|
std::cout << "\tQuotaPagedPoolUsage: " << pmc.QuotaPagedPoolUsage << std::endl; |
||||
|
std::cout << "\tQuotaPeakNonPagedPoolUsage: " << pmc.QuotaPeakNonPagedPoolUsage << std::endl; |
||||
|
std::cout << "\tQuotaNonPagedPoolUsage: " << pmc.QuotaNonPagedPoolUsage << std::endl; |
||||
|
std::cout << "\tPagefileUsage:" << pmc.PagefileUsage << std::endl; |
||||
|
std::cout << "\tPeakPagefileUsage: " << pmc.PeakPagefileUsage << std::endl; |
||||
|
} |
||||
|
|
||||
|
GetProcessTimes (hProcess, &ftCreation, &ftExit, &ftKernel, &ftUser); |
||||
|
|
||||
|
ULARGE_INTEGER uLargeInteger; |
||||
|
uLargeInteger.LowPart = ftKernel.dwLowDateTime; |
||||
|
uLargeInteger.HighPart = ftKernel.dwHighDateTime; |
||||
|
double kernelTime = static_cast<double>(uLargeInteger.QuadPart) / 10000.0; // 100 ns Resolution to milliseconds
|
||||
|
uLargeInteger.LowPart = ftUser.dwLowDateTime; |
||||
|
uLargeInteger.HighPart = ftUser.dwHighDateTime; |
||||
|
double userTime = static_cast<double>(uLargeInteger.QuadPart) / 10000.0; |
||||
|
|
||||
|
std::cout << "CPU Time: " << std::endl; |
||||
|
std::cout << "\tKernel Time: " << std::setprecision(5) << kernelTime << "ms" << std::endl; |
||||
|
std::cout << "\tUser Time: " << std::setprecision(5) << userTime << "ms" << std::endl; |
||||
|
#endif
|
||||
|
} |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,35 @@ |
|||||
|
#include "initialize.h"
|
||||
|
|
||||
|
#include "src/settings/SettingsManager.h"
|
||||
|
|
||||
|
namespace storm { |
||||
|
namespace utility { |
||||
|
void initializeLogger() { |
||||
|
logger = log4cplus::Logger::getInstance(LOG4CPLUS_TEXT("main")); |
||||
|
log4cplus::SharedAppenderPtr consoleLogAppender(new log4cplus::ConsoleAppender()); |
||||
|
consoleLogAppender->setName("mainConsoleAppender"); |
||||
|
consoleLogAppender->setLayout(std::auto_ptr<log4cplus::Layout>(new log4cplus::PatternLayout("%-5p - %D{%H:%M:%S} (%r ms) - %b:%L: %m%n"))); |
||||
|
logger.addAppender(consoleLogAppender); |
||||
|
auto loglevel = storm::settings::debugSettings().isTraceSet() ? log4cplus::TRACE_LOG_LEVEL : storm::settings::debugSettings().isDebugSet() ? log4cplus::DEBUG_LOG_LEVEL : log4cplus::WARN_LOG_LEVEL; |
||||
|
logger.setLogLevel(loglevel); |
||||
|
consoleLogAppender->setThreshold(loglevel); |
||||
|
} |
||||
|
|
||||
|
void setUp() { |
||||
|
initializeLogger(); |
||||
|
std::cout.precision(10); |
||||
|
} |
||||
|
|
||||
|
void cleanUp() { |
||||
|
// Intentionally left empty.
|
||||
|
} |
||||
|
|
||||
|
void initializeFileLogging() { |
||||
|
log4cplus::SharedAppenderPtr fileLogAppender(new log4cplus::FileAppender(storm::settings::debugSettings().getLogfilename())); |
||||
|
fileLogAppender->setName("mainFileAppender"); |
||||
|
fileLogAppender->setLayout(std::auto_ptr<log4cplus::Layout>(new log4cplus::PatternLayout("%-5p - %D{%H:%M:%S} (%r ms) - %F:%L: %m%n"))); |
||||
|
logger.addAppender(fileLogAppender); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
} |
@ -0,0 +1,41 @@ |
|||||
|
#ifndef INITIALIZE_H |
||||
|
#define INITIALIZE_H |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
#include "log4cplus/logger.h" |
||||
|
#include "log4cplus/loggingmacros.h" |
||||
|
#include "log4cplus/consoleappender.h" |
||||
|
#include "log4cplus/fileappender.h" |
||||
|
log4cplus::Logger logger; |
||||
|
log4cplus::Logger printer; |
||||
|
|
||||
|
|
||||
|
namespace storm { |
||||
|
namespace utility { |
||||
|
/*! |
||||
|
* Initializes the logging framework and sets up logging to console. |
||||
|
*/ |
||||
|
void initializeLogger(); |
||||
|
|
||||
|
/*! |
||||
|
* Performs some necessary initializations. |
||||
|
*/ |
||||
|
void setUp(); |
||||
|
|
||||
|
/*! |
||||
|
* Performs some necessary clean-up. |
||||
|
*/ |
||||
|
void cleanUp(); |
||||
|
|
||||
|
/*! |
||||
|
* Sets up the logging to file. |
||||
|
*/ |
||||
|
void initializeFileLogging(); |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
|
||||
|
#endif /* INITIALIZE_H */ |
||||
|
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue