容器的md5值: 2f6b50170174e95df1edeb31aa042592

使用方法：
(注：“/path/to”表示举例路径，现网需要根据实际情况调整，建议部署在共享路径中，后续章节凡是遇到安装路径的命令，都以现网实际规划的安装路径为准进行替换，不再单独说明。)

一、安装singularity
yum -y install libatomic libstdc++ libstdc++-devel libseccomp-devel glib2-devel gcc squashfs-tools tar
cd /path/to/go_build 
wget https://go.dev/dl/go1.19.linux-arm64.tar.gz --no-ch 
tar -C /path/to/go_install -xf go1.19.linux-arm64.tar.gz 
export PATH=/path/to/go_install/go/bin:$PATH
source ~/.bashrc

cd /path/to/singularity_build 
wget https://github.com/sylabs/singularity/releases/download/v3.10.2/singularity-ce-3.10.2.tar.gz --no-ch 
tar -xf singularity-ce-3.10.2.tar.gz 
cd singularity-ce-3.10.2 
./mconfig --prefix=/path/to/singularity_install
make -C ./builddir 
make -C ./builddir install 
export PATH=/path/to/singularity_install/bin:$PATH

二、安装hmpi
cd /path/to/bs_build
wget https://mirrors.huaweicloud.com/kunpeng/archive/compiler/bisheng_compiler/BiShengCompiler-3.2.0-aarch64-linux-mini.tar.gz
tar xzvf BiShengCompiler-3.2.0-aarch64-linux-mini.tar.gz -C /path/to/bs_install --strip-components=1
export PATH=/path/to/bs_install/bin:$PATH
export LD_LIBRARY_PATH=/path/to/bs_install/lib:/path/to/bs_install/lib/clang/15.0.4/lib:$LD_LIBRARY_PATH
export INCLUDE=/path/to/bs_install/include:/path/to/bs_install/lib/clang/15.0.4/include:$INCLUDE
export CC=clang CXX=clang++ FC=flang

yum install -y perl-Data-Dumper autoconf automake libtool binutils flex cmake
cd /path/to/hucx_build
wget https://gitee.com/kunpengcompute/hucx/repository/archive/v2.3.0-huawei.tar.gz -f hucx-2.3.0-huawei.tar.gz
tar xf hucx-2.3.0-huawei.tar.gz
cd hucx-v2.3.0-huawei
./autogen.sh
./contrib/configure-opt --prefix=/path/to/hucx_install --disable-numa --enable-mt CFLAGS="-Wno-unused-but-set-variable -Wno-error=int-conversion" CXXFLAGS="-Wno-unused-but-set-variable -Wno-error=int-conversion"
make -j
make -j install
export PATH=/path/to/hucx_install/bin:$PATH
export LD_LIBRARY_PATH=/path/to/hucx_install/lib:$LD_LIBRARY_PATH
export C_INCLUDE_PATH=/path/to/hucx_install/include:$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=/path/to/hucx_install/include:$CPLUS_INCLUDE_PATH
export CFLAGS="-Wno-unused-but-set-variable -Wno-error=int-conversion" CXXFLAGS="-Wno-unused-but-set-variable -Wno-error=int-conversion" FFLAGS="-Wno-error=int-conversion"

cd /path/to/xucg_build
wget https://gitee.com/kunpengcompute/xucg/repository/archive/v2.3.0-huawei.tar.gz -f xucg-2.3.0-huawei.tar.gz
tar xf xucg-2.3.0-huawei.tar.gz
cd xucg-v2.3.0-huawei
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/path/to/xucg_install -DCMAKE_BUILD_TYPE=Release -DUCG_BUILD_WITH_UCX=/path/to/hucx_install -DUCG_ENABLE_MT=ON -DUCG_BUILD_TESTS=OFF -DCMAKE_C_COMPILER=$CC -DCMAKE_CXX_COMPILER=$CXX -DCMAKE_Fortran_COMPILER=$FC
make -j
make -j install
export PATH=/path/to/xucg_install/bin:$PATH
export LD_LIBRARY_PATH=/path/to/xucg_install/lib:$LD_LIBRARY_PATH
export C_INCLUDE_PATH=/path/to/xucg_install/include:$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=/path/to/xucg_install/include:$CPLUS_INCLUDE_PATH

