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