HPC应用&物理学软件PIConGPU详细安装使用教程

目录

PIConGPU

简介

应用范围

alpaka库

编译安装

github源码

前人的工作

算例创建与编译运行

算例测试

输出日志

​编辑

耗时对比


PIConGPU

简介

PIConGPU (Particle-in-cell on Graphics Processing Units,图形处理单元中的单元粒子),是用于等离子体和激光等离子体物理学的开源仿真框架。PIConGPU是完全相对的,多核,3D3V单元内粒子(PIC)代码。单元内粒子(Particle-in-Cell)算法是等离子体物理学中的核心工具。根据麦克斯韦方程,通过计算等离子体中电子和离子的运动来描述等离子体的动力学。

PIConGPU实现了各种数值方案来解决PIC周期。电磁PIC算法的功能包括:

  • 域的中央或者Yee-lattice;
  • 解决带电粒子和中性粒子运动方程的粒子推动器;
  • 麦克斯韦场求解器;
  • 严格保留当前的沉积方案;
  • 宏颗粒形状因数,范围从NGP(0级),CIC(1级),TSC(2nd),PSQ(3rd)到P4S(4th);

电磁PIC算法进一步自洽地耦合到:

  • 经典辐射反应;
  • QED同步辐射(光子发射);
  • 先进的场电离方法;

除了电磁PIC算法及其扩展之外,还开发了多种工具和诊断程序,例如:

  • 在线,远场辐射诊断,可对带电粒子发出的相干和非相干辐射进行诊断;
  • 通过openPMD提供完整的重启和输出功能,包括并行HDF5(通过libSplash)和ADIOS,从而实现了极高的I / O可扩展性和大规模的并行在线分析;
  • 2D和3D实时取景和诊断工具;
  • 大量可扩展的在线插件;

PIConGPU具有出色的性能和可扩展性,可支持超过18'000个GPU。由HZDR辐射物理研究所的计算辐射物理小组与德累斯顿工业大学密切合作开发和维护。

应用范围

PIConGPU (Particle-in-cell on Graphics Processing Units,图形处理单元中的单元粒子),是用于等离子体和激光等离子体物理学的开源仿真框架,用于开发先进的粒子加速器,癌症,高能物理学和光子科学的放射治疗。 借助PIConGPU将大大提高模拟的预测能力和达到适用于应用的粒子能量。 现在,可以以前所未有的时间和空间分辨率研究控制最终粒子束特性的复杂等离子体动力学。 这将为加速器的开发提供将等离子体加速器推向应用所需的高质量数据。 PIConGPU是等离子体物理应用程序,可通过计算等离子体电子和离子的运动来解决等离子体的动力学问题。该应用被列为Froniter E级重点应用:Frontier Center for Accelerated Application Readiness – Oak Ridge Leadership Computing Facility

alpaka库

alpaka库是用于加速器开发的C ++ 11抽象库。提供了众多使用CUDA,OpenMP(2.0 / 4.0),Boost.Fiber,std :: thread,HIP,TBB等的加速器后端变体,并且还提供了串行执行,可以根据设备进行选择。通过使用特殊接口将它们表示为功能对象,仅需要用户内核的一种实现。无需编写特殊的CUDA,OpenMP或自定义线程代码。加速器后端可以在设备队列中混合。可以在运行时确定哪个加速器后端执行哪个内核。 所使用的抽象与CUDA网格块线程划分策略非常相似。应该并行化的算法必须划分为由小型统一工作项组成的多维网格。这些函数称为内核,并在并行线程中执行。网格中的线程按块组织。块中的所有线程都是并行执行的,并且可以通过快速共享内存进行交互

编译安装

github源码

GitHub - ComputationalRadiationPhysics/picongpu: Performance-Portable Particle-in-Cell Simulations for the Exascale Era :sparkles:

前人的工作

已经有人做过一些工作,可参考:

算例创建与编译运行

