OLCF Frontier
如果这是您第一次在 Joule2 上构建 MFIX-Exa,请先查看以下常规说明和 基础 部分。
要访问 Summit,您需要一个 OLCF 账户 和一个 RSA 令牌。
MFIX-Exa 账户的名称是
cfd122
这些说明在登录节点上使用
-j8
个 CPU 构建 MFIX-Exa。 如果流量较高,您可能需要减少此值, 或者如果您在计算节点上交互使用,您可能希望增加此值。这些说明假定您在
mfix
目录内的一个目录中进行编译。对于依赖项,假定您已设置以下环境变量:
export HYPRE_INSTALL_DIR=$HOME/<path/to/my/hypre-install-dir> export CSG_INSTALL_DIR=$HOME/<path/to/my/csg-dep-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
这些说明针对 Cray 编程环境。 GNU PE _应该_ 也可以工作,但尚未测试。 请参见关于 Crusher TDS 的先前说明。
警告
当前 MFIX-Exa 在使用 ascent 支持时会遇到浮点异常。 确保您输入中的所有 fpe 陷阱均已关闭。
基础
源码
在构建之前,首先按照 MFIX-Exa 网站 上的说明获取源码副本。
模块
这些构建说明针对(默认)``PrgEnv-cray``
编程环境和 cmake
构建方法。
module purge
module reset
module load cmake/3.23.2
module load cpe/22.12
module load craype-accel-amd-gfx90a
module load cray-mpich/8.1.23
module load gmp/6.2.1
module load boost/1.79.0
module purge
module reset
module load cmake/3.23.2
module load cpe/22.12
module load craype-accel-amd-gfx90a
module load rocm/5.4.3
module load cray-mpich/8.1.23
module load cce/15.0.0 # 必须在 rocm 之后重新加载
module load gmp/6.2.1
module load boost/1.79.0
export MPICH_GPU_SUPPORT_ENABLED=1
export CFLAGS="-I${ROCM_PATH}/include"
export CXXFLAGS="-I${ROCM_PATH}/include"
export LDFLAGS="-L${ROCM_PATH}/lib -lamdhip64"
构建 MFIX-Exa
以下命令是超级构建说明,即
AMReX 作为 MFIX-Exa 构建过程的一部分构建。
要使用 hypre,csg 和/或 ascent 依赖项构建 MFIX-Exa,
您首先需要构建和安装这些库及其依赖项。
下面提供了构建必要依赖项的说明,
并应首先成功安装。这些说明目前
仅提供给 cmake
。
cmake -DCMAKE_BUILD_TYPE=Release \
-DAMReX_TINY_PROFILE=no \
-DMFIX_MPI=yes \
-DMFIX_OMP=no \
-DMFIX_GPU_BACKEND=NONE \
-DMFIX_CSG=no \
-DMFIX_HYPRE=no \
../
make -j8
export AMREX_AMD_ARCH=gfx90a
cmake -DCMAKE_BUILD_TYPE=Release \
-DAMReX_TINY_PROFILE=no \
-DMFIX_MPI=yes \
-DMFIX_OMP=no \
-DMFIX_GPU_BACKEND=HIP \
-DMFIX_CSG=no \
-DMFIX_HYPRE=no \
../
make -j8
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_INCLUDE_DIR="-I$OLCF_BOOST_ROOT/include"
cmake -DCMAKE_BUILD_TYPE=Release \
-DAMReX_TINY_PROFILE=no \
-DMFIX_MPI=yes \
-DMFIX_OMP=no \
-DMFIX_GPU_BACKEND=NONE \
-DMFIX_CSG=yes \
-DMFIX_HYPRE=yes \
-DAMReX_ASCENT=yes \
-DAMReX_CONDUIT=yes \
../mfix
make -j8
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_INCLUDE_DIR="-I$OLCF_BOOST_ROOT/include"
export AMREX_AMD_ARCH=gfx90a
cmake -DCMAKE_BUILD_TYPE=Release \
-DAMReX_TINY_PROFILE=no \
-DMFIX_MPI=yes \
-DMFIX_OMP=no \
-DAMReX_CONDUIT=yes \
-DMFIX_GPU_BACKEND=HIP \
-DGPUS_PER_NODE=8 \
-DMFIX_CSG=yes \
-DMFIX_HYPRE=yes \
-DAMReX_ASCENT=yes \
../mfix
make -j8
可选构建依赖
在遵循上述完整构建说明之前,需要构建和安装以下依赖项。
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-hip \ --with-gpu-arch=gfx90a \ --enable-rocsparse \ --enable-rocrand \ --enable-unified-memory \ --enable-device-memory-pool \ --with-MPI-lib-dirs="${MPICH_DIR}/lib ${CRAY_MPICH_ROOTDIR}/gtl/lib ${ROCM_PATH}/lib" \ --with-MPI-libs="mpi mpi_gtl_hsa amdhip64" \ --with-MPI-include="${MPICH_DIR}/include {ROCM_PATH}/include" 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
MPFR
wget https://www.mpfr.org/mpfr-current/mpfr-4.2.0.tar.gz tar -zxvf mpfr-4.2.0.tar.gz pushd mpfr-4.2.0/ ./configure --prefix=$CSG_INSTALL_DIR \ --with-gmp-lib=${OLCF_GMP_ROOT}/lib \ --with-gmp-include=${OLCF_GMP_ROOT}/include 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
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 \ -DENABLE_PYTHON=OFF \ -DENABLE_GTEST=OFF \ -DENABLE_TESTS=OFF 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 \ -DVTKm_ENABLE_TESTING=OFF 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 \ -DENABLE_GTEST=OFF \ -DENABLE_TESTS=OFF make -j8 install popd
运行作业
常见的 Slurm 命令:
sinfo
查看可用/已分配的资源sbatch runit.sh
提交一个 CPU 作业到队列squeue -u USER
检查用户 USER 的作业状态squeue -p PARTITION
检查分区 PARTITION 的作业状态scancel JOBID
终止 ID 为 JOBID 的作业salloc -N 1 -q debug -A CFD122 -J build -t 01:00:00
获取一个交互节点一小时
示例运行脚本:
警告
即使运行仅 CPU 的 MFIX-Exa 构建,您**仍然**需要
加载 ROCm 以避免缺少加载共享库:libamdhip64.so.5)
错误。 FI_*
标志似乎对于仅 CPU 的运行不是必需的,
但这尚未经过广泛测试。
#!/bin/bash -l
#SBATCH -A CFD122
#SBATCH -J runxyz
#SBATCH -o job_%x-%j.out
#SBATCH -e job_%x-%j.err
#SBATCH --threads-per-core=1
#SBATCH -t 00:15:00
#SBATCH -N 2
nodes=2
nrs=16
omp=1
module purge
module reset
module load cmake/3.23.2
module load cpe/22.12
module load craype-accel-amd-gfx90a
module load rocm/5.4.3
module load cray-mpich/8.1.23
module load cce/15.0.0 # 必须在 rocm 之后加载
module load gmp/6.2.1
module load boost/1.79.0
export OMP_NUM_THREADS=$omp
export MPICH_GPU_SUPPORT_ENABLED=1 # 仅 CPU 请移除
#export FI_MR_CACHE_MAX_COUNT=0 # libfabric 禁用缓存
export FI_MR_CACHE_MONITOR=memhooks
export FI_CXI_RX_MATCH_MODE=software
export FI_CXI_REQ_BUF_SIZE=12582912
export FI_CXI_REQ_BUF_MIN_POSTED=6
export FI_CXI_DEFAULT_CQ_SIZE=131072
srun -N $nodes -n $nrs -c1 --ntasks-per-gpu=1 --gpu-bind=closest ./mfix inputs > screen.txt
#cpu srun -N $nodes -n $nrs -c1 ./mfix inputs > screen.txt