cd /path/to/hmpi_build
wget https://gitee.com/kunpengcompute/hmpi/repository/archive/v2.3.0-huawei.tar.gz -f hmpi-2.3.0-huawei.tar.gz
tar xf hmpi-2.3.0-huawei.tar.gz
cd hmpi-v2.3.0-huawei/
./autogen.pl
./configure --prefix=/path/to/hmpi_install --with-platform=contrib/platform/mellanox/optimized --enable-mpi-cxx  --enable-mpi1-compatibility --with-ucx=/path/to/hucx_install --with-ucg=/path/to/xucg_install
make -j
make -j install
export PATH=/path/to/hmpi_install/bin:$PATH
export LD_LIBRARY_PATH=/path/to/hmpi_install/lib:$LD_LIBRARY_PATH
export C_INCLUDE_PATH=/path/to/hmpi_install/include:$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=/path/to/hmpi_install/include:$CPLUS_INCLUDE_PATH

三、获取容器sif
在本页面下载Gent4_10.6.1_SVE_v1.sif文件，并上传到服务器目录/path/to/sif

四、获取测试算例case
在本页面下载data.tar.gz,并上传到服务器目录/path/to/case下,解压。将/path/to/case/geant4-v10.6.1/examples/extended/parallel/MPI/examples/exMPI01 复制到/path/to/case/下
执行以下命令扩大算例：
sed -ri "s/40000/400000" /path/to/case/exMPI01/run.mac 

五、运行容器
1、单节点运行：
cd /path/to/case/exMPI01
命令：
time -p mpirun --allow-run-as-root  -np 1  -x PATH -x LD_LIBRARY_PATH  -x G4SAIDXSDATA -x G4LEDATA -x G4LEVELGAMMADATA -x G4INCLDATA -x G4PARTICLEXSDATA -x G4PIIDATA -x G4RADIOACTIVEDATA -x G4REALSURFACEDATA -x G4ABLADATA -x G4NEUTRONHPDATA -x G4ENSDFSTATEDATA -x G4TENDLDATA  -x UCX_NET_DEVICES=eno1 -rank-by core --bind-to core --mca pml ucx -mca btl ^vader,openib  singularity exec -B /path/to/case/  /path/to/sif/Gent4_10.6.1_SVE_v1.sif exMPI01 run.mac ;} 2>&1 | tee single.log

（说明：-B：绑定本地算例目录，exec命令进入容器为只读模式，不可在容器内对文件进行读写操作。程序运行结束时，在当前目录生成结果文件）

2、多节点运行
命令：
{ time -p mpirun --allow-run-as-root  -np 2 -npernode 1  --hostfile /shareofs/apps/TEST/ljl/container/data/hostfile  -x PATH -x LD_LIBRARY_PATH  -x G4SAIDXSDATA -x G4LEDATA -x G4LEVELGAMMADATA -x G4INCLDATA -x G4PARTICLEXSDATA -x G4PIIDATA -x G4RADIOACTIVEDATA -x G4REALSURFACEDATA -x G4ABLADATA -x G4NEUTRONHPDATA -x G4ENSDFSTATEDATA -x G4TENDLDATA  -x UCX_NET_DEVICES=eno1 -rank-by core --bind-to core --mca pml ucx -mca btl ^vader,openib  singularity exec -B /shareofs/apps/TEST/ljl/container/data  /shareofs/apps/TEST/ljl/container/Gent4_10.6.1_SVE_v1.sif exMPI01 run.mac ;} 2>&1 | tee more.log
