Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -322,7 +322,7 @@ if(DEBUG_INFO)
endif()

if(ENABLE_MPI)
find_package(MPI REQUIRED)
find_package(MPI COMPONENTS CXX REQUIRED)
include_directories(${MPI_CXX_INCLUDE_PATH})
target_link_libraries(${ABACUS_BIN_NAME} MPI::MPI_CXX)
add_compile_definitions(__MPI)
Expand Down
65 changes: 40 additions & 25 deletions cmake/FindMKL.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -9,39 +9,54 @@ if(NOT TARGET MKL::MKL)

find_path(MKL_INCLUDE mkl_service.h HINTS ${MKLROOT}/include)

find_library(MKL_INTEL NAMES mkl_intel_lp64 HINTS ${MKLROOT}/lib ${MKLROOT}/lib/intel64)
find_library(MKL_INTEL_THREAD NAMES mkl_intel_thread HINTS ${MKLROOT}/lib ${MKLROOT}/lib/intel64)
find_library(MKL_CORE NAMES mkl_core HINTS ${MKLROOT}/lib ${MKLROOT}/lib/intel64)
find_library(MKL_IOMP5 NAMES iomp5
HINTS ENV CMPLR_ROOT
PATH_SUFFIXES lib lib/intel64 linux/compiler/lib/intel64_lin
)
if(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
find_library(MKL_INTERFACE_LIB NAMES mkl_intel_lp64 HINTS ${MKLROOT}/lib ${MKLROOT}/lib/intel64)
find_library(MKL_THREAD NAMES mkl_intel_thread HINTS ${MKLROOT}/lib ${MKLROOT}/lib/intel64)
find_library(MKL_IOMP5 NAMES iomp5
HINTS ENV CMPLR_ROOT
PATH_SUFFIXES lib lib/intel64 linux/compiler/lib/intel64_lin
)
else()
find_library(MKL_INTERFACE_LIB NAMES mkl_gf_lp64 HINTS ${MKLROOT}/lib ${MKLROOT}/lib/intel64)
find_library(MKL_THREAD NAMES mkl_gnu_thread HINTS ${MKLROOT}/lib ${MKLROOT}/lib/intel64)
# With GCC we use system-installed GNU OpenMP
endif()

if(ENABLE_MPI)
execute_process(COMMAND ${MPI_CXX_COMPILER} --showme:version
OUTPUT_VARIABLE MPI_VER_OUT
ERROR_VARIABLE MPI_VER_ERR)
if(MPI_VER_OUT MATCHES "Open MPI" OR MPI_VER_ERR MATCHES "Open MPI")
set(MKL_BLACS_LIB_NAME "mkl_blacs_openmpi_lp64")
else()
set(MKL_BLACS_LIB_NAME "mkl_blacs_intelmpi_lp64")
endif()
find_library(MKL_SCALAPACK NAMES mkl_scalapack_lp64 HINTS ${MKLROOT}/lib ${MKLROOT}/lib/intel64)
find_library(MKL_BLACS_INTELMPI NAMES mkl_blacs_intelmpi_lp64 HINTS ${MKLROOT}/lib ${MKLROOT}/lib/intel64)
find_library(MKL_BLACS NAMES ${MKL_BLACS_LIB_NAME} HINTS ${MKLROOT}/lib ${MKLROOT}/lib/intel64)
endif()

include(FindPackageHandleStandardArgs)
# handle the QUIETLY and REQUIRED arguments and set MKL_FOUND to TRUE
# if all listed variables are TRUE

if(ENABLE_MPI)
find_package_handle_standard_args(MKL DEFAULT_MSG MKL_INTEL MKL_INTEL_THREAD MKL_CORE MKL_SCALAPACK MKL_BLACS_INTELMPI MKL_INCLUDE)
find_package_handle_standard_args(MKL DEFAULT_MSG MKL_INTERFACE_LIB MKL_THREAD MKL_CORE MKL_SCALAPACK MKL_BLACS MKL_INCLUDE)
else()
find_package_handle_standard_args(MKL MKL_INTEL MKL_INTEL_THREAD MKL_CORE MKL_INCLUDE)
find_package_handle_standard_args(MKL MKL_INTERFACE_LIB MKL_THREAD MKL_CORE MKL_INCLUDE)
endif()

if(MKL_FOUND)
if(NOT TARGET MKL::INTEL)
add_library(MKL::INTEL UNKNOWN IMPORTED)
set_target_properties(MKL::INTEL PROPERTIES
IMPORTED_LOCATION "${MKL_INTEL}"
if(NOT TARGET MKL::INTERFACE_LIB)
add_library(MKL::INTERFACE_LIB UNKNOWN IMPORTED)
set_target_properties(MKL::INTERFACE_LIB PROPERTIES
IMPORTED_LOCATION "${MKL_INTERFACE_LIB}"
INTERFACE_INCLUDE_DIRECTORIES "${MKL_INCLUDE}")
endif()
if(NOT TARGET MKL::INTEL_THREAD)
add_library(MKL::INTEL_THREAD UNKNOWN IMPORTED)
set_target_properties(MKL::INTEL_THREAD PROPERTIES
IMPORTED_LOCATION "${MKL_INTEL_THREAD}"
if(NOT TARGET MKL::THREAD)
add_library(MKL::THREAD UNKNOWN IMPORTED)
set_target_properties(MKL::THREAD PROPERTIES
IMPORTED_LOCATION "${MKL_THREAD}"
INTERFACE_INCLUDE_DIRECTORIES "${MKL_INCLUDE}")
endif()
if(NOT TARGET MKL::CORE)
Expand All @@ -56,10 +71,10 @@ if(MKL_FOUND)
IMPORTED_LOCATION "${MKL_SCALAPACK}"
INTERFACE_INCLUDE_DIRECTORIES "${MKL_INCLUDE}")
endif()
if(NOT TARGET MKL::BLACS_INTELMPI)
add_library(MKL::BLACS_INTELMPI UNKNOWN IMPORTED)
set_target_properties(MKL::BLACS_INTELMPI PROPERTIES
IMPORTED_LOCATION "${MKL_BLACS_INTELMPI}"
if(ENABLE_MPI AND NOT TARGET MKL::BLACS)
add_library(MKL::BLACS UNKNOWN IMPORTED)
set_target_properties(MKL::BLACS PROPERTIES
IMPORTED_LOCATION "${MKL_BLACS}"
INTERFACE_INCLUDE_DIRECTORIES "${MKL_INCLUDE}")
endif()
if(MKL_IOMP5 AND NOT TARGET MKL::IOMP5)
Expand All @@ -72,14 +87,14 @@ if(MKL_FOUND)
set_property(TARGET MKL::MKL PROPERTY
INTERFACE_LINK_LIBRARIES
"-Wl,--start-group"
MKL::INTEL MKL::INTEL_THREAD MKL::CORE MKL::MKL_SCALAPACK MKL::BLACS_INTELMPI
MKL::INTERFACE_LIB MKL::THREAD MKL::CORE MKL::MKL_SCALAPACK MKL::BLACS
"-Wl,--end-group"
)
else()
set_property(TARGET MKL::MKL PROPERTY
INTERFACE_LINK_LIBRARIES
"-Wl,--start-group"
MKL::INTEL MKL::INTEL_THREAD MKL::CORE
MKL::INTERFACE_LIB MKL::THREAD MKL::CORE
"-Wl,--end-group"
)
endif()
Expand All @@ -90,9 +105,9 @@ if(MKL_FOUND)
endif()

if(ENABLE_MPI)
mark_as_advanced(MKL_INCLUDE MKL_INTEL MKL_INTEL_THREAD MKL_CORE MKL_SCALAPACK MKL_BLACS_INTELMPI)
mark_as_advanced(MKL_INCLUDE MKL_INTERFACE_LIB MKL_THREAD MKL_CORE MKL_SCALAPACK MKL_BLACS)
else()
mark_as_advanced(MKL_INCLUDE MKL_INTEL MKL_INTEL_THREAD MKL_CORE)
mark_as_advanced(MKL_INCLUDE MKL_INTERFACE_LIB MKL_THREAD MKL_CORE)
endif()

endif() # MKL::MKL
Expand Down
79 changes: 79 additions & 0 deletions toolchain/build_abacus_gcc-mkl.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
#!/bin/bash -e
#SBATCH -J build_abacus_aocl
#SBATCH -N 1
#SBATCH -n 16
#SBATCH -o install.log
#SBATCH -e install.err

# Build ABACUS by gcc-mkl toolchain

# load system env modules at first
# module load mkl compiler mpi
# source path/to/setvars.sh

ABACUS_DIR=..
TOOL=$(pwd)
INSTALL_DIR=$TOOL/install
source $INSTALL_DIR/setup
cd $ABACUS_DIR
ABACUS_DIR=$(pwd)

BUILD_DIR=build_abacus_gcc_mkl
rm -rf $BUILD_DIR

PREFIX=$ABACUS_DIR
ELPA=$INSTALL_DIR/elpa-2025.06.001/cpu
# ELPA=$INSTALL_DIR/elpa-2025.06.001/nvidia # for elpa-gpu
CEREAL=$INSTALL_DIR/cereal-master/include/cereal
LIBXC=$INSTALL_DIR/libxc-7.0.0
RAPIDJSON=$INSTALL_DIR/rapidjson-master
LIBRI=$INSTALL_DIR/LibRI-master
LIBCOMM=$INSTALL_DIR/LibComm-master
USE_CUDA=OFF # set ON to enable gpu-abacus
# NEP_DIR=$INSTALL_DIR/NEP_CPU-main
# LIBTORCH=$INSTALL_DIR/libtorch-2.1.2/share/cmake/Torch
# LIBNPY=$INSTALL_DIR/libnpy-1.0.1/include
# DEEPMD=$HOME/apps/anaconda3/envs/deepmd

cmake -B $BUILD_DIR -DCMAKE_INSTALL_PREFIX=$PREFIX \
-DCMAKE_CXX_COMPILER=g++ \
-DMPI_CXX_COMPILER=mpicxx \
-DMKLROOT=$MKLROOT \
-DELPA_DIR=$ELPA \
-DCEREAL_INCLUDE_DIR=$CEREAL \
-DLibxc_DIR=$LIBXC \
-DENABLE_LCAO=ON \
-DENABLE_LIBXC=ON \
-DUSE_OPENMP=ON \
-DUSE_ELPA=ON \
-DENABLE_RAPIDJSON=ON \
-DRapidJSON_DIR=$RAPIDJSON \
-DENABLE_LIBRI=ON \
-DLIBRI_DIR=$LIBRI \
-DLIBCOMM_DIR=$LIBCOMM \
-DUSE_CUDA=$USE_CUDA \
# -DCMAKE_CUDA_COMPILER=/path/to/cuda/bin/nvcc \
# -DNEP_DIR=$NEP_DIR \
# -DENABLE_MLALGO=1 \
# -DTorch_DIR=$LIBTORCH \
# -Dlibnpy_INCLUDE_DIR=$LIBNPY \
# -DDeePMD_DIR=$DEEPMD \
# -DENABLE_CUSOLVERMP=ON \

cmake --build $BUILD_DIR -j `nproc`
cmake --install $BUILD_DIR 2>/dev/null

# generate abacus_env.sh
cat << EOF > "${TOOL}/abacus_env.sh"
#!/bin/bash
source $INSTALL_DIR/setup
export PATH="${PREFIX}/bin":\${PATH}
EOF

# generate information
cat << EOF
========================== usage =========================
Done!
To use the installed ABACUS version
You need to source ${TOOL}/abacus_env.sh first !
EOF
3 changes: 2 additions & 1 deletion toolchain/install_abacus_toolchain_new.sh
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,7 @@ EOF
ui_print_color "${UI_GREEN}${UI_BOLD}" "🚀 Build ABACUS with your preferred toolchain:"
ui_print_color "${UI_WHITE}" " ./build_abacus_gnu.sh # GNU toolchain (GCC + OpenBLAS)"
ui_print_color "${UI_WHITE}" " ./build_abacus_intel.sh # Intel toolchain (ICC + MKL)"
ui_print_color "${UI_WHITE}" " ./build_abacus_gcc-mkl.sh # GCC + MKL"
ui_print_color "${UI_WHITE}" " ./build_abacus_gcc-aocl.sh # AMD GCC + AOCL"
ui_print_color "${UI_WHITE}" " ./build_abacus_aocc-aocl.sh # AMD AOCC + AOCL"
echo ""
Expand All @@ -220,4 +221,4 @@ EOF
}

# Run main function with all arguments
main "$@"
main "$@"
114 changes: 114 additions & 0 deletions toolchain/toolchain_gcc-mkl.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
#!/bin/bash
#SBATCH -J install
#SBATCH -N 1
#SBATCH -n 16
#SBATCH -o compile.log
#SBATCH -e compile.err

# Users can easily modify these parameters to customize the build
# Before running this script, ensure you have loaded your system packages

# Compiler Configuration
TOOLCHAIN_COMPILER="gcc-mkl"
WITH_GCC="system"
WITH_AMD="no"
WITH_INTEL="no"

# Math Libraries (Intel MKL recommended)
MATH_MODE="mkl"
WITH_MKL="system"

# MPI Implementation (OpenMPI recommended)
MPI_MODE="openmpi"
WITH_OPENMPI="install"
WITH_4TH_OPENMPI="no" # Set to "yes" for OpenMPI v4, deprecated
WITH_MPICH="no"

# Core Dependencies
WITH_CMAKE="install"
WITH_SCALAPACK="system" # MKL provides ScaLAPACK
WITH_FFTW="system" # MKL provides FFTW
WITH_LIBXC="install"
WITH_ELPA="install"

# Utility Libraries
WITH_CEREAL="install"
WITH_RAPIDJSON="install"

# Advanced Features (EXX calculations)
WITH_LIBRI="install"
WITH_LIBCOMM="install"

# Optional Features (MLALGO support)
WITH_LIBTORCH="no"
WITH_LIBNPY="no"
WITH_NEP="no"

# ELPA-GPU Support (uncomment and modify as needed)
# ENABLE_CUDA="yes"
# GPU_VERSION="75" # Check your GPU compute capability
# export CUDA_PATH="/usr/local/cuda"

# ============================================================================
# Execution Mode Control
# ============================================================================
# Dry-run mode: Show what would be done without actually executing
DRY_RUN_MODE="no" # Set to "yes" to enable dry-run mode

# Pack-run mode: Only check and install required packages
PACK_RUN_MODE="no" # Set to "yes" to enable pack-run mode

# ============================================================================
# Package Version Selection (main/alt versions)
# ============================================================================
# Choose between main (latest stable) and alt (alternative/legacy) versions
# Refer to scripts/package_versions.sh for specific version numbers

CMAKE_VERSION="main" # main=3.31.7, alt=3.30.5
OPENMPI_VERSION="main" # main=5.0.8, alt=4.1.6
ELPA_VERSION="main" # main=2025.06.001, alt=2024.05.001
LIBXC_VERSION="main" # main=7.0.0, alt=6.2.2
# Optional Libraries
LIBTORCH_VERSION="main" # main=2.1.2, alt=1.12.1 (use alt for older GLIBC)
# Note: main(2.1.2) version of LibTorch need glibc > 2.27
# Note: alt(1.12.1) version of LibTorch cannot support DeePMD-Torch for DPA

# Note: GCC-MKL toolchain uses MKL for math libraries (FFTW, ScaLAPACK)
# so OpenBLAS and ScaLAPACK version selections are not applicable

# ============================================================================
# Execute Installation (DO NOT MODIFY BELOW THIS LINE)
# ============================================================================

# Call the main installation script with configured parameters
exec ./install_abacus_toolchain_new.sh \
--with-gcc="$WITH_GCC" \
--math-mode="$MATH_MODE" \
--mpi-mode="$MPI_MODE" \
--with-mkl="$WITH_MKL" \
--with-openmpi="$WITH_OPENMPI" \
--with-mpich="$WITH_MPICH" \
--with-cmake="$WITH_CMAKE" \
--with-scalapack="$WITH_SCALAPACK" \
--with-libxc="$WITH_LIBXC" \
--with-fftw="$WITH_FFTW" \
--with-elpa="$WITH_ELPA" \
--with-cereal="$WITH_CEREAL" \
--with-rapidjson="$WITH_RAPIDJSON" \
--with-libtorch="$WITH_LIBTORCH" \
--with-nep="$WITH_NEP" \
--with-libnpy="$WITH_LIBNPY" \
--with-libri="$WITH_LIBRI" \
--with-libcomm="$WITH_LIBCOMM" \
--with-4th-openmpi="$WITH_4TH_OPENMPI" \
--package-version cmake:"$CMAKE_VERSION" \
--package-version openmpi:"$OPENMPI_VERSION" \
--package-version elpa:"$ELPA_VERSION" \
--package-version libxc:"$LIBXC_VERSION" \
--package-version libtorch:"$LIBTORCH_VERSION" \
${DRY_RUN_MODE:+$([ "$DRY_RUN_MODE" = "yes" ] && echo "--dry-run")} \
${PACK_RUN_MODE:+$([ "$PACK_RUN_MODE" = "yes" ] && echo "--pack-run")} \
${ENABLE_CUDA:+--enable-cuda} \
${GPU_VERSION:+--gpu-ver="$GPU_VERSION"} \
"$@" \
| tee compile.log
Loading