From a754c71bfcac32295d19a7cd00b8040eb5de795e Mon Sep 17 00:00:00 2001 From: kvrigor Date: Tue, 16 Jun 2026 15:07:31 +0200 Subject: [PATCH 1/7] Supported CMAKE_BUILD_TYPE=PROFILE --- build_tsmp2.sh | 56 ++++++++++++++++++++++++-------------- cmake/BuildOASIS3MCT.cmake | 14 ++++++++-- env/jsc.2026.gnu.openmpi | 26 +++++++++++++----- 3 files changed, 66 insertions(+), 30 deletions(-) diff --git a/build_tsmp2.sh b/build_tsmp2.sh index 9d07bc3c..fe5aebc6 100755 --- a/build_tsmp2.sh +++ b/build_tsmp2.sh @@ -36,7 +36,7 @@ function help_tsmp2() { echo " --OASIS_SRC Set OASIS3-MCT directory" echo " --PDAF_SRC Set PDAF_SRC directory" echo " --no_update Skip component model download" - echo " --build_type Set build configuration: 'DEBUG' 'RELEASE'" + echo " --build_type Set build configuration: 'DEBUG', 'RELEASE', or 'PROFILE'" echo " --build_dir Set build dir cmake, if not set bld/_ is used. Build artifacts will be generated in this folder." 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" @@ -207,8 +207,19 @@ if [ "${update_compsrc}" != n ]; then dwn_compsrc clm35 clm35_src "CLM3.5" fi +# 2. Determine build configuration +if [[ -z "$build_type" ]];then + build_type="RELEASE" +fi +if [[ ${build_type^^} == "DEBUG" || ${build_type^^} == "RELEASE" || ${build_type^^} == "PROFILE" ]]; then + cmake_build_type="${build_type^^}" +else + echo "ABORT: Unsupported build_type=${build_type}" + exit 1 +fi + # -# 2. Source environment file +# 3. Source environment file # if [[ ! -z "${env}" ]]; then @@ -230,15 +241,22 @@ if [[ ! -f "${env}" ]]; then exit 1 fi + if [[ -n "${env}" ]]; then message "Sourcing environment..." - # TODO: Fix this GPU thing on another PR + # TODO: Env file parameterization is temporary and should be fixed if [[ "$parflowGPU" == "y" ]];then - source "${env}" --parflowgpu - else - source "${env}" + env_params="--parflowgpu" + fi + if [[ ${build_type^^} == "PROFILE" ]];then + env_params+="${env_params} --profile" + if [[ ":${TSMP2_ENV_FILE}:" != *"jsc.2026.gnu.openmpi"* ]]; then + message "ERROR: Profiling builds are only currently supported on jsc.2026.gnu.openmpi." + exit 1 + fi fi + source "${env}" "${env_params}" fi # TSMP2_ENV_FILE should be set either (1) through --env, (2) as a shell variable, @@ -249,9 +267,14 @@ if [[ -z "${TSMP2_ENV_FILE}" ]]; then fi # -# 3. Set CMake build directory +# 4. Set CMake build directory # -BUILD_ID="${SYSTEMNAME^^}_${model_id}" +if [[ ${build_type^^} == "RELEASE" ]]; then + BUILD_ID="${SYSTEMNAME^^}_${model_id}" +else + BUILD_ID="${SYSTEMNAME^^}_${build_type^^}_${model_id}" +fi + if [[ -z "${build_dir}" ]]; then cmake_build_dir="${cmake_tsmp2_dir}/bld/${BUILD_ID}" else @@ -293,18 +316,9 @@ fi build_log="$(dirname ${cmake_build_dir})/${BUILD_ID}_$(date +%Y-%m-%d_%H-%M).log" # -# 4. Set the rest of the CMake options +# 5. Set the rest of the CMake options # message "Setting CMAKE options..." -if [[ -z "$build_type" ]];then - build_type="RELEASE" -fi -if [[ ${build_type^^} == "DEBUG" || ${build_type^^} == "RELEASE" ]]; then - cmake_build_type="${build_type^^}" -else - echo "ABORT: Unsupported build_type=${build_type}" - exit 1 -fi if [ -z "${verbose_makefile}" ]; then cmake_verbose_makefile="OFF" @@ -320,7 +334,7 @@ fi mkdir -p "${cmake_install_dir}" # -# 5. CMake configure +# 6. CMake configure # message "" message "====================" @@ -344,7 +358,7 @@ cmake ${cmake_conf} |& tee -a "${build_log}" message "== CMAKE GENERATE PROJECT finished" # -# 6. CMake build and install +# 7. CMake build and install # message "CMAKE build:" message "cmake --build ${cmake_build_dir} |& tee -a $build_log" @@ -359,7 +373,7 @@ cmake --install ${cmake_build_dir} |& tee -a $build_log message "== CMAKE INSTALL finished" # -# 7. Post-installation steps +# 8. Post-installation steps # message "Copying build log and environment file to ${cmake_install_dir}..." if [[ -n "${env}" ]]; then diff --git a/cmake/BuildOASIS3MCT.cmake b/cmake/BuildOASIS3MCT.cmake index c66840fd..25c6aeb6 100644 --- a/cmake/BuildOASIS3MCT.cmake +++ b/cmake/BuildOASIS3MCT.cmake @@ -1,12 +1,22 @@ find_package(NetCDF REQUIRED) find_package(OpenMP REQUIRED) +set(OASIS_C_COMPILER ${CMAKE_C_COMPILER}) +set(OASIS_Fortran_COMPILER ${CMAKE_Fortran_COMPILER}) + if (CMAKE_BUILD_TYPE STREQUAL "DEBUG") set(OPTIM "-g") set(MCT_DEBUGFLAG "--enable-debugging") elseif (CMAKE_BUILD_TYPE STREQUAL "RELEASE") set(OPTIM "-O2") set(MCT_DEBUGFLAG "") +elseif (CMAKE_BUILD_TYPE STREQUAL "PROFILE") + # TODO: which build flags to use for profiling? + set(OPTIM "-O2") + set(MCT_DEBUGFLAG "") + # Score-P MPI wrappers have problems with OpenMP; bypass it for now + set(OASIS_C_COMPILER mpicc) + set(OASIS_Fortran_COMPILER mpif90) else() # Assume CMAKE_BUILD_TYPE=RELEASE if CMAKE_BUILD_TYPE is unknown set(OPTIM "-O2") @@ -29,8 +39,8 @@ file(APPEND ${OASIS_MAKE_INC} "F90 = ${CMAKE_Fortran_COMPILER}\n") file(APPEND ${OASIS_MAKE_INC} "F = $(F90)\n") file(APPEND ${OASIS_MAKE_INC} "f90 = $(F90)\n") file(APPEND ${OASIS_MAKE_INC} "f = $(F90)\n") -file(APPEND ${OASIS_MAKE_INC} "CC = ${CMAKE_C_COMPILER}\n") -file(APPEND ${OASIS_MAKE_INC} "LD = ${CMAKE_Fortran_COMPILER} -L${MPI_Fortran_LIB_DIR}\n") +file(APPEND ${OASIS_MAKE_INC} "CC = ${OASIS_C_COMPILER}\n") +file(APPEND ${OASIS_MAKE_INC} "LD = ${OASIS_Fortran_COMPILER} -L${MPI_Fortran_LIB_DIR}\n") file(APPEND ${OASIS_MAKE_INC} "AR = ar\n") file(APPEND ${OASIS_MAKE_INC} "ARFLAGS = -ruv\n") file(APPEND ${OASIS_MAKE_INC} "DYNOPT = -fPIC\n") diff --git a/env/jsc.2026.gnu.openmpi b/env/jsc.2026.gnu.openmpi index d006c930..7a4a419b 100644 --- a/env/jsc.2026.gnu.openmpi +++ b/env/jsc.2026.gnu.openmpi @@ -52,6 +52,12 @@ fi module load ecCodes # Set default MPI compilers +if [[ "$1" == "--profile" || "$2" == "--profile" ]]; then + module load Scalasca + export PROFILE_CC=scorep-mpicc + export PROFILE_FC=scorep-mpif90 + export PROFILE_CXX=scorep-mpicxx +fi export CC=mpicc export FC=mpif90 export CXX=mpicxx @@ -64,14 +70,20 @@ export SUNDIALS_ROOT=$EBROOTSUNDIALS # Display compiler settings module list echo "=============== COMPILER SETTINGS ===============" -echo " Machine: ${SYSTEMNAME} on Stages/$STAGE" -echo " MPI lib: OpenMPI v$EBVERSIONOPENMPI" -echo " C: $($CC --version | head -n 1)" -echo " C++: $($CXX --version | head -n 1)" -echo " Fortran: $($FC --version | head -n 1)" +echo " Machine: ${SYSTEMNAME} on Stages/$STAGE" +echo " MPI lib: OpenMPI v$EBVERSIONOPENMPI" +echo " C: $($CC --version | head -n 1)" +echo " C++: $($CXX --version | head -n 1)" +echo " Fortran: $($FC --version | head -n 1)" if [[ "$1" == "--parflowgpu" ]]; then - echo " nvcc: $(nvcc --version | tail -n 1 | cut -d" " -f2)" - echo " CUDAARCHS: $CUDAARCHS" + echo " nvcc: $(nvcc --version | tail -n 1 | cut -d" " -f2)" + echo " CUDAARCHS: $CUDAARCHS" +fi +if [[ "$1" == "--profile" || "$2" == "--profile" ]]; then + echo " PROFILE_CC: ${PROFILE_CC}" + echo " PROFILE_FC: ${PROFILE_FC}" + echo "PROFILE_CXX: ${PROFILE_CXX}" + echo "PROFILE_VER: ${EBVERSIONSCALASCA}" fi echo "==================================================" echo "" From a2394fd528d29bce3a0ad51ffee87748cbbcb648 Mon Sep 17 00:00:00 2001 From: kvrigor Date: Tue, 16 Jun 2026 16:23:09 +0200 Subject: [PATCH 2/7] Set profiling compilers on eCLM and Parflow if CMAKE_BUILD_TYPE=PROFILE --- build_tsmp2.sh | 9 +++++---- cmake/BuildOASIS3MCT.cmake | 16 +++------------- cmake/BuildParFlow.cmake | 17 ++++++++++++++--- cmake/BuildeCLM.cmake | 13 +++++++++++-- env/jsc.2026.gnu.openmpi | 21 +++++++++------------ 5 files changed, 42 insertions(+), 34 deletions(-) diff --git a/build_tsmp2.sh b/build_tsmp2.sh index fe5aebc6..10026374 100755 --- a/build_tsmp2.sh +++ b/build_tsmp2.sh @@ -247,16 +247,17 @@ if [[ -n "${env}" ]]; then # TODO: Env file parameterization is temporary and should be fixed if [[ "$parflowGPU" == "y" ]];then - env_params="--parflowgpu" + env_gpu_params="--parflowgpu" fi if [[ ${build_type^^} == "PROFILE" ]];then - env_params+="${env_params} --profile" + env_profile_params="--profile" if [[ ":${TSMP2_ENV_FILE}:" != *"jsc.2026.gnu.openmpi"* ]]; then message "ERROR: Profiling builds are only currently supported on jsc.2026.gnu.openmpi." exit 1 - fi + fi fi - source "${env}" "${env_params}" + message "SOURCE command: source ${env} ${env_gpu_params} ${env_profile_params}" + source "${env}" ${env_gpu_params} ${env_profile_params} fi # TSMP2_ENV_FILE should be set either (1) through --env, (2) as a shell variable, diff --git a/cmake/BuildOASIS3MCT.cmake b/cmake/BuildOASIS3MCT.cmake index 25c6aeb6..f71ec295 100644 --- a/cmake/BuildOASIS3MCT.cmake +++ b/cmake/BuildOASIS3MCT.cmake @@ -1,22 +1,12 @@ find_package(NetCDF REQUIRED) find_package(OpenMP REQUIRED) -set(OASIS_C_COMPILER ${CMAKE_C_COMPILER}) -set(OASIS_Fortran_COMPILER ${CMAKE_Fortran_COMPILER}) - if (CMAKE_BUILD_TYPE STREQUAL "DEBUG") set(OPTIM "-g") set(MCT_DEBUGFLAG "--enable-debugging") -elseif (CMAKE_BUILD_TYPE STREQUAL "RELEASE") - set(OPTIM "-O2") - set(MCT_DEBUGFLAG "") -elseif (CMAKE_BUILD_TYPE STREQUAL "PROFILE") - # TODO: which build flags to use for profiling? +elseif (CMAKE_BUILD_TYPE STREQUAL "RELEASE" OR CMAKE_BUILD_TYPE STREQUAL "PROFILE") set(OPTIM "-O2") set(MCT_DEBUGFLAG "") - # Score-P MPI wrappers have problems with OpenMP; bypass it for now - set(OASIS_C_COMPILER mpicc) - set(OASIS_Fortran_COMPILER mpif90) else() # Assume CMAKE_BUILD_TYPE=RELEASE if CMAKE_BUILD_TYPE is unknown set(OPTIM "-O2") @@ -39,8 +29,8 @@ file(APPEND ${OASIS_MAKE_INC} "F90 = ${CMAKE_Fortran_COMPILER}\n") file(APPEND ${OASIS_MAKE_INC} "F = $(F90)\n") file(APPEND ${OASIS_MAKE_INC} "f90 = $(F90)\n") file(APPEND ${OASIS_MAKE_INC} "f = $(F90)\n") -file(APPEND ${OASIS_MAKE_INC} "CC = ${OASIS_C_COMPILER}\n") -file(APPEND ${OASIS_MAKE_INC} "LD = ${OASIS_Fortran_COMPILER} -L${MPI_Fortran_LIB_DIR}\n") +file(APPEND ${OASIS_MAKE_INC} "CC = ${CMAKE_C_COMPILER}\n") +file(APPEND ${OASIS_MAKE_INC} "LD = ${CMAKE_Fortran_COMPILER} -L${MPI_Fortran_LIB_DIR}\n") file(APPEND ${OASIS_MAKE_INC} "AR = ar\n") file(APPEND ${OASIS_MAKE_INC} "ARFLAGS = -ruv\n") file(APPEND ${OASIS_MAKE_INC} "DYNOPT = -fPIC\n") diff --git a/cmake/BuildParFlow.cmake b/cmake/BuildParFlow.cmake index 81711453..7a7ac7ca 100644 --- a/cmake/BuildParFlow.cmake +++ b/cmake/BuildParFlow.cmake @@ -75,14 +75,25 @@ if (DEFINED ENV{SUNDIALS_ROOT} AND NOT ${PDAF}) set(PF_SUNDIALS_FLAG "-DSUNDIALS_ROOT=$ENV{SUNDIALS_ROOT}") endif() +# Profiling build (Experimental) +if (CMAKE_BUILD_TYPE STREQUAL "PROFILE") + set(PF_C_COMPILER $ENV{TSMP2_PROFILE_CC}) + set(PF_CXX_COMPILER $ENV{TSMP2_PROFILE_CXX}) + set(PF_Fortran_COMPILER $ENV{TSMP2_PROFILE_FC}) +else() + set(PF_C_COMPILER ${CMAKE_C_COMPILER}) + set(PF_CXX_COMPILER ${CMAKE_CXX_COMPILER}) + set(PF_Fortran_COMPILER ${CMAKE_Fortran_COMPILER}) +endif() + # Pass options to ParFlow CMake ExternalProject_Add(ParFlow PREFIX ParFlow SOURCE_DIR ${PARFLOW_SRC} - CMAKE_ARGS -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + CMAKE_ARGS -DCMAKE_C_COMPILER=${PF_C_COMPILER} -DCMAKE_C_FLAGS=${PF_CFLAGS} - -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} - -DCMAKE_Fortran_COMPILER=${CMAKE_Fortran_COMPILER} + -DCMAKE_CXX_COMPILER=${PF_CXX_COMPILER} + -DCMAKE_Fortran_COMPILER=${PF_Fortran_COMPILER} -DCMAKE_Fortran_FLAGS=${PF_FFLAGS} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} diff --git a/cmake/BuildeCLM.cmake b/cmake/BuildeCLM.cmake index 42f0f642..f54c7d3a 100644 --- a/cmake/BuildeCLM.cmake +++ b/cmake/BuildeCLM.cmake @@ -14,12 +14,21 @@ if(${PDAF}) list(APPEND PDAF_FLAGS -DUSE_PDAF=True) endif() +# Experimental +if (CMAKE_BUILD_TYPE STREQUAL "PROFILE") + set(eCLM_C_COMPILER $ENV{TSMP2_PROFILE_CC}) + set(eCLM_Fortran_COMPILER $ENV{TSMP2_PROFILE_FC}) +else() + set(eCLM_C_COMPILER ${CMAKE_C_COMPILER}) + set(eCLM_Fortran_COMPILER ${CMAKE_Fortran_COMPILER}) +endif() + ExternalProject_Add(eCLM PREFIX eCLM SOURCE_DIR ${eCLM_SRC} SOURCE_SUBDIR src - CMAKE_ARGS -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - -DCMAKE_Fortran_COMPILER=${CMAKE_Fortran_COMPILER} + CMAKE_ARGS -DCMAKE_C_COMPILER=${eCLM_C_COMPILER} + -DCMAKE_Fortran_COMPILER=${eCLM_Fortran_COMPILER} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_PREFIX_PATH=${OASIS_ROOT} -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} diff --git a/env/jsc.2026.gnu.openmpi b/env/jsc.2026.gnu.openmpi index 7a4a419b..5f8bb02d 100644 --- a/env/jsc.2026.gnu.openmpi +++ b/env/jsc.2026.gnu.openmpi @@ -52,11 +52,11 @@ fi module load ecCodes # Set default MPI compilers -if [[ "$1" == "--profile" || "$2" == "--profile" ]]; then +if [[ "$2" == "--profile" ]]; then module load Scalasca - export PROFILE_CC=scorep-mpicc - export PROFILE_FC=scorep-mpif90 - export PROFILE_CXX=scorep-mpicxx + export TSMP2_PROFILE_CC=$(which scorep-mpicc) + export TSMP2_PROFILE_FC=$(which scorep-mpif90) + export TSMP2_PROFILE_CXX=$(which scorep-mpicxx) fi export CC=mpicc export FC=mpif90 @@ -72,18 +72,15 @@ module list echo "=============== COMPILER SETTINGS ===============" echo " Machine: ${SYSTEMNAME} on Stages/$STAGE" echo " MPI lib: OpenMPI v$EBVERSIONOPENMPI" -echo " C: $($CC --version | head -n 1)" -echo " C++: $($CXX --version | head -n 1)" -echo " Fortran: $($FC --version | head -n 1)" +echo " C: ${CC} (GCC ${EBVERSIONGCCCORE})" +echo " C++: ${CXX} (GCC ${EBVERSIONGCCCORE})" +echo " Fortran: ${FC} (GCC ${EBVERSIONGCCCORE})" if [[ "$1" == "--parflowgpu" ]]; then echo " nvcc: $(nvcc --version | tail -n 1 | cut -d" " -f2)" echo " CUDAARCHS: $CUDAARCHS" fi -if [[ "$1" == "--profile" || "$2" == "--profile" ]]; then - echo " PROFILE_CC: ${PROFILE_CC}" - echo " PROFILE_FC: ${PROFILE_FC}" - echo "PROFILE_CXX: ${PROFILE_CXX}" - echo "PROFILE_VER: ${EBVERSIONSCALASCA}" +if [[ "$2" == "--profile" ]]; then + echo " Profiler: Scalasca v${EBVERSIONSCALASCA}" fi echo "==================================================" echo "" From 519e7e0069d769f2b0c77ddc5c561d9a376a6de0 Mon Sep 17 00:00:00 2001 From: kvrigor Date: Wed, 17 Jun 2026 08:34:03 +0200 Subject: [PATCH 3/7] Ignored compiler warnings when compiling ParFlow with scorep-mpicc --- cmake/BuildParFlow.cmake | 5 ++++- env/jsc.2026.gnu.openmpi | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/cmake/BuildParFlow.cmake b/cmake/BuildParFlow.cmake index 7a7ac7ca..f0c9eb8f 100644 --- a/cmake/BuildParFlow.cmake +++ b/cmake/BuildParFlow.cmake @@ -41,7 +41,10 @@ endif() # Set compiler flags if(CMAKE_C_COMPILER_ID STREQUAL "GNU") # Flags were based from https://github.com/parflow/parflow/blob/c8aa8d7140db19153194728b8fa9136b95177b6d/.github/workflows/linux.yml#L486 - set(PF_CFLAGS "-Wall -Werror -Wno-unused-result -Wno-unused-function -Wno-stringop-overread") + set(PF_CFLAGS "-Wall -Wno-unused-result -Wno-unused-function -Wno-stringop-overread") + if (NOT CMAKE_BUILD_TYPE STREQUAL "PROFILE") + string(APPEND PF_CFLAGS " -Werror") #compile warnings not ignored for DEBUG and RELEASE builds + endif() if(${PDAF}) # parflow-pdaf fork currently ignores unused variables string(APPEND PF_CFLAGS " -Wno-unused-variable") diff --git a/env/jsc.2026.gnu.openmpi b/env/jsc.2026.gnu.openmpi index 5f8bb02d..9b472ab8 100644 --- a/env/jsc.2026.gnu.openmpi +++ b/env/jsc.2026.gnu.openmpi @@ -52,7 +52,7 @@ fi module load ecCodes # Set default MPI compilers -if [[ "$2" == "--profile" ]]; then +if [[ "$1" == "--profile" || "$2" == "--profile" ]]; then module load Scalasca export TSMP2_PROFILE_CC=$(which scorep-mpicc) export TSMP2_PROFILE_FC=$(which scorep-mpif90) @@ -79,7 +79,7 @@ if [[ "$1" == "--parflowgpu" ]]; then echo " nvcc: $(nvcc --version | tail -n 1 | cut -d" " -f2)" echo " CUDAARCHS: $CUDAARCHS" fi -if [[ "$2" == "--profile" ]]; then +if [[ "$1" == "--profile" || "$2" == "--profile" ]]; then echo " Profiler: Scalasca v${EBVERSIONSCALASCA}" fi echo "==================================================" From 46277dc696746d162be85343e94bd7ef3b9c8585 Mon Sep 17 00:00:00 2001 From: kvrigor Date: Tue, 22 Sep 2026 17:05:43 +0200 Subject: [PATCH 4/7] Updated OASIS3-MCT to c850840 --- env/jsc.2026.gnu.openmpi | 13 +++++++------ models/oasis3-mct | 2 +- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/env/jsc.2026.gnu.openmpi b/env/jsc.2026.gnu.openmpi index 9b472ab8..3d46108c 100644 --- a/env/jsc.2026.gnu.openmpi +++ b/env/jsc.2026.gnu.openmpi @@ -54,13 +54,14 @@ module load ecCodes # Set default MPI compilers if [[ "$1" == "--profile" || "$2" == "--profile" ]]; then module load Scalasca - export TSMP2_PROFILE_CC=$(which scorep-mpicc) - export TSMP2_PROFILE_FC=$(which scorep-mpif90) - export TSMP2_PROFILE_CXX=$(which scorep-mpicxx) + export CC=$(which scorep-mpicc) + export FC=$(which scorep-mpif90) + export CXX=$(which scorep-mpicxx) +else + export CC=mpicc + export FC=mpif90 + export CXX=mpicxx fi -export CC=mpicc -export FC=mpif90 -export CXX=mpicxx # Variables read by TSMP2 cmake scripts export MPI_HOME=$EBROOTOPENMPI diff --git a/models/oasis3-mct b/models/oasis3-mct index 5253349d..c850840d 160000 --- a/models/oasis3-mct +++ b/models/oasis3-mct @@ -1 +1 @@ -Subproject commit 5253349d4ce15259fcd76e0443495c1ddb7788bb +Subproject commit c850840db8ada39e882560922a5722981a28dfb2 From 152c77ad546925f6936f3a4d35ace9f19d702c05 Mon Sep 17 00:00:00 2001 From: kvrigor Date: Tue, 22 Sep 2026 17:11:36 +0200 Subject: [PATCH 5/7] Manual build script for eCLM-ParflowGPU (WIP) --- build_eclmparflowgpu_profile.sh | 51 +++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100755 build_eclmparflowgpu_profile.sh diff --git a/build_eclmparflowgpu_profile.sh b/build_eclmparflowgpu_profile.sh new file mode 100755 index 00000000..cd5d6537 --- /dev/null +++ b/build_eclmparflowgpu_profile.sh @@ -0,0 +1,51 @@ +#!/usr/bin/env bash +# +# Script for manually building OASIS3-MCT, eCLM, and Parflow. +# +set -eo pipefail + +TSMP2_ROOT=`git rev-parse --show-toplevel` +MODEL_ID=${SYSTEMNAME^^}_eCLM-ParflowGPU_S${STAGE}_GNU-OPENMPI_SCALASCA +BUILD_DIR=${TSMP2_ROOT}/bld_manual/${MODEL_ID} +INSTALL_DIR=${TSMP2_ROOT}/bin/${MODEL_ID} + +# +# Build OASIS3-MCT +# +echo "" +echo "Building OASIS3-MCT (without Score-P) ..." +echo "" +cd ${TSMP2_ROOT}/models/oasis3-mct +#INSTALL_PREFIX=${INSTALL_DIR} ./build + +# +# Source env for eCLM and Parflow build +# +cd ${TSMP2_ROOT} +source env/jsc.2026.gnu.openmpi --profile + +# +# Build eCLM +# +echo "" +echo "Building eCLM with Score-P..." +echo "" +BLD_eCLM=${BUILD_DIR}/eCLM +rm -rf ${BLD_eCLM} +if [[ ! -d ${BLD_eCLM} ]]; then + SCOREP_WRAPPER=off cmake -S ${TSMP2_ROOT}/models/eCLM/src \ + -B ${BLD_eCLM} \ + -DCMAKE_PREFIX_PATH=${INSTALL_DIR} \ + -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} \ + -DCMAKE_C_COMPILER=$CC \ + -DCMAKE_Fortran_COMPILER=$FC \ + -DCOUP_OAS_PFL=True +fi +cd ${BLD_eCLM} +make SCOREP_WRAPPER_INSTRUMENTER_FLAGS="--thread=pthread --verbose" VERBOSE=1 install +# TODO: Check MCT error at /p/project1/cslts/rigor1/TSMP2_dev/TSMP2/models/eCLM/src/externals/mct/config.log + +echo "" +echo "Building Parflow with Score-P..." +echo "" +# TODO From 73bcd6ce93eea7155ef12d2ead9dc7252557eefa Mon Sep 17 00:00:00 2001 From: kvrigor Date: Wed, 23 Sep 2026 08:04:09 +0200 Subject: [PATCH 6/7] eCLM: track dev-scalasca-profiling branch --- .gitmodules | 2 +- models/eCLM | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index b795dd89..06ac3a3e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -17,7 +17,7 @@ [submodule "models/eCLM"] path = models/eCLM url = https://github.com/HPSCTerrSys/eCLM.git - branch = beta-0.6 + branch = dev-scalasca-profiling [submodule "models/oasis3-mct"] path = models/oasis3-mct url = https://icg4geo.icg.kfa-juelich.de/ExternalReposPublic/oasis3-mct diff --git a/models/eCLM b/models/eCLM index 98054f5e..6766e575 160000 --- a/models/eCLM +++ b/models/eCLM @@ -1 +1 @@ -Subproject commit 98054f5eb6df272fb79183b8d87f3f8e8a626131 +Subproject commit 6766e5754f2f1d02fa3c984b99ae3fb398eb2547 From 777d902a8d6d1c53fad7abefe51a167a53c5feaf Mon Sep 17 00:00:00 2001 From: kvrigor Date: Wed, 23 Sep 2026 10:09:14 +0200 Subject: [PATCH 7/7] Score-P build script for eCLM-ParflowGPU Finally a working build! --- build_eclmparflowgpu_profile.sh | 63 +++++++++++++++++++++++++-------- models/oasis3-mct | 2 +- 2 files changed, 50 insertions(+), 15 deletions(-) diff --git a/build_eclmparflowgpu_profile.sh b/build_eclmparflowgpu_profile.sh index cd5d6537..71fdb674 100755 --- a/build_eclmparflowgpu_profile.sh +++ b/build_eclmparflowgpu_profile.sh @@ -9,43 +9,78 @@ MODEL_ID=${SYSTEMNAME^^}_eCLM-ParflowGPU_S${STAGE}_GNU-OPENMPI_SCALASCA BUILD_DIR=${TSMP2_ROOT}/bld_manual/${MODEL_ID} INSTALL_DIR=${TSMP2_ROOT}/bin/${MODEL_ID} +rm -rf ${INSTALL_DIR} +# +# Source env for eCLM and Parflow build +# +cd ${TSMP2_ROOT} +echo "Sourcing env file ..." +source env/jsc.2026.gnu.openmpi --parflowgpu --profile + # # Build OASIS3-MCT # echo "" -echo "Building OASIS3-MCT (without Score-P) ..." +echo "Building OASIS3-MCT with Score-P ..." echo "" cd ${TSMP2_ROOT}/models/oasis3-mct -#INSTALL_PREFIX=${INSTALL_DIR} ./build +CC=$(which mpicc) FC=$(which mpif90) INSTALL_PREFIX=${INSTALL_DIR} ./build +echo "Successfully built OASIS3-MCT!" -# -# Source env for eCLM and Parflow build -# -cd ${TSMP2_ROOT} -source env/jsc.2026.gnu.openmpi --profile +echo "" +echo "Building Parflow with Score-P ..." +echo "" +BLD_ParFlow=${BUILD_DIR}/ParFlow +rm -rf ${BLD_ParFlow} +if [[ ! -d ${BLD_ParFlow} ]]; then + SCOREP_WRAPPER=off cmake -S ${TSMP2_ROOT}/models/parflow \ + -B ${BLD_ParFlow} \ + -DCMAKE_BUILD_TYPE="RELEASE" \ + -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} \ + -DCMAKE_PREFIX_PATH=${INSTALL_DIR} \ + -DCMAKE_C_COMPILER=$CC \ + -DCMAKE_Fortran_COMPILER=$FC \ + -DCMAKE_CXX_COMPILER=$CXX \ + -DPARFLOW_ENABLE_HYPRE=ON \ + -DPARFLOW_ENABLE_NETCDF=ON \ + -DPARFLOW_AMPS_SEQUENTIAL_IO=ON \ + -DPARFLOW_ENABLE_TIMING=TRUE \ + -DPARFLOW_ACCELERATOR_BACKEND="cuda" \ + -DMPIEXEC_EXECUTABLE=$(which srun) \ + -DMPIEXEC_NUMPROC_FLAG="--ntasks" \ + -DPARFLOW_ENABLE_SLURM=TRUE \ + -DUMPIRE_ROOT=${EBROOTUMPIRE} \ + -DSUNDIALS_ROOT=${EBROOTSUNDIALS} \ + -DPARFLOW_AMPS_LAYER=oas3 \ + -DOAS3_ROOT=${INSTALL_DIR} \ + -DPARFLOW_HAVE_ECLM=ON +fi +cd ${BLD_ParFlow} +make SCOREP_WRAPPER_INSTRUMENTER_FLAGS="--thread=pthread --verbose" VERBOSE=1 -j8 install +echo "Successfully built ParFlowGPU!" # # Build eCLM # echo "" -echo "Building eCLM with Score-P..." +echo "Building eCLM with Score-P ..." echo "" -BLD_eCLM=${BUILD_DIR}/eCLM rm -rf ${BLD_eCLM} +BLD_eCLM=${BUILD_DIR}/eCLM if [[ ! -d ${BLD_eCLM} ]]; then SCOREP_WRAPPER=off cmake -S ${TSMP2_ROOT}/models/eCLM/src \ -B ${BLD_eCLM} \ + -DCMAKE_BUILD_TYPE="PROFILE" \ -DCMAKE_PREFIX_PATH=${INSTALL_DIR} \ -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} \ -DCMAKE_C_COMPILER=$CC \ -DCMAKE_Fortran_COMPILER=$FC \ - -DCOUP_OAS_PFL=True + -DCOUP_OAS_PFL=True fi cd ${BLD_eCLM} -make SCOREP_WRAPPER_INSTRUMENTER_FLAGS="--thread=pthread --verbose" VERBOSE=1 install -# TODO: Check MCT error at /p/project1/cslts/rigor1/TSMP2_dev/TSMP2/models/eCLM/src/externals/mct/config.log +make SCOREP_WRAPPER_INSTRUMENTER_FLAGS="--thread=pthread --verbose" VERBOSE=1 -j8 install +echo "Successfully built eCLM!" echo "" -echo "Building Parflow with Score-P..." +echo "SUccessfully built eCLM-ParflowGPU to ${INSTALL_DIR}" echo "" -# TODO diff --git a/models/oasis3-mct b/models/oasis3-mct index c850840d..9e43db07 160000 --- a/models/oasis3-mct +++ b/models/oasis3-mct @@ -1 +1 @@ -Subproject commit c850840db8ada39e882560922a5722981a28dfb2 +Subproject commit 9e43db077804baa4aa0b7915580ac058b811c0c8