在 IBM POWER8 系统上编译和运行 Weather Research and Forecasting 数据(1)
- UID
- 1066743
|
在 IBM POWER8 系统上编译和运行 Weather Research and Forecasting 数据(1)
在本教程中,您将学习如何:
- 在 IBM POWER8™ 平台上,使用 IBM XL Fortran 和 XL C/C++ 编译器编译 WRF 及其依赖的库
- 在 POWER8 平台上使用 IBM Parallel Environment™ (PE) 运行 WRF
操作系统信息和目录设置本教程使用的操作系统为 Red Hat Enterprise Linux Server release 6.5 (Santiago) for Power。我使用的软件和源代码版本包括:
- IBM XL Fortran for Linux v15.1
- IBM XL C/C++ for Linux v13.1
- IBM Parallel Environment 1.3.0.8
- WRF 3.5.1
图 1. 软件依赖关系提示:我建议您创建一个非 root 用户(例如 loadl)来执行编译和安装工作。然后可编译 WRF 及其相关的库并将其安装到 loadl 主目录中。同样,使用 PE 运行并行计算作业时,必须以非 root 用户身份执行它。
清单 1. 本教程中的定义1
2
3
4
5
6
7
| /home/loadl/project/bin --> The folder where the compiled binaries are installed.
/home/loadl/project/include --> The folder where the header files are installed.
/home/loadl/project/lib --> The folder where the libraries are installed.
/home/loadl/project/share --> The folder where the manual, document are installed.
/home/loadl/project/source --> The folder where the source code packages are saved.
/home/loadl/project/netcdf --> The folder where the compiled netcdf are installed.
It has sub folders such as bin,include,lib,share.
|
还需要为用户 loadl 生成一个 SSH 密钥,然后将公钥添加到已授权的密钥中。这样就允许用户 loadl 实现静默登录,这是在此节点上运行 PE 作业的前提条件。
安装和编译 WRF Model在 Linux 上安装 XL Fortran 和 XL C/C++ 编译器使用 root 用户身份安装 XL Fortran 和 XL C/C++ 编译器。备注:XL C/C++ 编译器需要以下包。如果它们不存在,可使用 yum 安装这些包。32 位包具有 *.ppc 扩展名。64 位包使用 *.ppc64 扩展名。
清单 2. XL C/C++ 编译器需要的包1
2
3
4
5
6
7
8
9
| yum install libstdc++*.ppc
yum install gcc
yum install gcc-c++
yum install glibc-devel*.ppc64
yum install glibc-devel*.ppc
yum install libstdc++-devel*.ppc64
yum install compat-libstdc++-33*.ppc
yum install compat-libstdc++-33*.ppc64
yum install ksh
|
在 Linux 上安装 PE首先请确保您已安装了所有必要的包。PE 需要 bind 和 xinetd 包。(使用 yum 安装 bind 包,安装命令为 yum install bind,然后使用 yum install xinetd 安装 xinetd 包。)然后编辑 /etc/selinux/config 文件并设置 SELINUX=disabled,以禁用 SELinux。
重新启动操作系统,让这些更改生效。
然后以 root 用户身份按照以下步骤操作,安装 PE。
- export IBM_PPEDEV_LICENSE_ACCEPT=yes
- rpm -i ppedev_pa_license-1.3.0-0.ppc64.rpm
- rpm -i ppedev_pa_runtime-1.3.0-0.ppc64.rpm
- rpm -i ppedev_pa_hpct-1.3.0-0.ppc64.rpm
- export IBM_PPE_RTE_LICENSE_ACCEPT=yes
- rpm -i ppe_rte_license-1.3.0.8-s008a.ppc64.rpm
- rpm -i ppe_rte_1308-1.3.0.8-s008a.ppc64.rpm
在此包的安装工作末尾,系统会提示推荐的系统设置更改。以 root 用户身份执行这些更改。启动节点设置诊断脚本:
问题 1:net.core.wmem_max 为 124928,但推荐值为 1048576。
1
| sysctl -w net.core.wmem_max=1048576
|
问题 2:net.core.rmem_max 为 124928,但推荐值为 8388608。
1
| sysctl -w net.core.rmem_max=8388608
|
问题 3:net.ipv4.ipfrag_low_thresh 为 196608,但推荐值为 1048576。
1
| sysctl -w net.ipv4.ipfrag_low_thresh=1048576
|
问题 4:net.ipv4.ipfrag_high_thresh 为 262144,但推荐值为 8388608。
1
| sysctl -w net.ipv4.ipfrag_high_thresh=8388608
|
问题 5:nofile 的 ulimit 为 1024,但推荐值为 4096。
1
| Update nofile to be 4096 in /etc/security/limits.conf
|
问题 6:memlock 的 ulimit 为 64,但推荐值为 unlimited。
1
| Update memlock to be unlimited in /etc/security/limits.conf
|
使用 service xinetd restart 重新启动 xinetd。
问题 7:/etc/xinetd.conf 中的 per_source 为 10,但推荐值为 80。
1
| Change per_source to 80 in /etc/xinetd.conf
|
使用 service xinetd restart 重新启动 xinetd。
根据 ulimit 相关设置,设置 /etc/profile 中的 ulimit -n 4096 和 ulimit -l unlimited。然后重新启动 xinetd 服务:
清单 3. 重新启动 xinetd 服务1
2
3
| rpm -i pperte-1.3.0.8-s008a.ppc64.rpm
rpm -i ppe_rte_samples-1.3.0.8-s008a.ppc64.rpm
rpm -i ppertesamples-1.3.0.8-s008a.ppc64.rpm
|
编译 NetCDF首先,以 loadl 身份登录并执行后续步骤。编译 NetCDF 之前,需要启用系统环境变量:
清单 4. 系统环境变量1
2
3
4
5
6
7
8
9
10
| export CC="xlc_r"
export CFLAGS="-q64 -O3 -qstrict -DIBMR2Fortran"
export CPP="xlc_r -E"
export CXX="xlC_r"
export CXXFLAGS="-q64 -O3 -qstrict"
export CXXCPP="xlC_r -E"
export F77="xlf_r"
export FC="xlf_r"
export F90="xlf90_r"
export FFLAGS="-q64 -O3 -qstrict"
|
使用 xlc_r 作为 C/C++ 编译器,xlf_r 作为 Fortran 编译器。对于从 NetCDF(和其他相关的库)到 WRF 的所有编译使用此环境变量设置。这么做会使依赖于 WRF 的库能够保持兼容。否则,在 WRF 编译期间调用依赖的库时,会遇到不兼容性错误。
要指定编译后的输出应安装在哪个目标文件夹,可使用此代码:
清单 5. 将编译后的输出安装在目标文件夹中1
2
3
| ./configure --prefix=/home/loadl/project/netcdf
make
make install
|
编译 zlib执行此清单中所示的步骤:
清单 6. 编译 zlib1
2
3
| ./configure --prefix=/home/loadl/project
make
make install
|
编译 JasPer执行此清单中所示的步骤:
清单 7. 编译 JasPer1
2
3
| ./configure --prefix=/home/loadl/project
make
make install
|
编译 libpng执行此清单中所示的步骤:
清单 8. 编译 libpng1
2
3
4
5
6
| export LD_LIBRARY_PATH=/home/loadl/project/lib/ LD_LIBRARY_PATH
export LDFLAGS="-L/home/loadl/project/lib/ -L/home/loadl/project/netcdf/lib"
export CPPFLAGS="-I/home/loadl/project/include/ -I/home/loadl/project/netcdf/include"
./configure --prefix=/home/loadl/project
make
make install
|
编译 WRF作为编译 WRF 的前提条件,需要启用环境变量:
清单 9. 为 WRF 编译启用环境变量1
2
3
4
| export JASPERLIB=/home/loadl/project/lib
export JASPERINC=/home/loadl/project/include
export WRF_EM_CORE=1
export NETCDF=/home/loadl/project/netcdf
|
要启用 WRF 的并行计算功能,可使用带 –lmpi 选项的 xlc_r 和 xlf95_r 来执行编译。
首先解压 WRFV3.5.1.TAR.gz 并运行配置脚本,因为这有助于您创建 make 文件。它会生成一个 configure.wrf 文件,其中包含许多变量定义,并且会在执行 make 期间读取该文件。
运行 configure。在提示符下,从支持的平台中进行选择:
- Linux ppc64 BG /L blxlf compiler with blxlc (dmpar)
- Linux ppc64 BG /P xlf compiler with xlc (smpar)
- Linux ppc64 BG /P xlf compiler with xlc (dmpar)
- Linux ppc64 BG /P xlf compiler with xlc (dm+sm)
- Linux ppc64 IBM Blade Server xlf compiler with xlc (dmpar)
因为 POWER8 是新版本,所以配置脚本仅将 BG (BlueGene) 识别为 CPU,但这不会影响编译结果。选择第三个选项:Linux ppc64 BG /P xlf compiler with xlc (dmpar)。
然后会得到一个提示:
清单 10. WRF 编译配置中的 “compiling for nesting” 提示1
2
3
4
5
| Compile for nesting?
1=basic
2=preset moves
3=vortex following
[default 1]
|
选择默认设置 1 basic。这会为您的版本生成一个配置模板文件。编辑 configure.wrf 文件。按如下所示更新字段:
清单 11. 更新配置文件中的字段1
2
3
4
5
6
7
8
9
10
11
| SFC = xlf95_r -q64 -I/opt/ibmhpc/pecurrent/mpich2/gnu/include64 -L/opt/ibmhpc/pecurrent/
mpich2/gnu/fast/lib64
SCC = xlc_r -q64 -I/opt/ibmhpc/pecurrent/mpich2/gnu/include64 -L/opt/ibmhpc/pecurrent/
mpich2/gnu/fast/lib64
CCOMP = xlc_r -q64 -I/opt/ibmhpc/pecurrent/mpich2/gnu/include64 -L/opt/ibmhpc/pecurrent/
mpich2/gnu/fast/lib64
DM_FC = xlf95_r -q64 -I/opt/ibmhpc/pecurrent/mpich2/gnu/include64 -L/opt/ibmhpc/pecurrent/
mpich2/gnu/fast/lib64 -lmpi
DM_CC = xlc_r -q64 -I/opt/ibmhpc/pecurrent/mpich2/gnu/include64 -L/opt/ibmhpc/pecurrent/
mpich2/gnu/fast/lib64 -DMPI2_SUPPORT –lmpi
CPP = /opt/ibm/xlf/15.1.0/exe/cpp -C -P
|
然后执行 ./compile em_real >& compile.log,这会执行编译并将编译日志写入 compile.log,调试时可使用该日志。如果编译成功,会生成一个 exe 文件:
清单 12. 生成一个 exe 文件1
2
3
4
5
6
| -bash-4.1$ ll run/*.exe
lrwxrwxrwx 1 loadl loadl 17 Aug 22 07:55 run/ndown.exe -> ../main/ndown.exe
lrwxrwxrwx 1 loadl loadl 15 Aug 22 07:55 run/nup.exe -> ../main/nup.exe
lrwxrwxrwx 1 loadl loadl 16 Aug 22 07:55 run/real.exe -> ../main/real.exe
lrwxrwxrwx 1 loadl loadl 14 Aug 22 07:55 run/tc.exe -> ../main/tc.exe
lrwxrwxrwx 1 loadl loadl 15 Aug 22 07:53 run/wrf.e
|
|
|
|
|
|
|