1、PICongpu依赖的库比较多,许多需要源码安装。相应的依赖库全部安装完毕后,设置相应的环境变量。详细的安装设置说明请参考INSTALL.rst。下面安装过程仅供参考(需要将相应的依赖库提前下载好):

    export PICSRC=$PICHOME/picongpu
    export PIC_EXAMPLES=$PICSRC/share/picongpu/examples
    export PATH=$PICSRC:$PATH
    export PATH=$PICSRC/bin:$PATH
    export PATH=$PICSRC/src/tools/bin:$PATH
    export PYTHONPATH=$PICSRC/lib/python:$PYTHONPATH

    #yum install -y zlib zlib-devel
    cd $PICHOME
    cd $PICSRC/external/zlib && mkdir -p build $PICSRC/lib/zlib && cd build && ./../configure --prefix=$PICSRC/lib/zlib && make && make install
    export ZLIB_ROOT=$PICSRC/lib/zlib
    export LD_LIBRARY_PATH=$ZLIB_ROOT/lib:$LD_LIBRARY_PATH
    export CMAKE_PREFIX_PATH=$ZLIB_ROOT:$CMAKE_PREFIX_PATH

    #yum install -y boost-devel
    cd $PICHOME
    cd $PICSRC/external/boost && mkdir -p $PICSRC/lib/boost &&  ./bootstrap.sh --with-libraries=atomic,chrono,context,date_time,fiber,filesystem,math,program_options,serialization,system,thread --prefix=$PICSRC/lib/boost && ./b2 install --prefix=$PICSRC/lib/boost  -j4  
    export BOOST_ROOT=$PICSRC/lib/boost
    export CMAKE_PREFIX_PATH=$BOOST_ROOT:$CMAKE_PREFIX_PATH
    export LD_LIBRARY_PATH=$BOOST_ROOT/lib:$LD_LIBRARY_PATH
    export CPLUS_INCLUDE_PATH=$BOOST_ROOT/include:$CPLUS_INCLUDE_PATH
    export BOOST_INCLUDEDIR=$BOOST_ROOT/include
    export LIBRARY_PATH=$BOOST_ROOT/lib:$LIBRARY_PATH

    #yum install -y libpng-devel
    cd $PICHOME
    cd $PICSRC/external/libpng && mkdir -p build $PICSRC/lib/libpng && cd build && CPPFLAGS=-I$PICSRC/lib/zlib/include LDFLAGS=-L$PICSRC/lib/zlib/lib ./../configure --enable-static --enable-shared --prefix=$PICSRC/lib/libpng && make && make install
    export PNG_ROOT=$PICSRC/lib/libpng
    export CMAKE_PREFIX_PATH=$PNG_ROOT:$CMAKE_PREFIX_PATH
    export LD_LIBRARY_PATH=$PNG_ROOT/lib:$LD_LIBRARY_PATH

    #yum install -y pngwriter
    cd $PICHOME
    cd $PICSRC/external/pngwriter && mkdir -p build $PICSRC/lib/pngwriter && cd build && cmake3 -DCMAKE_INSTALL_PREFIX=$PICSRC/lib/pngwriter ../ && make && make install
    export CMAKE_PREFIX_PATH=$PICSRC/lib/pngwriter:$CMAKE_PREFIX_PATH
    export LD_LIBRARY_PATH=$PICSRC/lib/pngwriter/lib:$LD_LIBRARY_PATH


    #yum install -y libhdf5-openmpi-dev libboost-program-options-dev
    cd $PICHOME
    cd $PICSRC/external/hdf5  && mkdir -p build $PICSRC/lib/hdf5 && cd build && ./../configure --enable-parallel --enable-shared --prefix=$PICSRC/lib/hdf5  && make && make install
    export HDF5_ROOT=$PICSRC/lib/hdf5
    export HDF5_DIR=$HDF5_ROOT
    export LD_LIBRARY_PATH=$HDF5_ROOT/lib:$LD_LIBRARY_PATH
    export PATH=$PATH:$HDF5_ROOT/bin
    export CPATH=:$CPATH:$HDF5_ROOT/include

    # install libSplash
    cd $PICHOME
    cd $PICSRC/external/libsplash && mkdir -p build $PICSRC/lib/libsplash && cd build && cmake3 -DCMAKE_INSTALL_PREFIX=$PICSRC/lib/libsplash -DSplash_USE_MPI=ON -DSplash_USE_PARALLEL=ON ../ && make && make install
    export CMAKE_PREFIX_PATH=$PICSRC/lib/libsplash:$CMAKE_PREFIX_PATH
    export LD_LIBRARY_PATH=$PICSRC/lib/libsplash/lib:$LD_LIBRARY_PATH

    #yum install -y libblosc-devel
    cd $PICHOME
    cd $PICSRC/external/c-blosc && mkdir -p build $PICSRC/lib/blosc && cd build  && cmake3 -DCMAKE_INSTALL_PREFIX=$PICSRC/lib/blosc -DPREFER_EXTERNAL_ZLIB=ON .. && make && make install
    export BLOSC_ROOT=$PICSRC/lib/blosc
    export CMAKE_PREFIX_PATH=$BLOSC_ROOT:$CMAKE_PREFIX_PATH
    export LD_LIBRARY_PATH=$BLOSC_ROOT/lib:$LD_LIBRARY_PATH

    #yum install -y libadios-devel libadios-bin
    cd $PICHOME
    cd $PICSRC/external/adios && mkdir -p build $PICSRC/lib/adios && cd build && CFLAGS="-fPIC" ./../configure --enable-static --enable-shared --prefix=$PICSRC/lib/adios --with-mpi=$MPI_ROOT   --with-blosc=$PICSRC/lib/blosc --with-hdf5=$PICSRC/lib/hdf5 --with-zlib=$PICSRC/lib/zlib  && make && make install
    export ADIOS_ROOT=$PICSRC/lib/adios
    export LD_LIBRARY_PATH=$ADIOS_ROOT/lib:$LD_LIBRARY_PATH

