From 7c7b3032eb5fa8fb0332b7e91086800d3bcb398e Mon Sep 17 00:00:00 2001 From: Marco van Hulten Date: Fri, 15 Aug 2025 13:28:57 +0200 Subject: [PATCH 1/4] Enable CMake parallel build For components using the CMake build tool; tested with ParFlow. Four threads appears to be the sweet spot. Walltimes (ParFlow only): -j 1 -> 164 s -j 2 -> 100 s -j 4 -> 64 s -j 8 -> 50 s --- build_tsmp2.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build_tsmp2.sh b/build_tsmp2.sh index 7edd729..89ef37e 100755 --- a/build_tsmp2.sh +++ b/build_tsmp2.sh @@ -320,7 +320,7 @@ message "== CMAKE GENERATE PROJECT finished" message "CMAKE build:" message "cmake --build ${cmake_build_dir} |& tee -a $build_log" message "== CMAKE BUILD start" -cmake --build ${cmake_build_dir} |& tee -a $build_log +cmake --build ${cmake_build_dir} --parallel 4 |& tee -a $build_log message "== CMAKE BUILD finished" message "CMAKE install:" From d5e8316cc0a5b2532449e9e06901aea75b6203a1 Mon Sep 17 00:00:00 2001 From: Marco van Hulten Date: Mon, 18 Aug 2025 16:14:19 +0200 Subject: [PATCH 2/4] Revert "Enable CMake parallel build" This reverts commit 7c7b3032eb5fa8fb0332b7e91086800d3bcb398e, because it would pose a problem for coupled builds. --- build_tsmp2.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build_tsmp2.sh b/build_tsmp2.sh index 89ef37e..7edd729 100755 --- a/build_tsmp2.sh +++ b/build_tsmp2.sh @@ -320,7 +320,7 @@ message "== CMAKE GENERATE PROJECT finished" message "CMAKE build:" message "cmake --build ${cmake_build_dir} |& tee -a $build_log" message "== CMAKE BUILD start" -cmake --build ${cmake_build_dir} --parallel 4 |& tee -a $build_log +cmake --build ${cmake_build_dir} |& tee -a $build_log message "== CMAKE BUILD finished" message "CMAKE install:" From b36badf69631f2983decbf0e5c1a44e3dec53c18 Mon Sep 17 00:00:00 2001 From: Marco van Hulten Date: Mon, 18 Aug 2025 16:56:46 +0200 Subject: [PATCH 3/4] Enable CMake parallel build as a user option Resolves: #62, #89 --- build_tsmp2.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/build_tsmp2.sh b/build_tsmp2.sh index 7edd729..609c623 100755 --- a/build_tsmp2.sh +++ b/build_tsmp2.sh @@ -33,6 +33,7 @@ function help_tsmp2() { echo " --install_dir Set install dir cmake, if not set bin/_ is used. Model executables and libraries will be installed here" echo " --clean_first Delete build_dir if it already exists" echo " --env Set model environment." + echo " --max_jobs Set the maximum number of jobs to build the code, if not set compilation is serial." echo "" echo "Example: $0 --ICON --eCLM --ParFlow" exit 1 @@ -124,6 +125,7 @@ while [[ "$#" -gt 0 ]]; do --build_dir) build_dir="$2"; shift ;; --install_dir) install_dir="$2"; shift ;; --env) env="$2"; shift ;; + --max_jobs) max_jobs="$2"; shift ;; *) echo "Unknown parameter passed: $1"; exit 1 ;; esac shift @@ -290,6 +292,8 @@ else fi mkdir -p "${cmake_install_dir}" +cmake_max_jobs="${max_jobs:-1}" + # # 5. CMake configure # @@ -318,7 +322,7 @@ message "== CMAKE GENERATE PROJECT finished" # 6. CMake build and install # message "CMAKE build:" -message "cmake --build ${cmake_build_dir} |& tee -a $build_log" +message "cmake --build ${cmake_build_dir} --parallel ${cmake_max_jobs} |& tee -a $build_log" message "== CMAKE BUILD start" cmake --build ${cmake_build_dir} |& tee -a $build_log message "== CMAKE BUILD finished" From 2888220781fc96d7bc0bf8a2b3f79579ecee7565 Mon Sep 17 00:00:00 2001 From: Marco van Hulten Date: Mon, 18 Aug 2025 17:31:41 +0200 Subject: [PATCH 4/4] Fixed the last commit --- build_tsmp2.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/build_tsmp2.sh b/build_tsmp2.sh index 609c623..72eda45 100755 --- a/build_tsmp2.sh +++ b/build_tsmp2.sh @@ -292,7 +292,9 @@ else fi mkdir -p "${cmake_install_dir}" -cmake_max_jobs="${max_jobs:-1}" +if [ -v max_jobs ]; then + export CMAKE_BUILD_PARALLEL_LEVEL=${max_jobs} +fi # # 5. CMake configure @@ -322,7 +324,7 @@ message "== CMAKE GENERATE PROJECT finished" # 6. CMake build and install # message "CMAKE build:" -message "cmake --build ${cmake_build_dir} --parallel ${cmake_max_jobs} |& tee -a $build_log" +message "cmake --build ${cmake_build_dir} |& tee -a $build_log" message "== CMAKE BUILD start" cmake --build ${cmake_build_dir} |& tee -a $build_log message "== CMAKE BUILD finished"