Daily Archives: March 2, 2011

在LSF作业提交系统上提交MPI并行程序

我们的noah模型采用mpi进行了并行。在windows上测试的时候使用了mpich2,通过。实际计算时使用了所里的曙光5000高性能计算机。还是费了一下午的时候来进行必要的设置。我们的超算环境部署了几种mpi,如mpich p4,openmpi等。我们使用了openmpi库。对于openmpi库的一些必要环境变量已经配置在 /public1/scripts/openmpi1.4-gnu.sh脚本里,其中包含MPI_HOME、PATH、LD_LIBRARY_PATH等与mpi有关的变量。

1. 在超算环境里,应用配置后的变量设置。
source /public1/scripts/openmpi1.4-gnu.sh

2. 在用户目录下的.bashrc里增加
export OMPI_MCA_pls_rsh_agent=/usr/bin/rsh

3. 对源代码进行编译。
mpicxx *.cpp *.o -o cali_noah_final_new_1 -I../gsl-1.14-lib/include -I/public1/home/CAS/lzhpc14/devenv/hdf5-1.8.5/include -L/public1/home/CAS/lzhpc14/yuting/runnoah/gsl-1.14-lib/lib -lgsl -lgslcblas -L/public1/home/CAS/lzhpc14/devenv/hdf5-1.8.5/lib -lhdf5 –lgfortran

mpicxx是mpi版本的c++编译器。在这里指定源代码,头文件路径,库路径,连接的库名即可通过编译。mpicxx具体是连接到哪个mpi环境里,是由步骤1进行了设置。注意必须使用mpi使用的对应编译器。

4. 编译通过后,将产生我们的模型可执行文件,cali_noah_final_new_1。这个模型需要带一个参数。所以我们写一个脚本cali_noah.sh。里面包括以下内容:
#!/bin/sh
export LD_LIBRARY_PATH=/public1/home/CAS/lzhpc14/yuting/runnoah/gsl-1.14-lib/lib:/public1/home/CAS/lzhpc14/devenv/hdf5-1.8.5/lib:$LD_LIBRARY_PATH
./cali_noah_final_new_1 run_0223.config

其中,export 需要指出./cali_noah_final_new_1 依赖的库位置。这里涉及到两个库gsl和hdf,mpi有关的库,不必在这里指定。在涉及到多个物理机器参与mpi计算时,export必须指定,否则会提示找不到必要的shared library。

5. 通过lsf提交到计算节点进行计算
bsub -q bigmem -n 64 -a openmpi mpirun.lsf ./cali_noah.sh

这里使用了64个CPU进行计算。由于这里使用很多个CPU,位于不同的计算节点上,大致流程是这样的。bsub将任务从登录节点提交到计算节点,并申请了64个计算单元。分配成功后,openmpi寻找一个计算节点为主节点,进行必须的初始化(包括在这个节点上进行shared library的位置配置),然后openmpi将任务分配到其余可用的计算节点,进行计算。如果这些计算单元全部位于同一个物理计算节点,那么是不需要专门设定shared library位置。但如果计算单元位于不同的计算节点,由openmpi分配的计算节点只预先配置了mpi的环境,而没有应用程序需要的其它library位置信息。这种情况下,必须指定LD_LIBRARY_PATH,如步骤4所描述。