Browse Source
Refactored for faster compilation times.
Refactored for faster compilation times.
Former-commit-id: 14853d8f38
tempestpy_adaptions
sjunges
9 years ago
5 changed files with 244 additions and 207 deletions
-
4src/storm.cpp
-
162src/utility/cli.cpp
-
205src/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