3 mpich2安装,mpich2是并行系统mpi的一个具体实现
下载后按照readme文件执行即可,执行步骤如下
./configure --prefix=/home/root/mpich2-install 2>&1 | tee c.txt
make 2>&1 | tee m.txt
make install 2>&1 | tee mi.txt
这样就可以了,然后是设置path路径,在etc/profile下添加
PATH=/home/root/mpich2-install/bin:$PATH
export PATH
再在etc下添加一个mpd.conf文件,内容为
MPD_SECRETWORD=<secretword>
然后设置文件权限为root可读写,群组和其它访问无
重新登录后执行
mpd & //启动服务
如果没有错误提示,基本就安装好了
4 NetCDF安装,netCDF是一个产生地理信息标注数据的软件
下载后按照install文本提示安装即可:
./configure --prefix=/home/root/netCDF
make check install
然后在etc/profile下添加路径
PATH=/home/root/netCDF/bin:$PATH
export PATH
5 至此ccsm3的编译所需内容已经安装好了,就可以安装ccsm3了
(1) 首先要设置一些环境变量,分别指向mpi和netCDF的路径,在etc/profile中添加
export INC_MPI=/home/root/mpich2-install/include
export LIB_MPI=/home/root/mpich2-install/lib
export INC_NETCDF=/home/root/netCDF/include
export LIB_NETCDF=/home/root/netCDF/lib
不然后面会出一些编译的问题,这个在安装指南中没有说明...............
(2)后面编译时还会出现错误:error: 'CLK_TCK' undeclared (first use in this function)
需要修改修改/usr/include/time.h
将下面的宏定义去掉注释即可
# if !defined __STRICT_ANSI__ && !defined __USE_XOPEN2K (这一行去掉)
# ifndef CLK_TCK
# define CLK_TCK CLOCKS_PER_SEC
# endif
# endif (这一行去掉)
主要是ccsm3支持的linux太老了...........
(3) 修改一个小bug
安装文件中 /ccsm3_0_1_beta14/models/lnd/clm2/src/riverroute/RtmMod.F90
第1186行
use runoffMod , only : runoff
改为(注意大小写)
use RunoffMod
(4) 然后是建立测试case
在安装文件目录的script下执行,安装脚本
./create_test -testname TER.01a.T31_gx3v5.B.anchorage -testroot /home/maris205/mpi/ccsm3/tst -testid 001 //创建的时候最好不要放到系统文件夹下面,否则会提示没有权限,要自己建立目录
anchorage是一种hpc,这里和一般linux/PGI的环境比较类似,所以选择这个
(5) 修改创建好的脚本文件的一些环境变量 主要在env_mach.anchorage中
setenv DIN_LOC_ROOT /media/disk/linux系统/inputdata //输入数据 data目录,这几个变量根据情况具体设置
setenv DOUT_S_ROOT /home/maris205/mpi/ccsm3/archive/$CASE 输出目录
setenv EXEROOT /home/maris205/mpi/ccsm3/run/$CASE //可执行文件目录
if(! $?NETCDF_MOD) then
setenv NETCDF_MOD /home/root/netCDF/include //这个是CDF的路径,好像不设置也没关系
endif
(6) 运行./TER.01a.T31_gx3v5.B.anchorage.001.build
如果上面的都设置的没问题,编译就不会出问题,注意其中在编译POP.F时会用到40分钟,不要着急.........
运行,编译好之后就算入门了,下面就是运行测试脚步了
1 首先设置mpi的运行环境
(1)安装ssh-server,这个是Ubuntu默认没有安装的
sudo apt-get install openssh-server
(2)生成ssh公钥和秘钥
ssh-keygen ,然后一直回车就好了
然后进入/root/.ssh 目录 cat id_pub.dsa >>authorized_keys
将生成的 authorized_keys文件考到相应的服务器相同目录下即可,注意修改权限
chmod 600 authorized_keys
然后ssh 各个 hostname,根据提示输入yes
下一次再ssh就可以不用输入秘密了
(注意:注意修改hostname需要修改,etc/hostname和etc/hosts对应的名称
在每台机器的etc/hosts中要加入IP和hostname的对应,包括本机在内.
而且要注意Ubuntu的第一行。都设置成127.0.0.1 localhost,而不要设置成主机名,而第二行,127.0.0.1有时会自动设置成本机的hostname,回和下面的设置真正的IP冲突,因此把这一行删掉,或者是重新改一个名字)
(3)测试mpi环境
首先做一个mpd.hosts文件,里面一行写一个要参与运算的主机名
然后启动各个主机上的mpd守护进程
mpdboot -n <启动主机的数量> -f mpd.hosts(的位置)
然后输入mpdtrace -l,应该显示所有已经启动的主机的hostname和IP
再输入mpiexec -n 2 hostname,就可以测试一下具体的mpi运行情况
在执行具体的程序时,要把程序放在各个主机相同的位置上