From 5de1375bedf063ca6f6f98e03f15afe9d1e576a1 Mon Sep 17 00:00:00 2001 From: Paul Jonas Jost Date: Wed, 24 Feb 2021 11:42:49 +0100 Subject: [PATCH 1/8] enabled commandline with number of indices as argument --- include/parpeamici/optimizationApplication.h | 22 +++++++++++--------- src/parpeamici/optimizationApplication.cpp | 16 ++++++++------ 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/include/parpeamici/optimizationApplication.h b/include/parpeamici/optimizationApplication.h index ba60d16ab..1a7f4d1e9 100644 --- a/include/parpeamici/optimizationApplication.h +++ b/include/parpeamici/optimizationApplication.h @@ -149,16 +149,17 @@ class OptimizationApplication { protected: // command line option parsing const char *shortOptions = "dhvmt:o:s:"; - struct option const longOptions[9] = { - {"debug", no_argument, nullptr, 'd'}, - {"print-worklist", no_argument, nullptr, 'p'}, - {"help", no_argument, nullptr, 'h'}, - {"version", no_argument, nullptr, 'v'}, - {"mpi", no_argument, nullptr, 'm'}, - {"task", required_argument, nullptr, 't'}, - {"outfile-prefix", required_argument, nullptr, 'o'}, - {"first-start-idx", required_argument, nullptr, 's'}, - {nullptr, 0, nullptr, 0}}; + struct option const longOptions[10] = { + {"debug", no_argument, NULL, 'd'}, + {"print-worklist", no_argument, NULL, 'p'}, + {"help", no_argument, NULL, 'h'}, + {"version", no_argument, NULL, 'v'}, + {"mpi", no_argument, NULL, 'm'}, + {"task", required_argument, NULL, 't'}, + {"gradient-check", required_argument, NULL, 'g'}, + {"outfile-prefix", required_argument, NULL, 'o'}, + {"first-start-idx", required_argument, NULL, 's'}, + {NULL, 0, NULL, 0}}; enum class OperationType { parameterEstimation, @@ -175,6 +176,7 @@ class OptimizationApplication { std::unique_ptr problem; H5::H5File h5File = 0; OperationType operationType = OperationType::parameterEstimation; + int num_parameter_checks = 1; LoadBalancerMaster loadBalancer; bool withMPI = false; }; diff --git a/src/parpeamici/optimizationApplication.cpp b/src/parpeamici/optimizationApplication.cpp index 4f7c068da..aca932e0d 100644 --- a/src/parpeamici/optimizationApplication.cpp +++ b/src/parpeamici/optimizationApplication.cpp @@ -110,6 +110,9 @@ int OptimizationApplication::parseCliOptionsPostMpiInit(int argc, char **argv) { if (strcmp(optarg, "gradient_check") == 0) operationType = OperationType::gradientCheck; break; + case 'g': + operationType = OperationType::gradientCheck; + num_parameter_checks = std::stoi(optarg); case 'o': resultFileName = processResultFilenameCommandLineArgument(optarg); break; @@ -230,9 +233,8 @@ int OptimizationApplication::run(int argc, char **argv) { void OptimizationApplication::runMaster() { switch (operationType) { case OperationType::gradientCheck: { - const int numParameterIndicesToCheck = 10000; - optimizationProblemGradientCheckMultiEps( - problem.get(), numParameterIndicesToCheck); + optimizationProblemGradientCheckMultiEps(problem.get(), + num_parameter_checks); break; } case OperationType::parameterEstimation: @@ -266,8 +268,10 @@ void OptimizationApplication::runSingleProcess() { switch (operationType) { case OperationType::gradientCheck: { const int numParameterIndicesToCheck = 10000; - optimizationProblemGradientCheckMultiEps( - problem.get(), numParameterIndicesToCheck); + const double epsilon = 1e-5; + optimizationProblemGradientCheck(problem.get(), + numParameterIndicesToCheck, + epsilon); break; } case OperationType::parameterEstimation: @@ -357,7 +361,7 @@ void saveTotalCpuTime(H5::H5File const& file, const double timeInSeconds) { hsize_t dims[1] = {1}; - [[maybe_unused]] auto lock = hdf5MutexGetLock(); + auto lock = hdf5MutexGetLock(); //std::string pathStr = rootPath + "/totalTimeInSec"; std::string pathStr = "/totalTimeInSec"; From cdf4ef8ac84e8c19321edd6e8152510716c67943 Mon Sep 17 00:00:00 2001 From: PaulJonasJost Date: Thu, 11 Mar 2021 10:55:51 +0100 Subject: [PATCH 2/8] Enabled parameterIndices as command line argument --- include/parpeamici/optimizationApplication.h | 20 ++++++++++---------- src/parpeamici/optimizationApplication.cpp | 18 ++++++++++++++++-- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/include/parpeamici/optimizationApplication.h b/include/parpeamici/optimizationApplication.h index 1a7f4d1e9..f51666db2 100644 --- a/include/parpeamici/optimizationApplication.h +++ b/include/parpeamici/optimizationApplication.h @@ -150,16 +150,16 @@ class OptimizationApplication { // command line option parsing const char *shortOptions = "dhvmt:o:s:"; struct option const longOptions[10] = { - {"debug", no_argument, NULL, 'd'}, - {"print-worklist", no_argument, NULL, 'p'}, - {"help", no_argument, NULL, 'h'}, - {"version", no_argument, NULL, 'v'}, - {"mpi", no_argument, NULL, 'm'}, - {"task", required_argument, NULL, 't'}, - {"gradient-check", required_argument, NULL, 'g'}, - {"outfile-prefix", required_argument, NULL, 'o'}, - {"first-start-idx", required_argument, NULL, 's'}, - {NULL, 0, NULL, 0}}; + {"debug", no_argument, nullptr, 'd'}, + {"print-worklist", no_argument, nullptr, 'p'}, + {"help", no_argument, nullptr, 'h'}, + {"version", no_argument, nullptr, 'v'}, + {"mpi", no_argument, nullptr, 'm'}, + {"task", required_argument, nullptr, 't'}, + {"gradient-check", required_argument, nullptr, 'g'}, + {"outfile-prefix", required_argument, nullptr, 'o'}, + {"first-start-idx", required_argument, nullptr, 's'}, + {nullptr, 0, nullptr, 0}}; enum class OperationType { parameterEstimation, diff --git a/src/parpeamici/optimizationApplication.cpp b/src/parpeamici/optimizationApplication.cpp index aca932e0d..febb8d159 100644 --- a/src/parpeamici/optimizationApplication.cpp +++ b/src/parpeamici/optimizationApplication.cpp @@ -19,6 +19,8 @@ #include #include #include +#include +#include namespace parpe { @@ -112,7 +114,19 @@ int OptimizationApplication::parseCliOptionsPostMpiInit(int argc, char **argv) { break; case 'g': operationType = OperationType::gradientCheck; - num_parameter_checks = std::stoi(optarg); + /* + Assuming the next argument is of the type n1,n2,...,nX. + This will be a string of comma separated ints, that need + to be converted to std::vector. + */ + std::stringstream ss(optarg); + std::vector para_ind; + + for(int i; ss >> i;){ + para_ind.push_back(i); + if(ss.peek()==',') + ss.ignore(); + } case 'o': resultFileName = processResultFilenameCommandLineArgument(optarg); break; @@ -361,7 +375,7 @@ void saveTotalCpuTime(H5::H5File const& file, const double timeInSeconds) { hsize_t dims[1] = {1}; - auto lock = hdf5MutexGetLock(); + [[maybe_unused]] auto lock = hdf5MutexGetLock(); //std::string pathStr = rootPath + "/totalTimeInSec"; std::string pathStr = "/totalTimeInSec"; From 22622fce10df38e687200929afcf66c8851c97d0 Mon Sep 17 00:00:00 2001 From: PaulJonasJost Date: Tue, 23 Mar 2021 13:59:18 +0100 Subject: [PATCH 3/8] Fix of jump case I --- src/parpeamici/optimizationApplication.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/parpeamici/optimizationApplication.cpp b/src/parpeamici/optimizationApplication.cpp index febb8d159..77606ba56 100644 --- a/src/parpeamici/optimizationApplication.cpp +++ b/src/parpeamici/optimizationApplication.cpp @@ -112,7 +112,7 @@ int OptimizationApplication::parseCliOptionsPostMpiInit(int argc, char **argv) { if (strcmp(optarg, "gradient_check") == 0) operationType = OperationType::gradientCheck; break; - case 'g': + case 'g': { operationType = OperationType::gradientCheck; /* Assuming the next argument is of the type n1,n2,...,nX. @@ -122,11 +122,12 @@ int OptimizationApplication::parseCliOptionsPostMpiInit(int argc, char **argv) { std::stringstream ss(optarg); std::vector para_ind; - for(int i; ss >> i;){ + for (int i; ss >> i;) { para_ind.push_back(i); - if(ss.peek()==',') + if (ss.peek() == ',') ss.ignore(); } + } case 'o': resultFileName = processResultFilenameCommandLineArgument(optarg); break; From ab4f30b6134fc3bd8cb66a34f1f6c768c35b0d24 Mon Sep 17 00:00:00 2001 From: PaulJonasJost Date: Wed, 24 Mar 2021 13:23:37 +0100 Subject: [PATCH 4/8] Updated function call in CLI --- src/parpeamici/optimizationApplication.cpp | 4 +++- src/parpeoptimization/optimizationProblem.cpp | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/parpeamici/optimizationApplication.cpp b/src/parpeamici/optimizationApplication.cpp index 247dbadd0..4da8c554f 100644 --- a/src/parpeamici/optimizationApplication.cpp +++ b/src/parpeamici/optimizationApplication.cpp @@ -248,8 +248,10 @@ int OptimizationApplication::run(int argc, char **argv) { void OptimizationApplication::runMaster() { switch (operationType) { case OperationType::gradientCheck: { + std::vector multi_eps {1e-1, 1e-3, 1e-4, 1e-5, 1e-7}; optimizationProblemGradientCheckMultiEps(problem.get(), - num_parameter_checks); + para_ind, + multi_eps); break; } case OperationType::parameterEstimation: diff --git a/src/parpeoptimization/optimizationProblem.cpp b/src/parpeoptimization/optimizationProblem.cpp index bc0daf5c7..b11b474dd 100644 --- a/src/parpeoptimization/optimizationProblem.cpp +++ b/src/parpeoptimization/optimizationProblem.cpp @@ -58,7 +58,7 @@ void optimizationProblemGradientCheckMultiEps(OptimizationProblem *problem, int numParameterIndicesToCheck ) { // set eps - std::vector multi_eps {1e-1, 1e-3, 1e-5, 1e-7, 1e-9}; + std::vector multi_eps {1e-1, 1e-3, 1e-4, 1e-5, 1e-7}; // setting the number of parameters to the minimum of // numParamaterIndicesToCheck and dimension of the problem From bb2a08333fa0670c7be3efd4880f39e0214551a8 Mon Sep 17 00:00:00 2001 From: PaulJonasJost Date: Wed, 24 Mar 2021 13:44:10 +0100 Subject: [PATCH 5/8] make para ind datamember of OptimizationApplication --- include/parpeamici/optimizationApplication.h | 2 ++ src/parpeamici/optimizationApplication.cpp | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/include/parpeamici/optimizationApplication.h b/include/parpeamici/optimizationApplication.h index cdb5111da..c38014e03 100644 --- a/include/parpeamici/optimizationApplication.h +++ b/include/parpeamici/optimizationApplication.h @@ -166,6 +166,8 @@ class OptimizationApplication { gradientCheck }; + std::vector para_ind {}; + std::string dataFileName; std::string resultFileName; diff --git a/src/parpeamici/optimizationApplication.cpp b/src/parpeamici/optimizationApplication.cpp index 4da8c554f..f23087deb 100644 --- a/src/parpeamici/optimizationApplication.cpp +++ b/src/parpeamici/optimizationApplication.cpp @@ -120,7 +120,6 @@ int OptimizationApplication::parseCliOptionsPostMpiInit(int argc, char **argv) { to be converted to std::vector. */ std::stringstream ss(optarg); - std::vector para_ind; for (int i; ss >> i;) { para_ind.push_back(i); From ec4b5c323df4589369bd047b7358a2ce69e7652a Mon Sep 17 00:00:00 2001 From: PaulJonasJost Date: Wed, 24 Mar 2021 13:52:28 +0100 Subject: [PATCH 6/8] remove code smells --- src/parpeamici/optimizationApplication.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/parpeamici/optimizationApplication.cpp b/src/parpeamici/optimizationApplication.cpp index f23087deb..968e39fba 100644 --- a/src/parpeamici/optimizationApplication.cpp +++ b/src/parpeamici/optimizationApplication.cpp @@ -112,7 +112,7 @@ int OptimizationApplication::parseCliOptionsPostMpiInit(int argc, char **argv) { if (strcmp(optarg, "gradient_check") == 0) operationType = OperationType::gradientCheck; break; - case 'g': { + case 'g': operationType = OperationType::gradientCheck; /* Assuming the next argument is of the type n1,n2,...,nX. @@ -126,7 +126,7 @@ int OptimizationApplication::parseCliOptionsPostMpiInit(int argc, char **argv) { if (ss.peek() == ',') ss.ignore(); } - } + break; case 'o': resultFileName = processResultFilenameCommandLineArgument(optarg); break; From 1e560db3efbc2fc6ebaa3341c37793f4bc3390e5 Mon Sep 17 00:00:00 2001 From: PaulJonasJost Date: Wed, 24 Mar 2021 14:06:03 +0100 Subject: [PATCH 7/8] corrected jump to case label error --- src/parpeamici/optimizationApplication.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/parpeamici/optimizationApplication.cpp b/src/parpeamici/optimizationApplication.cpp index 968e39fba..8d48030da 100644 --- a/src/parpeamici/optimizationApplication.cpp +++ b/src/parpeamici/optimizationApplication.cpp @@ -112,7 +112,7 @@ int OptimizationApplication::parseCliOptionsPostMpiInit(int argc, char **argv) { if (strcmp(optarg, "gradient_check") == 0) operationType = OperationType::gradientCheck; break; - case 'g': + case 'g': { operationType = OperationType::gradientCheck; /* Assuming the next argument is of the type n1,n2,...,nX. @@ -126,7 +126,7 @@ int OptimizationApplication::parseCliOptionsPostMpiInit(int argc, char **argv) { if (ss.peek() == ',') ss.ignore(); } - break; + } break; case 'o': resultFileName = processResultFilenameCommandLineArgument(optarg); break; From 3f6cdb133ddae864ec4f26e18a4b13574e8ef7b7 Mon Sep 17 00:00:00 2001 From: Simon Merkt Date: Thu, 29 Apr 2021 10:31:12 +0200 Subject: [PATCH 8/8] fix CLI grad check --- include/parpeamici/optimizationApplication.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/parpeamici/optimizationApplication.h b/include/parpeamici/optimizationApplication.h index c38014e03..f7f470fe6 100644 --- a/include/parpeamici/optimizationApplication.h +++ b/include/parpeamici/optimizationApplication.h @@ -148,7 +148,7 @@ class OptimizationApplication { protected: // command line option parsing - const char *shortOptions = "dhvmt:o:s:"; + const char *shortOptions = "dhvmt:o:s:g:"; struct option const longOptions[10] = { {"debug", no_argument, nullptr, 'd'}, {"print-worklist", no_argument, nullptr, 'p'},