diff --git a/CMakeLists.txt b/CMakeLists.txt index 15bafd081654175089b44f3b4cd6ba46afa053f2..dde6385a38a7c04261df1da786f2b2250ae57395 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,8 +12,10 @@ include(CheckNotInSources) project (Pastis) +# Rang (colors? Useless thus necessary!) +include_directories(${CMAKE_SOURCE_DIR}/packages/rang/include) + # CLI11 -add_subdirectory(${CMAKE_SOURCE_DIR}/packages/CLI11) include_directories(${CMAKE_SOURCE_DIR}/packages/CLI11/include) # Kokkos diff --git a/main.cpp b/main.cpp index 4daf0270a5efee866732203b5fbbae946c592492..eeab23dc1ef6bcf101d0403d82d55045bda0112a 100644 --- a/main.cpp +++ b/main.cpp @@ -1,29 +1,41 @@ #include <iostream> #include <Kokkos_Core.hpp> #include <RevisionInfo.hpp> +#include <rang.hpp> #include <CLI/CLI.hpp> int main(int argc, char *argv[]) { - std::cout << "It's pastis time!\n"; + CLI::App app{"Pastis help"}; + + long number = 1000; + app.add_option("-n,--number", number, "A big integer"); + + CLI11_PARSE(app, argc, argv); std::cout << "--------------------- git info --------------------------\n"; - std::cout << "* version: " << RevisionInfo::version() << '\n'; - std::cout << "* head: " << RevisionInfo::head() << '\n'; - std::cout << "* hash: " << RevisionInfo::hash() << " (" << RevisionInfo::isClean() << ")\n"; + std::cout << "* version: " << rang::style::bold << RevisionInfo::version() << rang::style::reset << '\n'; + std::cout << "* HEAD: " << rang::style::underline << RevisionInfo::head() << rang::style::reset << '\n'; + std::cout << "* hash: " << RevisionInfo::hash() << " ("; + if (RevisionInfo::isClean()) { + std::cout << rang::fgB::green << "clean" << rang::fg::reset; + } else { + std::cout << rang::fgB::red << "dirty" << rang::fg::reset; + } + std::cout << ")\n"; std::cout << "---------------------------------------------------------\n"; Kokkos::initialize(argc, argv); Kokkos::DefaultExecutionSpace::print_configuration(std::cout); - if (argc < 2) { - fprintf(stderr, "Usage: %s [<kokkos_options>] <size>\n", argv[0]); - Kokkos::finalize(); - exit(1); - } + // if (argc < 2) { + // fprintf(stderr, "Usage: %s [<kokkos_options>] <size>\n", argv[0]); + // Kokkos::finalize(); + // exit(1); + // } - const long n = strtol(argv[1], NULL, 10); + const long& n = number; std::cout << "Number of even integers from 0 to " << n - 1 << '\n'; Kokkos::Timer timer; @@ -31,12 +43,12 @@ int main(int argc, char *argv[]) // Compute the number of even integers from 0 to n-1, in parallel. long count = 0; - Kokkos::parallel_reduce(n, KOKKOS_LAMBDA (const long i, long& lcount) { + Kokkos::parallel_reduce(n, [=] (const long i, long& lcount) { lcount += (i % 2) == 0; }, count); double count_time = timer.seconds(); - std::cout << " Parallel: " << count << " " << count_time << '\n'; + std::cout << " Parallel: " << count << " " << rang::style::bold << count_time << rang::style::reset << '\n'; timer.reset(); @@ -46,9 +58,8 @@ int main(int argc, char *argv[]) seq_count += (i % 2) == 0; } - int k =3; count_time = timer.seconds(); - std::cout << "Sequential: " << seq_count << ' ' << count_time << '\n'; + std::cout << "Sequential: " << seq_count << ' ' << rang::style::bold << count_time << rang::style::reset << '\n'; Kokkos::finalize(); return (count == seq_count) ? 0 : -1; diff --git a/utils/CMakeLists.txt b/utils/CMakeLists.txt index e08c25820a511ec82ceefe278c068674ff9343a1..3846348f1f7916019026ea2ea3d65bca1850aaf2 100644 --- a/utils/CMakeLists.txt +++ b/utils/CMakeLists.txt @@ -4,9 +4,11 @@ include_directories(${CMAKE_CURRENT_BINARY_DIR}) list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../cmake/cmake-modules") include(GetGitRevisionDescription) -git_describe(PASTISVERSION "--abbrev=0") -get_git_head_revision(PASTISHEAD PASTISHASH) -git_local_changes(PASTISHASLOCALCHANGES) +git_describe(PASTIS_VERSION "--abbrev=0") +get_git_head_revision(PASTIS_HEAD PASTIS_HASH) +git_local_changes(PASTIS_HAS_LOCAL_CHANGES) + +set(PASTIS_IS_CLEAN ${PASTIS_HAS_LOCAL_CHANGES} STREQ "CLEAN") add_custom_target(git_revision ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/pastis_git_revision.hpp) set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/pastis_git_revision.hpp PROPERTIES GENERATED TRUE HEADER_FILE_ONLY TRUE) diff --git a/utils/RevisionInfo.cpp b/utils/RevisionInfo.cpp index 712aa5152ffb072ac291456b006240c5e564207c..cd4a303accbaad42a2173400d634b8c2456d815f 100644 --- a/utils/RevisionInfo.cpp +++ b/utils/RevisionInfo.cpp @@ -3,20 +3,24 @@ std::string RevisionInfo::version() { - return PASTISVERSION; + return PASTIS_VERSION; } std::string RevisionInfo::head() { - return PASTISHEAD; + return PASTIS_HEAD; } std::string RevisionInfo::hash() { - return PASTISHASH; + return PASTIS_HASH; } -std::string RevisionInfo::isClean() +bool RevisionInfo::isClean() { - return PASTISHASLOCALCHANGES; +#if PASTIS_IS_CLEAN + return true; +#else + return false; +#endif } diff --git a/utils/RevisionInfo.hpp b/utils/RevisionInfo.hpp index 57219226b6fff90ca11e590f25f0816788bb56ea..4f1fee3b0e3f36c8f01ebaec78fc3c2b7c0bd4bc 100644 --- a/utils/RevisionInfo.hpp +++ b/utils/RevisionInfo.hpp @@ -8,7 +8,7 @@ struct RevisionInfo static std::string version(); static std::string head(); static std::string hash(); - static std::string isClean(); + static bool isClean(); }; #endif // REVISION_INFO_HPP diff --git a/utils/pastis_git_revision.hpp.in b/utils/pastis_git_revision.hpp.in index 0398abebe6b4d43ba155e5e7ad47c4dcc2443e0b..067456974be1ab1e8a225e19987fd9a5767a7403 100644 --- a/utils/pastis_git_revision.hpp.in +++ b/utils/pastis_git_revision.hpp.in @@ -1,9 +1,9 @@ #ifndef GIT_REVISION_HPP #define GIT_REVISION_HPP -#define PASTISVERSION "@PASTISVERSION@" -#define PASTISHEAD "@PASTISHEAD@" -#define PASTISHASH "@PASTISHASH@" -#define PASTISHASLOCALCHANGES "@PASTISHASLOCALCHANGES@" +#define PASTIS_VERSION "@PASTIS_VERSION@" +#define PASTIS_HEAD "@PASTIS_HEAD@" +#define PASTIS_HASH "@PASTIS_HASH@" +#define PASTIS_HAS_LOCAL_CHANGES "@PASTIS_HAS_LOCAL_CHANGES@" #endif // GIT_REVISION_HPP