From ba7dae2d497a997099a50b17bbc24c3f46bcdbff Mon Sep 17 00:00:00 2001 From: Carlos Mastalli <carlos.mastalli@laas.fr> Date: Mon, 9 Sep 2019 13:48:35 +0200 Subject: [PATCH] [benchmark] Added times in milliseconds --- benchmark/lqr.cpp | 45 +++++++++++++++++++++++++++++++---- benchmark/unicycle.cpp | 29 +++++++++++++++++----- src/core/optctrl/shooting.cpp | 2 +- 3 files changed, 64 insertions(+), 12 deletions(-) diff --git a/benchmark/lqr.cpp b/benchmark/lqr.cpp index 43b4d995..19d9f610 100644 --- a/benchmark/lqr.cpp +++ b/benchmark/lqr.cpp @@ -40,17 +40,52 @@ int main() { } // Solving the optimal control problem - std::clock_t c_start, c_end; + struct timespec start, finish; + double elapsed; Eigen::ArrayXd duration(T); for (unsigned int i = 0; i < T; ++i) { - c_start = std::clock(); + clock_gettime(CLOCK_MONOTONIC, &start); ddp.solve(xs, us, MAXITER); - c_end = std::clock(); - duration[i] = 1e3 * (double)(c_end - c_start) / CLOCKS_PER_SEC; + clock_gettime(CLOCK_MONOTONIC, &finish); + elapsed = (finish.tv_sec - start.tv_sec) * 1000000.0; + elapsed += (finish.tv_nsec - start.tv_nsec) / 1000.0; + duration[i] = elapsed / 1000.; } double avrg_duration = duration.sum() / T; double min_duration = duration.minCoeff(); double max_duration = duration.maxCoeff(); - std::cout << "CPU time [ms]: " << avrg_duration << " (" << min_duration << "-" << max_duration << ")" << std::endl; + std::cout << "Wall time [mu]: " << avrg_duration << " (" << min_duration << "-" << max_duration << ")" << std::endl; + + // Running calc + for (unsigned int i = 0; i < T; ++i) { + clock_gettime(CLOCK_MONOTONIC, &start); + problem.calc(xs, us); + clock_gettime(CLOCK_MONOTONIC, &finish); + elapsed = (finish.tv_sec - start.tv_sec) * 1000000.0; + elapsed += (finish.tv_nsec - start.tv_nsec) / 1000.0; + duration[i] = elapsed / 1000.; + } + + avrg_duration = duration.sum() / T; + min_duration = duration.minCoeff(); + max_duration = duration.maxCoeff(); + std::cout << "Wall time calc [ms]: " << avrg_duration << " (" << min_duration << "-" << max_duration << ")" + << std::endl; + + // Running calcDiff + for (unsigned int i = 0; i < T; ++i) { + clock_gettime(CLOCK_MONOTONIC, &start); + problem.calcDiff(xs, us); + clock_gettime(CLOCK_MONOTONIC, &finish); + elapsed = (finish.tv_sec - start.tv_sec) * 1000000.0; + elapsed += (finish.tv_nsec - start.tv_nsec) / 1000.0; + duration[i] = elapsed / 1000.; + } + + avrg_duration = duration.sum() / T; + min_duration = duration.minCoeff(); + max_duration = duration.maxCoeff(); + std::cout << "Wall time calcDiff [ms]: " << avrg_duration << " (" << min_duration << "-" << max_duration << ")" + << std::endl; } \ No newline at end of file diff --git a/benchmark/unicycle.cpp b/benchmark/unicycle.cpp index 1790494f..92a72656 100644 --- a/benchmark/unicycle.cpp +++ b/benchmark/unicycle.cpp @@ -39,9 +39,10 @@ int main() { cbs.push_back(new CallbackVerbose()); ddp.setCallbacks(cbs); } + + // Solving the optimal control problem struct timespec start, finish; double elapsed; - // Solving the optimal control problem Eigen::ArrayXd duration(T); for (unsigned int i = 0; i < T; ++i) { clock_gettime(CLOCK_MONOTONIC, &start); @@ -49,28 +50,44 @@ int main() { clock_gettime(CLOCK_MONOTONIC, &finish); elapsed = (finish.tv_sec - start.tv_sec) * 1000000.0; elapsed += (finish.tv_nsec - start.tv_nsec) / 1000.0; - - duration[i] = elapsed; // in us + duration[i] = elapsed / 1000.; } double avrg_duration = duration.sum() / T; double min_duration = duration.minCoeff(); double max_duration = duration.maxCoeff(); - std::cout << "Wall time solve [us]: " << avrg_duration << " (" << min_duration << "-" << max_duration << ")" + std::cout << "Wall time solve [ms]: " << avrg_duration << " (" << min_duration << "-" << max_duration << ")" + << std::endl; + + // Running calc + for (unsigned int i = 0; i < T; ++i) { + clock_gettime(CLOCK_MONOTONIC, &start); + problem.calc(xs, us); + clock_gettime(CLOCK_MONOTONIC, &finish); + elapsed = (finish.tv_sec - start.tv_sec) * 1000000.0; + elapsed += (finish.tv_nsec - start.tv_nsec) / 1000.0; + duration[i] = elapsed / 1000.; + } + + avrg_duration = duration.sum() / T; + min_duration = duration.minCoeff(); + max_duration = duration.maxCoeff(); + std::cout << "Wall time calc [ms]: " << avrg_duration << " (" << min_duration << "-" << max_duration << ")" << std::endl; + // Running calcDiff for (unsigned int i = 0; i < T; ++i) { clock_gettime(CLOCK_MONOTONIC, &start); problem.calcDiff(xs, us); clock_gettime(CLOCK_MONOTONIC, &finish); elapsed = (finish.tv_sec - start.tv_sec) * 1000000.0; elapsed += (finish.tv_nsec - start.tv_nsec) / 1000.0; - duration[i] = elapsed; // in us + duration[i] = elapsed / 1000.; } avrg_duration = duration.sum() / T; min_duration = duration.minCoeff(); max_duration = duration.maxCoeff(); - std::cout << "Wall time calcDiff [us]: " << avrg_duration << " (" << min_duration << "-" << max_duration << ")" + std::cout << "Wall time calcDiff [ms]: " << avrg_duration << " (" << min_duration << "-" << max_duration << ")" << std::endl; } diff --git a/src/core/optctrl/shooting.cpp b/src/core/optctrl/shooting.cpp index 04ef09e4..b3f18543 100644 --- a/src/core/optctrl/shooting.cpp +++ b/src/core/optctrl/shooting.cpp @@ -10,7 +10,7 @@ #include <iostream> #ifdef WITH_MULTITHREADING #include <omp.h> -#define NUM_THREADS NTHREADS +#define NUM_THREADS WITH_NTHREADS #endif // WITH_MULTITHREADING namespace crocoddyl { -- GitLab