OLCF Summit

如果这是您第一次在 OLCF 的 Summit 上构建 MFIX-Exa,请先查看以下一般说明和 基础 部分。

  • 要访问 Summit,您需要一个 OLCF 账户 和一个 RSA 令牌。

  • MFIX-Exa 账户的名称是 cfd122

  • 这些说明在登录节点上使用 -j8 个 CPU 构建 MFIX-Exa。 如果流量较高,您可能需要减少此值, 或者如果您在计算节点上交互使用,您可能希望增加此值。

  • cmake 指令编译到 build 目录。 gmake 指令编译到 exec 目录。

  • 对于依赖项,假定您已设置以下环境变量:

    export HYPRE_INSTALL_DIR=$HOME/<path/to/my/hypre-install-dir>
    export CSG_INSTALL_DIR=$HOME/<path/to/my/csg-dep-install-dir>
    export CSG_LIB_DIR=$HOME/<path/to/my/csg-lib-install-dir>
    export ASCENT_INSTALL_DIR=$HOME/<path/to/my/ascent-install-dir>
    

    到一个您有读/写权限的路径。 如果您希望使用可选依赖项构建 MFIX-Exa,您需要记住这些路径。

  • 在构建 mfix 可执行文件(使用 cmake)之后, 您可以通过在 build 目录中执行以下命令构建 PIC-to-DEM 重启应用程序

    cmake --build . --target pic2dem
    

基础

源码

在构建之前,首先按照 MFIX-Exa 网站 上的说明获取源码副本。

模块

所有以下构建说明均已在以下模块中测试

module load cmake/3.23.2
module load gcc/9.3.0

请**不要**清除您的默认模块。您不需要加载 MPI 模块,这是由预加载的 spectrum-mpi 模块处理的。 启用 GPU 的构建还需要

module load cuda/11.5.2

利用外部依赖项的完整构建还需要设置 某些环境变量,如下所述。

构建 MFIX-Exa

以下命令是超级构建说明,即 AMReX 作为 MFIX-Exa 构建过程的一部分构建。 要使用 hypre,csg 和/或 ascent 依赖项构建 MFIX-Exa, 您首先需要构建和安装这些库及其依赖项。 下文提供了构建必要依赖项的说明, 并应首先成功安装。代码的构建主要有两种方法 cmakegmake,它们分别提供如下。

cmake

cmake -DCMAKE_C_COMPILER=gcc \
      -DCMAKE_CXX_COMPILER=g++ \
      -DMFIX_MPI=yes \
      -DMFIX_OMP=no \
      -DMFIX_GPU_BACKEND=NONE \
      -DAMReX_TINY_PROFILE=no \
      -DMFIX_CSG=no \
      -DMFIX_HYPRE=no \
      -DCMAKE_BUILD_TYPE=Release \
      ../
make -j8
make -C exec -j8 \
     COMP=gnu \
     USE_MPI=TRUE \
     USE_OMP=FALSE \
     USE_CUDA=FALSE \
     USE_TINY_PROFILE=FALSE \
     USE_CSG=FALSE \
     USE_HYPRE=FALSE \
     DEBUG=FALSE

可选构建依赖

在执行上述任何完整构建说明之前,需要构建和安装以下依赖项。

  1. 设置环境助手

    export CC=$(which gcc)
    export CXX=$(which g++)
    export FC=$(which gfortran)
    mkdir $HOME/scratch && cd $HOME/scratch
    

备注

