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,
您首先需要构建和安装这些库及其依赖项。
下文提供了构建必要依赖项的说明,
并应首先成功安装。代码的构建主要有两种方法
cmake
和 gmake
,它们分别提供如下。
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
cmake -DCMAKE_C_COMPILER=gcc \
-DCMAKE_CXX_COMPILER=g++ \
-DMFIX_MPI=yes \
-DMFIX_OMP=no \
-DMFIX_CSG=no \
-DMFIX_HYPRE=no \
-DMFIX_GPU_BACKEND=CUDA \
-DAMReX_CUDA_ARCH=7.0 \
-DCMAKE_CUDA_ARCHITECTURES="70" \
-DGPUS_PER_SOCKET=1 \
-DGPUS_PER_NODE=2 \
-DAMReX_TINY_PROFILE=no \
-DCMAKE_BUILD_TYPE=Release \
../
make -j8
module load mpfr/4.0.2
module load boost/1.77.0
export HYPRE_DIR=$HYPRE_INSTALL_DIR
export HYPRE_ROOT=$HYPRE_DIR
export HYPRE_LIBRARIES=$HYPRE_DIR/lib
export HYPRE_INCLUDE_DIRS=$HYPRE_DIR/include
export ASCENT_DIR=$ASCENT_INSTALL_DIR
export CONDUIT_DIR=$ASCENT_DIR
export CMAKE_PREFIX_PATH=$CMAKE_PREFIX_PATH:$ASCENT_DIR/lib/cmake/ascent
export CMAKE_PREFIX_PATH=$CMAKE_PREFIX_PATH:$ASCENT_DIR/lib/cmake/conduit
export CSG_DIR=$CSG_INSTALL_DIR/csg-deps
export CMAKE_PREFIX_PATH=$CMAKE_PREFIX_PATH:$CSG_DIR
export BOOST_ROOT=$OLCF_BOOST_ROOT
cmake -DCMAKE_C_COMPILER=gcc \
-DCMAKE_CXX_COMPILER=g++ \
-DMFIX_MPI=yes \
-DMFIX_OMP=no \
-DMFIX_CSG=yes \
-DMFIX_HYPRE=yes \
-DAMReX_ASCENT=yes \
-DAMReX_CONDUIT=yes \
-DMFIX_GPU_BACKEND=NONE \
-DAMReX_TINY_PROFILE=no \
-DCMAKE_BUILD_TYPE=Release \
../
make -j8
module load mpfr/4.0.2
module load boost/1.77.0
export HYPRE_DIR=$HYPRE_INSTALL_DIR
export HYPRE_ROOT=$HYPRE_DIR
export HYPRE_LIBRARIES=$HYPRE_DIR/lib
export HYPRE_INCLUDE_DIRS=$HYPRE_DIR/include
export ASCENT_DIR=$ASCENT_INSTALL_DIR
export CONDUIT_DIR=$ASCENT_DIR
export CMAKE_PREFIX_PATH=$CMAKE_PREFIX_PATH:$ASCENT_DIR/lib/cmake/ascent
export CMAKE_PREFIX_PATH=$CMAKE_PREFIX_PATH:$ASCENT_DIR/lib/cmake/conduit
export CSG_DIR=$CSG_INSTALL_DIR
export CMAKE_PREFIX_PATH=$CMAKE_PREFIX_PATH:$CSG_DIR
export BOOST_ROOT=$OLCF_BOOST_ROOT
cmake -DCMAKE_C_COMPILER=gcc \
-DCMAKE_CXX_COMPILER=g++ \
-DBoost_INCLUDE_DIR="$BOOST_ROOT/include" \
-DMFIX_MPI=yes \
-DMFIX_OMP=no \
-DMFIX_CSG=yes \
-DMFIX_HYPRE=yes \
-DAMReX_ASCENT=yes \
-DAMReX_CONDUIT=yes \
-DMFIX_GPU_BACKEND=CUDA \
-DAMReX_CUDA_ARCH=7.0 \
-DCMAKE_CUDA_ARCHITECTURES="70" \
-DGPUS_PER_SOCKET=1 \
-DGPUS_PER_NODE=2 \
-DAMReX_TINY_PROFILE=no \
-DCMAKE_BUILD_TYPE=Release \
../mfix
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
make -C exec -j8
COMP=gnu \
USE_MPI=TRUE \
USE_OMP=FALSE \
USE_CUDA=TRUE \
CUDA_ARCH=7.0 \
USE_TINY_PROFILE=FALSE \
USE_CSG=FALSE \
USE_HYPRE=FALSE \
DEBUG=FALSE
module load mpfr/4.0.2
module load boost/1.77.0
export HYPRE_DIR=$HYPRE_INSTALL_DIR
export HYPRE_HOME=$HYPRE_DIR
export ASCENT_DIR=$ASCENT_INSTALL_DIR
export CONDUIT_DIR=$ASCENT_DIR
export CSGEB_HOME=$CSG_LIB_DIR
export LDFLAGS="-lmpfr -L$CSG_INSTALL_DIR/lib -Wl,-rpath=$CSG_INSTALL_DIR"
make -C exec -j8 \
COMP=gnu \
USE_MPI=TRUE \
USE_OMP=FALSE \
USE_CUDA=FALSE \
USE_TINY_PROFILE=FALSE \
USE_CSG=TRUE \
USE_HYPRE=TRUE \
USE_ASCENT=TRUE \
USE_CONDUIT=TRUE \
DEBUG=FALSE
module load mpfr/4.0.2
module load boost/1.77.0
export HYPRE_DIR=$HYPRE_INSTALL_DIR
export HYPRE_HOME=$HYPRE_DIR
export ASCENT_DIR=$ASCENT_INSTALL_DIR
export CONDUIT_DIR=$ASCENT_DIR
export CSGEB_HOME=$CSG_LIB_DIR
export LDFLAGS="-lmpfr -L$CSG_INSTALL_DIR/lib -Wl,-rpath=$CSG_INSTALL_DIR"
make -C exec -j8 COMP=gnu \
USE_MPI=TRUE \
USE_OMP=FALSE \
USE_CUDA=TRUE \
CUDA_ARCH=7.0 \
USE_TINY_PROFILE=FALSE \
USE_CSG=TRUE \
USE_HYPRE=TRUE \
USE_ASCENT=TRUE \
USE_CONDUIT=TRUE \
DEBUG=FALSE
可选构建依赖
在执行上述任何完整构建说明之前,需要构建和安装以下依赖项。
设置环境助手
export CC=$(which gcc) export CXX=$(which g++) export FC=$(which gfortran) mkdir $HOME/scratch && cd $HOME/scratch
备注
无论出于何种原因,构建支持 GPU 的 hypre 都不喜欢这样。 因此,如果您要一次性构建所有内容,请从支持 cuda 的 hypre 开始, 然后设置编译器并构建其余部分(包括不支持 cuda 的 hypre)。
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
git clone https://github.com/hypre-space/hypre.git pushd hypre/src/ git checkout v2.26.0 ./configure --prefix=$HYPRE_INSTALL_DIR \ --without-superlu \ --disable-bigint \ --without-openmp \ --enable-shared \ --with-MPI \ --with-cuda \ --with-gpu-arch="70" \ --with-cuda-home=$OLCF_CUDA_ROOT \ --enable-cusparse \ --enable-curand make -j8 install popd
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
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
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
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
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
export CSG_DIR=$CSG_INSTALL_DIR make -C subprojects/csg-eb install DESTDIR=$CSG_LIB_DIR \ BOOST_HOME=$OLCF_BOOST_ROOT \ PEGTL_HOME=$CSG_DIR \ CGAL_HOME=$CSG_DIR \ CATCH2_HOME=$CSG_DIR \ ENABLE_CGAL=TRUE
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
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
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