下面是将相应环境设置写入文件,构建编译运行算例前source一下,可能更方便一些。

cat<<EOF > $PICHOME/env.sh
export PICHOME=$PICHOME
export PICSRC=\\$PICHOME/picongpu
export PIC_EXAMPLES=\\$PICSRC/share/picongpu/examples
export PATH=\\$PICSRC:\\$PATH
export PATH=\\$PICSRC/bin:\\$PATH
export PATH=\\$PICSRC/src/tools/bin:\\$PATH
export PYTHONPATH=\\$PICSRC/lib/python:\\$PYTHONPATH
export ZLIB_ROOT=\\$PICSRC/lib/zlib
export LD_LIBRARY_PATH=\\$ZLIB_ROOT/lib:\\$LD_LIBRARY_PATH
export CMAKE_PREFIX_PATH=\\$ZLIB_ROOT:\\$CMAKE_PREFIX_PATH
export BOOST_ROOT=\\$PICSRC/lib/boost
export LD_LIBRARY_PATH=\\$BOOST_ROOT/lib:\\$LD_LIBRARY_PATH
export CPLUS_INCLUDE_PATH=\\$BOOST_ROOT/include:\\$CPLUS_INCLUDE_PATH
export LIBRARY_PATH=\\$BOOST_ROOT/lib:\\$LIBRARY_PATH
export PNG_ROOT=\\$PICSRC/lib/libpng
export CMAKE_PREFIX_PATH=\\$PNG_ROOT:\\$CMAKE_PREFIX_PATH
export LD_LIBRARY_PATH=\\$PNG_ROOT/lib:\\$LD_LIBRARY_PATH
export CMAKE_PREFIX_PATH=\$PICSRC/lib/pngwriter:\\$CMAKE_PREFIX_PATH
export LD_LIBRARY_PATH=\\$PICSRC/lib/pngwriter/lib:\\$LD_LIBRARY_PATH
export CMAKE_PREFIX_PATH=\\$PICSRC/lib/splash:\\$CMAKE_PREFIX_PATH
export LD_LIBRARY_PATH=\\$PICSRC/lib/splash/lib:\\$LD_LIBRARY_PATH
export HDF5_ROOT=\\$PICSRC/lib/hdf5
export LD_LIBRARY_PATH=\\$HDF5_ROOT/lib:\\$LD_LIBRARY_PATH
export BLOSC_ROOT=\\$PICSRC/lib/blosc
export CMAKE_PREFIX_PATH=\$BLOSC_ROOT:\\$CMAKE_PREFIX_PATH
export LD_LIBRARY_PATH=\\$BLOSC_ROOT/lib:\\$LD_LIBRARY_PATH
export ADIOS_ROOT=\\$PICSRC/lib/adios
export LD_LIBRARY_PATH=\\$ADIOS_ROOT/lib:\\$LD_LIBRARY_PATH                        
EOF

source $PICHOME/env.sh

2、创建测试用例

    export SCRATCH=$HOME
    // PIConGPU input files
    mkdir $HOME/picInputs
    // PIConGPU simulation output
    mkdir $SCRATCH/runs

3、 创建输入参数集

    //clone the LWFA example to $HOME/picInputs/myLWFA
    pic-create $PIC_EXAMPLES/LaserWakefield $HOME/picInputs/myLWFA

4、 编译模拟

    # switch to your input directory
    cd $HOME/picInputs/myLWFA
    pic-build -b xxx

5、 运行模拟

    # example run for an interactive simulation on the same machine
     tbg -s bash -c etc/picongpu/1.cfg -t etc/picongpu/bash/mpiexec.tpl $SCRATCH/runs/lwfa_001

算例测试

注意:使用上述5提交方式提交作业,作业运行可能会卡住。需要根据mpiexec.tpl文件的具体情况进行修改。例如:

sed -i 's/export OMPI_MCA_io\=\^ompio/\export OMPI_MCA_io\=ompio/g' etc/picongpu/bash/mpiexec.tpl

输出日志

耗时对比

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术瘾君子1573

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值