qmcpack/external_codes/mpi_wrapper/mpi3/.gitlab-ci.yml

307 lines
15 KiB
YAML

# -*-indent-tabs-mode:nil;c-basic-offset:2;tab-width:4;-*-
# Copyright 2020-2023 Alfredo A. Correa
image: debian:testing
workflow:
auto_cancel:
on_new_commit: interruptible
variables:
GIT_SUBMODULE_STRATEGY: recursive
openmpi:
stage: build
script:
- apt-get update -qq && apt-get install -qq -y --no-install-recommends ca-certificates libopenmpi-dev openmpi-bin cmake make g++ git libboost-serialization-dev
- cd .. && ln -s boost-mpi3 mpi3 && cd mpi3
- cd test
- mkdir build && cd build
- export MPI_OVERSUBSCRIBE="--oversubscribe"
- cmake .. -DCMAKE_BUILD_TYPE=Debug
- cmake --build . --parallel 2 || make VERBOSE=1
- OMPI_ALLOW_RUN_AS_ROOT=1 OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1 ctest --output-on-failure
openmpi-g++-7:
stage: build
image: debian:oldoldstable # default is gcc 8 as of Dec 2023
script:
- apt-get update -qq && apt-get install -qq -y --no-install-recommends ca-certificates libopenmpi-dev openmpi-bin cmake make g++-7 git libboost-serialization-dev
- apt-get -qq -y install wget
- wget https://github.com/Kitware/CMake/releases/download/v3.27.0-rc3/cmake-3.27.0-rc3-linux-x86_64.sh --no-verbose
- sh ./cmake-3.27.0-rc3-linux-x86_64.sh --skip-license --prefix=/usr
- cmake --version
- g++-7 --version
- cd .. && ln -s boost-mpi3 mpi3 && cd mpi3
- cd test
- mkdir build && cd build
- export MPI_OVERSUBSCRIBE="--oversubscribe"
- export MPI_ALLOW_RUN_AS_ROOT="--allow-run-as-root"
- cmake .. -DCMAKE_CXX_COMPILER=g++-7 -DCMAKE_BUILD_TYPE=Debug
- cmake --build . --parallel 2 || make VERBOSE=1
- OMPI_ALLOW_RUN_AS_ROOT=1 OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1 ctest --output-on-failure
needs: ["openmpi"]
exampi:
allow_failure: false
stage: build
script:
- apt-get update -qq && apt-get install -qq -y --no-install-recommends ca-certificates cmake g++ git libboost-serialization-dev make python3 ssh strace # ca-certificates libopenmpi-dev openmpi-bin cmake make g++ git libboost-serialization-dev
- git clone https://correaa:${EXATOKEN}@github.com/tonyskjellum/ExaMPI.git
- cd ExaMPI
- mkdir build && cd build
- cmake .. --install-prefix=$HOME/exa
- make -j 4
- make install
- export PATH=$HOME/exa/bin:$PATH
- export PATH=$HOME/exa/runtime:$PATH
- export LD_LIBRARY_PATH=$HOME/exa/lib:$LD_LIBRARY_PATH
- export MPI_PATH=$HOME/exa/bin
- export MPI_LIB=$HOME/exa/lib
- export MPI_INC=$HOME/exa/include
- export MPI_HOME=$HOME/exa
- which mpicxx
- which mpirun
- mpirun -n 2 --separate_rank --print_to_file --loghead --logfault --logexec --logcontrol tests/integration_tests/pingpong tests/integration_tests/allreduce
- mpirun -n 2 --separate_rank --print_to_file --loghead --logfault --logexec --logcontrol tests/integration_tests/pingpong tests/integration_tests/alltoall
- ctest --output-on-failure
- cd ../..
- mkdir build && cd build
- which mpicxx
- mpicxx --version
- cmake .. -DCMAKE_BUILD_TYPE=Debug -DUSE_EXAMPI=1 -DMPI_HOME=$HOME/exa
- make -j 2 || make VERBOSE=1
- ls
- ctest --output-on-failure
oneapi:
stage: build
image: intel/oneapi-hpckit:2023.0.0-devel-ubuntu22.04
script:
- apt-get update && apt-get install --no-install-recommends -y --quiet ca-certificates cmake curl g++ git make libboost-test-dev libboost-serialization-dev
- cd .. && ln -s boost-mpi3 mpi3 && cd mpi3
- cd test
- mkdir build && cd build
- icpx --version
- CXX=icpx CXXFLAGS="-O1" cmake .. -DCMAKE_BUILD_TYPE=Debug
- cmake --build . --parallel 2 || make VERBOSE=1
- ctest --output-on-failure
needs: ["openmpi"]
nvhpc-24.5 c++20:
stage: build
image: nvcr.io/nvidia/nvhpc:24.5-devel-cuda12.4-ubuntu22.04 # https://catalog.ngc.nvidia.com/orgs/nvidia/containers/nvhpc/tags
# tags:
# - non-shared
# - large-disk-space
interruptible: true
script:
- apt-get update && apt-get install --no-install-recommends -y --quiet ca-certificates cmake curl g++ git make libboost-test-dev libboost-serialization-dev
- /opt/nvidia/hpc_sdk/Linux_x86_64/2024/compilers/bin/nvc++ --version
- mkdir build && cd build
- CXX=/opt/nvidia/hpc_sdk/Linux_x86_64/2024/compilers/bin/nvc++ cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_STANDARD=20
- cmake --build . --parallel 2 || cmake --build . --verbose
- OMPI_ALLOW_RUN_AS_ROOT=1 OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1 ctest --output-on-failure
needs: ["openmpi"]
openmpi-clang:
stage: build
image: debian:testing
script:
- apt-get update -qq && apt-get install -qq -y --no-install-recommends ca-certificates libopenmpi-dev openmpi-bin cmake make clang g++ git libstdc++-12-dev libboost-serialization-dev
- cd .. && ln -s boost-mpi3 mpi3 && cd mpi3
- cd test
- mkdir build && cd build
- export MPI_OVERSUBSCRIBE="--oversubscribe"
- clang++ --version
- mpirun --version
- CXX=clang++ cmake .. -DCMAKE_BUILD_TYPE=Debug
- cmake --build . --parallel 2 || make VERBOSE=1
- OMPI_ALLOW_RUN_AS_ROOT=1 OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1 ctest --output-on-failure
needs: ["openmpi"]
openmpi-clang20:
stage: build
image: debian:stable
script:
- apt-get update -qq && apt-get install -qq -y --no-install-recommends ca-certificates libopenmpi-dev openmpi-bin cmake make clang git libstdc++-12-dev libboost-serialization-dev
- cd test
- mkdir build && cd build
- export MPI_OVERSUBSCRIBE="--oversubscribe"
- clang++ --version
- mpirun --version
- CXX=clang++ cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_STANDARD=20
- cmake --build . --parallel 2 || make VERBOSE=1
- OMPI_ALLOW_RUN_AS_ROOT=1 OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1 ctest --output-on-failure
needs: ["openmpi-clang"]
openmpi-clang-tidy:
stage: build
script:
- apt-get update -qq && apt-get install -qq -y --no-install-recommends ca-certificates libopenmpi-dev openmpi-bin clang libstdc++-12-dev clang-tidy cmake git make libboost-serialization-dev
- mkdir build && cd build
- export MPI_OVERSUBSCRIBE="--oversubscribe"
- clang++ --version
- clang-tidy --version
- CXX=clang++ cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_CLANG_TIDY="clang-tidy"
- make --jobs=2 || make VERBOSE=1
- OMPI_ALLOW_RUN_AS_ROOT=1 OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1 ctest --output-on-failure
needs: ["openmpi-clang"]
openmpi-cppcheck:
stage: build
script:
- apt-get update -qq && apt-get install -qq -y --no-install-recommends libopenmpi-dev openmpi-bin g++ libstdc++-12-dev ca-certificates cmake cppcheck git make libboost-serialization-dev pkg-config libfftw3-dev libfftw3-mpi-dev
- mkdir build && cd build
- export MPI_OVERSUBSCRIBE="--oversubscribe"
- g++ --version
- cppcheck --version
- cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_CPPCHECK="cppcheck;--force;--enable=all;--inline-suppr;--language=c++;--check-level=exhaustive;--suppress=missingIncludeSystem;--suppress=syntaxError;--suppress=unmatchedSuppression;--suppress=unusedFunction;--std=c++17;--error-exitcode=666;-UEXCLUDE_CPPCHECK"
- make --jobs=2 || make VERBOSE=1
- OMPI_ALLOW_RUN_AS_ROOT=1 OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1 ctest --output-on-failure
needs: ["openmpi"]
mpich-debug:
stage: build
script:
- apt-get update -qq && apt-get install -qq -y --no-install-recommends libopenmpi-dev openmpi-bin g++ libstdc++-12-dev ca-certificates cmake cppcheck git make libboost-serialization-dev
- cd test
- mkdir build && cd build
- export MPI_OVERSUBSCRIBE=""
- export OMPI_ALLOW_RUN_AS_ROOT=1
- export OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1
- cmake .. -DCMAKE_BUILD_TYPE=Debug
- cmake --build . --parallel 2 || cmake --build . --verbose
- ctest --output-on-failure
mpich-valgrind:
stage: build
allow_failure: true
script:
- apt-get update -qq && apt-get install -qq -y --no-install-recommends ca-certificates cmake git libboost-test-dev libboost-serialization-dev libmpich-dev make mpich valgrind
- mpirun --version
- mkdir build && cd build
- export MPI_OVERSUBSCRIBE=""
- export VALGRIND_EXE="valgrind --leak-check=full --track-origins=yes --show-leak-kinds=all --suppressions=.valgrind_suppressions --gen-suppressions=all --error-exitcode=1 "
- cmake .. -DCMAKE_BUILD_TYPE=Debug
- make --jobs=2 || make VERBOSE=1
- ulimit -n # reports current value
- ulimit -n 1024 # workaround neededed by valgrind in docker running in Fedora 37
- ctest --output-on-failure
needs: ["mpich-debug"]
qmcpack-openmpi:
stage: test
allow_failure: true
image: debian:testing
script:
- apt-get -qq update && apt-get -qq install --no-install-recommends -y libblas-dev liblapack-dev libfftw3-dev libboost-serialization-dev libopenmpi-dev gfortran g++ cmake make git ca-certificates numdiff python3 python3-numpy python3-h5py python3-mpi4py python3-scipy libxml2-dev libhdf5-dev valgrind
- git clone https://github.com/QMCPACK/qmcpack.git
- cd qmcpack
- git config --global user.email "alfredo.correa@gmail.com" && git config --global user.name "Alfredo Correa"
- git rm -r external_codes/mpi_wrapper/mpi3 && git commit -m "remove mpi3 subtree"
- git subtree add --squash -P external_codes/mpi_wrapper/mpi3 https://gitlab.com/correaa/boost-mpi3.git $CI_COMMIT_BRANCH
- cd build
- cmake -DCMAKE_C_COMPILER=mpicc -DCMAKE_CXX_COMPILER=mpicxx -DBUILD_AFQMC=1 -DBUILD_PPCONVERT=1 -DQMC_MIXED_PRECISION=1 -DCMAKE_BUILD_TYPE=Debug -DMPIEXEC_PREFLAGS="--allow-run-as-root;--bind-to;none" .. #-DCMAKE_CXX_FLAGS="-Werror"
- make --jobs=2 || make VERBOSE=1 # afqmc test_afqmc_matrix test_afqmc_numerics test_afqmc_slaterdeterminantoperations test_afqmc_walkers test_afqmc_hamiltonians test_afqmc_hamiltonian_operations test_afqmc_phmsd test_afqmc_wfn_factory test_afqmc_prop_factory test_afqmc_estimators qmc-afqmc-performance
- export VALGRIND_EXE="valgrind --leak-check=full --track-origins=yes --show-leak-kinds=all --suppressions=.valgrind_suppressions --gen-suppressions=all --error-exitcode=1 "
- OMPI_ALLOW_RUN_AS_ROOT=1 OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1 ctest -L deterministic -j 2 --output-on-failure -T memcheck # -R afqmc
- OMPI_ALLOW_RUN_AS_ROOT=1 OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1 ctest -R afqmc -j 2 --output-on-failure -T memcheck # -R afqmc
needs: ["openmpi"]
qmcpack-cuda-runner:
allow_failure: false
image: nvcr.io/nvidia/cuda:11.8.0-devel-ubuntu22.04
tags:
- nvidia-docker
stage: test
script:
- apt-get -qq update && apt-get -qq install --no-install-recommends -y libblas-dev liblapack-dev libfftw3-dev libboost-serialization-dev libopenmpi-dev gfortran g++ cmake make git ca-certificates numdiff python3 python3-numpy python3-h5py python3-mpi4py python3-scipy libxml2-dev libhdf5-dev
- cmake --version
- git clone --depth=1 https://github.com/QMCPACK/qmcpack.git
- cd qmcpack
- git config --global user.email "alfredo.correa@gmail.com" && git config --global user.name "Alfredo Correa"
- git rm -r external_codes/mpi3 && git commit -m "remove mpi3 subtree"
- git subtree add --squash -P external_codes/mpi3 $CI_REPOSITORY_URL $CI_COMMIT_BRANCH # e.g. https://gitlab.com/correaa/boost-multi.git
- cd ../qmcpack
- cd build
- CUDACXX=/usr/local/cuda/bin/nvcc cmake -DCMAKE_C_COMPILER=mpicc -DCMAKE_CXX_COMPILER=mpicxx -DBUILD_AFQMC=1 -DQMC_CXX_STANDARD=17 -DENABLE_CUDA=1 -DCMAKE_CUDA_COMPILER=/usr/local/cuda/bin/nvcc -DQMC_GPU_ARCHS=sm_61 -DCMAKE_CUDA_HOST_COMPILER=g++ -DCMAKE_CXX_FLAGS="-Wno-deprecated -Wno-deprecated-declarations" ..
- make -j4 afqmc test_afqmc_matrix test_afqmc_numerics test_afqmc_slaterdeterminantoperations test_afqmc_walkers test_afqmc_hamiltonians test_afqmc_hamiltonian_operations test_afqmc_phmsd test_afqmc_wfn_factory test_afqmc_prop_factory test_afqmc_estimators qmc-afqmc-performance
- OMPI_ALLOW_RUN_AS_ROOT=1 OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1 ctest -R afqmc --output-on-failure
needs: ["openmpi-cuda-11", "qmcpack-openmpi"]
inq-openmpi:
stage: test
image: debian:testing
tags:
- cpu
script:
- apt-get update && apt-get install --no-install-recommends -y --quiet libblas-dev liblapack-dev libfftw3-dev libboost-filesystem-dev libboost-serialization-dev libboost-iostreams-dev libopenmpi-dev libhdf5-dev gfortran g++ cmake pkg-config python3-dev make git ca-certificates wget
- cmake --version
- git clone https://gitlab.com/npneq/inq.git --recurse-submodules
- cd inq
- cd external_libs/mpi3
- git checkout $CI_COMMIT_BRANCH # check that multi repo is mirrored correctly from this repo to the submodule repo (npneq)
- cd ../..
- mkdir build && cd build
- cmake .. --install-prefix=$HOME -DCMAKE_BUILD_TYPE=Release
- make --jobs=2 || make VERBOSE=1
- make install
- OMPI_ALLOW_RUN_AS_ROOT=1 OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1 ctest --output-on-failure
needs: ["openmpi"]
# - export DEBIAN_FRONTEND=noninteractive
# - apt-get update && apt-get install --no-install-recommends -y --quiet ca-certificates git gnupg software-properties-common
# - apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/debian11/x86_64/3bf863cc.pub
# - add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/debian11/x86_64/ /"
# - add-apt-repository contrib
# - apt-get update
# - apt-get -y install cuda
# TODO(correaa) -> openmpi-cuda-11
openmpi-cuda-11:
stage: build
allow_failure: false
image: nvcr.io/nvidia/cuda:11.8.0-devel-ubuntu22.04
script:
- apt-get update && apt-get install --no-install-recommends -y cmake libboost-test-dev libboost-serialization-dev libopenmpi-dev make git
- /usr/local/cuda-11/bin/nvcc --version
- cd .. && ln -s boost-mpi3 mpi3 && cd mpi3
- cd test
- mkdir build && cd build
- export MPI_OVERSUBSCRIBE="--oversubscribe"
- cmake .. -DCMAKE_CUDA_COMPILER=/usr/local/cuda-11/bin/nvcc -DCMAKE_BUILD_TYPE=Debug -DENABLE_CUDA=1
- cmake --build . --parallel 2 || cmake --build . --verbose
- OMPI_ALLOW_RUN_AS_ROOT=1 OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1 ctest --output-on-failure
needs: ["openmpi"]
# - wget https://cmake.org/files/v3.21/cmake-3.21.3-linux-x86_64.sh --no-verbose # following https://askubuntu.com/a/865294/15943
# - mkdir /opt/cmake
# - sh cmake-3.21.3-linux-x86_64.sh --skip-license --prefix=/opt/cmake
# - ln -s /opt/cmake/bin/cmake /usr/local/bin/cmake
inq-cuda-11-openmpi:
stage: build
allow_failure: true
image: nvcr.io/nvidia/cuda:11.8.0-devel-ubuntu22.04
tags:
- nvidia-docker
script:
- apt-get update && apt-get install --no-install-recommends -y --quiet cmake git libblas-dev liblapack-dev libfftw3-dev libboost-filesystem-dev libboost-iostreams-dev libboost-serialization-dev libopenmpi-dev libhdf5-dev ca-certificates gfortran g++ make pkg-config python3-dev wget
- cmake --version
- git clone https://gitlab.com/npneq/inq.git --recurse-submodules
- cd inq
- cd external_libs/mpi3
- git checkout $CI_COMMIT_BRANCH
- cd ../..
- mkdir build && cd build
- /usr/local/cuda-11/bin/nvcc -V
- export MPI_OVERSUBSCRIBE="--oversubscribe"
- CUDACXX=/usr/local/cuda/bin/nvcc cmake .. --install-prefix=$HOME -DENABLE_CUDA=1 -DCMAKE_BUILD_TYPE=Release -DCMAKE_CUDA_ARCHITECTURES=80
- make --jobs=2 # silicon
- make install
- OMPI_ALLOW_RUN_AS_ROOT=1 OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1 ctest --output-on-failure # --jobs=2 # -R silicon
needs:
- openmpi-cuda-11