.. _install-dependencies: Dependencies ============ ImpactX depends on the following popular third party software. Please see installation instructions below. - a mature `C++17 `__ compiler, e.g., GCC 8.4+, Clang 7, NVCC 11.0, MSVC 19.15 or newer - `CMake 3.24.0+ `__ - `Git 2.18+ `__ - `AMReX `__: we automatically download and compile a copy - `ABLASTR/WarpX `__: we automatically download and compile a copy Optional dependencies include: - `MPI 3.0+ `__: for multi-node and/or multi-GPU execution - for on-node accelerated compute *one of either*: - `OpenMP 3.1+ `__: for threaded CPU execution or - `CUDA Toolkit 11.7+ `__: for Nvidia GPU support (see `matching host-compilers `_) or - `ROCm 5.2+ (5.5+ recommended) `__: for AMD GPU support or - `oneAPI `__: for Intel GPU support - `vir::stdx::simd `__: for SIMD-accelerated CPU acceleration, can be combined with OpenMP - `FFTW3 `__: for algorithms such as IGF space charge solver or CSR when running on CPU or with SYCL - also needs the ``pkg-config`` tool on Unix - `openPMD-api 0.16.1+ `__: we automatically download and compile a copy of openPMD-api for openPMD I/O support - see `optional I/O backends `__ - `CCache `__: to speed up rebuilds (For CUDA support, needs version 3.7.9+ and 4.2+ is recommended) - `Ninja `__: for faster parallel compiles - `Python 3.9+ `__ - `mpi4py `__ - `numpy `__ - `pals-schema `__ - `quantiphy `__ - `openPMD-api `__ - see our ``requirements.txt`` file for compatible versions - web browser/Jupyter Dashboard: `trame `__ - see our ``src/python/impactx/dashboard/requirements.txt`` file for all packages If you are on a high-performance computing (HPC) system, then :ref:`please see our separate HPC documentation `. For all other systems, we recommend to use a **package dependency manager**: Pick *one* of the installation methods below to install all dependencies for ImpactX development in a consistent manner. Conda-Forge (Linux/macOS/Windows) --------------------------------- `Conda-Forge `__ is a repository for cross-compatible, user-level packages. .. tip:: We recommend to deactivate that conda self-activates its ``base`` environment. This `avoids interference with the system and other package managers `__. .. code-block:: bash conda config --set auto_activate_base false In order to make sure that the conda configuration uses ``conda-forge`` as the only channel, which will help avoid issues with blocked ``defaults`` or ``anaconda`` repositories, please set the following configurations: .. code-block:: bash conda config --add channels conda-forge conda config --set channel_priority strict .. tab-set:: .. tab-item:: With MPI (only Linux/macOS) .. code-block:: bash conda create -n impactx-cpu-mpich-dev -c conda-forge blaspp boost ccache cmake compilers git lapackpp "openpmd-api=*=mpi_mpich*" packaging pytest pytest-benchmark python python-build numpy pandas quantiphy scipy setuptools yt "fftw=*=mpi_mpich*" pkg-config matplotlib mamba ninja mpich pip virtualenv vir-simd wheel conda activate impactx-cpu-mpich-dev # compile ImpactX with -DImpactX_MPI=ON # for pip, use: export IMPACTX_MPI=ON .. tab-item:: Without MPI .. code-block:: bash conda create -n impactx-cpu-dev -c conda-forge blaspp boost ccache cmake compilers git lapackpp openpmd-api packaging pytest pytest-benchmark python python-build numpy pandas quantiphy scipy setuptools yt fftw pkg-config matplotlib mamba ninja pip virtualenv vir-simd wheel conda activate impactx-cpu-dev # compile ImpactX with -DImpactX_MPI=OFF # for pip, use: export IMPACTX_MPI=OFF For OpenMP support, you will further need: .. tab-set:: .. tab-item:: Linux .. code-block:: bash conda install -c conda-forge libgomp .. tab-item:: macOS or Windows .. code-block:: bash conda install -c conda-forge llvm-openmp For the ImpactX browser/Jupyter dashboard dependencies, install from the ImpactX source directory: .. code-block:: bash python3 -m pip install -r src/python/impactx/dashboard/requirements.txt Spack (Linux/macOS) ------------------- `Spack `__ is a user-level package manager. It is primarily written for Linux, with slightly less support for macOS, and future support for Windows. First, download a `WarpX Spack desktop development environment `__ of your choice (which will also work for ImpactX). For most desktop developments, pick the OpenMP environment for CPUs unless you have a supported GPU. * **Debian/Ubuntu** Linux: * OpenMP: ``system=ubuntu; compute=openmp`` (CPUs) * CUDA: ``system=ubuntu; compute=cuda`` (Nvidia GPUs) * ROCm: ``system=ubuntu; compute=rocm`` (AMD GPUs) * SYCL: *todo* (Intel GPUs) * **macOS**: first, prepare with ``brew install gpg2; brew install gcc`` * OpenMP: ``system=macos; compute=openmp`` If you already `installed Spack `__, we recommend to activate its `binary caches `__ for faster builds: .. code-block:: bash spack mirror add rolling https://binaries.spack.io/develop spack buildcache keys --install --trust Now install the WarpX/ImpactX dependencies in a new development environment: .. code-block:: bash # download environment file curl -sLO https://raw.githubusercontent.com/BLAST-WarpX/warpx/development/Tools/machines/desktop/spack-${system}-${compute}.yaml # create new development environment spack env create impactx-${compute}-dev spack-${system}-${compute}.yaml spack env activate impactx-${compute}-dev # installation spack install python3 -m pip install jupyter matplotlib numpy openpmd-api openpmd-viewer pandas quantiphy scipy virtualenv yt For the ImpactX browser/Jupyter dashboard dependencies, install from the ImpactX source directory: .. code-block:: bash python3 -m pip install -r src/python/impactx/dashboard/requirements.txt In new terminal sessions, re-activate the environment with .. code-block:: bash spack env activate impactx-openmp-dev again. Replace ``openmp`` with the equivalent you chose. Compile ImpactX with ``-DImpactX_MPI=ON``. For ``pip``, use ``export IMPACTX_MPI=ON``. Brew (macOS/Linux) ------------------ `Homebrew (Brew) `__ is a user-level package manager primarily for `Apple macOS `__, but also supports Linux. .. code-block:: bash brew update brew tap openpmd/openpmd brew install adios2 # for openPMD brew install ccache brew install cmake brew install fftw # for IGF, CSR brew install git brew install hdf5-mpi # for openPMD brew install libomp brew unlink gcc brew link --force libomp brew install pkg-config # for fftw brew install open-mpi brew install openblas # for PSATD in RZ brew install openpmd-api # for openPMD If you also want to compile with PSATD in RZ, you need to manually install BLAS++ and LAPACK++: .. code-block:: bash sudo mkdir -p /usr/local/bin/ sudo curl -L -o /usr/local/bin/cmake-easyinstall https://raw.githubusercontent.com/ax3l/cmake-easyinstall/main/cmake-easyinstall sudo chmod a+x /usr/local/bin/cmake-easyinstall cmake-easyinstall --prefix=/usr/local git+https://github.com/icl-utk-edu/blaspp.git \ -Duse_openmp=OFF -Dbuild_tests=OFF -DCMAKE_VERBOSE_MAKEFILE=ON cmake-easyinstall --prefix=/usr/local git+https://github.com/icl-utk-edu/lapackpp.git \ -Duse_cmake_find_lapack=ON -Dbuild_tests=OFF -DCMAKE_VERBOSE_MAKEFILE=ON Compile ImpactX with ``-DImpactX_MPI=ON``. For ``pip``, use ``export IMPACTX_MPI=ON``. APT (Debian/Ubuntu Linux) ------------------------- The `Advanced Package Tool (APT) `__ is a system-level package manager on Debian-based Linux distributions, including Ubuntu. .. tab-set:: .. tab-item:: With MPI (only Linux/macOS) .. code-block:: bash sudo apt update sudo apt install build-essential ccache cmake g++ git libfftw3-mpi-dev libfftw3-dev libhdf5-openmpi-dev libopenmpi-dev pkg-config python3 python3-matplotlib python3-numpy python3-pandas python3-pip python3-scipy python3-venv # optional: # for CUDA, either install # https://developer.nvidia.com/cuda-downloads (preferred) # or, if your Debian/Ubuntu is new enough, use the packages # sudo apt install nvidia-cuda-dev libcub-dev # compile ImpactX with -DImpactX_MPI=ON # for pip, use: export IMPACTX_MPI=ON .. tab-item:: Without MPI .. code-block:: bash sudo apt update sudo apt install build-essential ccache cmake g++ git libfftw3-dev libfftw3-dev libhdf5-dev pkg-config python3 python3-matplotlib python3-numpy python3-pandas python3-pip python3-scipy python3-venv # optional: # for CUDA, either install # https://developer.nvidia.com/cuda-downloads (preferred) # or, if your Debian/Ubuntu is new enough, use the packages # sudo apt install nvidia-cuda-dev libcub-dev # compile ImpactX with -DImpactX_MPI=OFF # for pip, use: export IMPACTX_MPI=OFF