无论出于何种原因,构建支持 GPU 的 hypre 都不喜欢这样。 因此,如果您要一次性构建所有内容,请从支持 cuda 的 hypre 开始, 然后设置编译器并构建其余部分(包括不支持 cuda 的 hypre)。

  1. HYPRE

    git clone https://github.com/hypre-space/hypre.git
    pushd hypre/src/
    git checkout v2.26.0
    ./configure --prefix=$HYPRE_INSTALL_DIR --with-MPI
    make -j8 install
    popd
    
  2. Catch2

    git clone --depth 1 --branch v2.13.7 https://github.com/catchorg/Catch2
    pushd Catch2/
    cmake -S . -B build -DCMAKE_INSTALL_PREFIX=$CSG_INSTALL_DIR
    cd build/
    make -j8 install
    popd
    
  3. GMP

    wget --no-check-certificate https://ftp.gnu.org/gnu/gmp/gmp-6.2.1.tar.xz
    tar -xf gmp-6.2.1.tar.xz
    pushd gmp-6.2.1
    ./configure --prefix=$CSG_INSTALL_DIR
    make -j8 install
    popd
    
  4. CGAL

    git clone --depth 1 --branch v5.3 https://github.com/CGAL/cgal
    pushd cgal/
    cmake -S . -B build -DCMAKE_INSTALL_PREFIX=$CSG_INSTALL_DIR
    cd build/
    make -j8 install
    popd
    
  5. PEGTL

    git clone --branch 3.2.2 https://github.com/taocpp/PEGTL
    pushd PEGTL/
    cmake -S . -B build -DCMAKE_INSTALL_PREFIX=$CSG_INSTALL_DIR
    cd build/
    make -j8 install
    popd
    
  6. CSG EB 库 (gmake)

    对于 gmake 安装说明,您需要使用 cmake 或 gmake 将 libcsgeb 安装到 $CSG_LIB_DIR

    cd subprojects/csg-eb
    
    module load boost/1.77.0
    export Boost_INCLUDE_DIR="-I$OLCF_BOOST_ROOT/include"
    
    export CSG_DIR=$CSG_INSTALL_DIR
    export CMAKE_PREFIX_PATH=$CMAKE_PREFIX_PATH:$CSG_DIR
    
    cmake -S . -B build -DCMAKE_INSTALL_PREFIX=$CSG_LIB_DIR \
          -DCMAKE_BUILD_TYPE="Release"
    cd build
    make -j8 install
    
  7. Conduit

    git clone --recursive https://github.com/LLNL/conduit.git
    pushd conduit/
    git checkout v0.8.6
    mkdir build && cd build
    cmake -S ../src -DCMAKE_INSTALL_PREFIX=$ASCENT_INSTALL_DIR \
          -DCMAKE_BUILD_TYPE=Release \
          -DENABLE_OPENMP=OFF \
          -DENABLE_MPI=ON \
          -DENABLE_CUDA=OFF \
          -DCMAKE_C_COMPILER=$(which gcc) \
          -DCMAKE_CXX_COMPILER=$(which g++)
    make -j8 install
    popd
    
  8. Vtk-m

    git clone --branch master https://gitlab.kitware.com/vtk/vtk-m.git
    pushd vtk-m/
    git checkout v1.9.0
    mkdir build && cd build/
    cmake -S ../ -DCMAKE_INSTALL_PREFIX=$ASCENT_INSTALL_DIR \
          -DCMAKE_BUILD_TYPE=Release \
          -DVTKm_ENABLE_OPENMP=OFF \
          -DVTKm_ENABLE_MPI=ON \
          -DVTKm_ENABLE_CUDA=OFF \
          -DVTKm_USE_64BIT_IDS=OFF \
          -DVTKm_USE_DOUBLE_PRECISION=ON \
          -DVTKm_USE_DEFAULT_TYPES_FOR_ASCENT=ON \
          -DVTKm_NO_DEPRECATED_VIRTUAL=ON
    make -j8 install
    popd
    
  9. Ascent

    git clone --recursive https://github.com/Alpine-DAV/ascent.git
    pushd ascent
    git checkout v0.9.0
    mkdir build && cd build/
    cmake -S ../src -DCMAKE_INSTALL_PREFIX=$ASCENT_INSTALL_DIR \
          -DCMAKE_BUILD_TYPE=Release \
          -DCONDUIT_DIR=$ASCENT_INSTALL_DIR \
          -DVTKM_DIR=$ASCENT_INSTALL_DIR \
          -DENABLE_VTKH=ON \
          -DENABLE_FORTRAN=OFF \
          -DENABLE_PYTHON=OFF \
          -DENABLE_DOCS=OFF \
          -DBUILD_SHARED_LIBS=ON
    make -j8 install
    popd
    

运行作业

常见的 Slurm 命令:

  • bsub runit_cpu.sh 提交一个 CPU 作业到队列

  • bjobs -u USER 检查用户 USER 的作业状态

  • bkill JOBID 终止 ID 为 JOBID 的作业

  • bsub -W 0:20 -nnodes 1 -P <ALLOC> 交互获取一个节点 20 分钟

下面是 GPU 的示例运行脚本。对于仅 CPU 的情况, 您需要移除 module load cuda,设置 --gpu_per_rs 0 并移除运行行中的 --bind packed:1

#!/bin/bash
#BSUB -P CFD122
#BSUB -W 00:20
#BSUB -nnodes 2
#BSUB -J MFIX
#BSUB -o MFIXo.%J
#BSUB -e MFIXe.%J
module load gcc/9.3.0
module load cuda/11.5.2
module load mpfr/4.0.2
module load boost/1.77.0
module list
set -x
omp=1
export OMP_NUM_THREADS=${omp}

jsrun --nrs 12 --tasks_per_rs 1 --cpu_per_rs 1 --gpu_per_rs 1 --launch_distribution packed --bind packed:1 ./mfix inputs > screen.txt