1 Ubuntu 8.10 编译环境安装
(1) 安装build-essential。主要是安装g++,c++的编译环境
(2)安装csh,Ubuntu是bash系统,这个东西没有默认安装,这两个都可以通过新立得软件包管理器安装
(3)将make和gmake连接起来,Ubuntu默认的编译命令是make,而ccsm等用的还是gmake
ln -s /usr/bin/make /usr/bin/gmake
2 PGI安装,这个软件主要是编译C和Fortran的一个高效的编译器
进入安装目录后直接执行install即可,然后安装安装提示安装。
现在的Ubuntu版本安装有点问题,会提示/opt/lampp/lampp: line 74: arch: command not found错误
主要是Ubuntu没有arch命令,只有类似的uname -m命令,
因此将install脚本第61行 case “`arch`” in
改为 case “`uname -m`” in即可
然后设置路径,在etc/profile下添加:
PATH=/opt/pgi/linux86/7.0/bin:$PATH
export PATH
MANPATH=$MANPATH:/opt/pgi/linux86/7.0/man
export MANPATH
LM_LICENSE_FILE=/opt/pgi/license.dat
export LM_LICENSE_FILE
export PGI=/usr/pgi
这个pgi是从
破解的license可以从网上搜索到,安装好后登出,再进入执行pgCC -V命令
如果没有提示版权之类的问题,就表示安装成功了
然后再执行
ln -s /opt/pgi/linux86/7.0/bin/pgCC /opt/pgi/linux86/7.0/bin/pgcc
这安装的是pgCC,但是后面ccsm有时会用pgcc
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分钟,不要着急………
论坛上说都是这样的 http://forum.cgd.ucar.edu/archive/index.php/t-306.html
运行,编译好之后就算入门了,下面就是运行测试脚步了
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运行情况
在执行具体的程序时,要把程序放在各个主机相同的位置上
2 安装并设置Torque的运行环境
Torque主要是用于自动调度mpi资源
(1) Torque安装
Torque的安装有多种方式,这里仅介绍最简单的一种,更多的方式可以参见clustersource的网站介绍。
从http://clusterresources.com/downloads/torque上下载Torque的最新版本
在将要作为“Torque Server”机器上解压并build该torque包,这台机器将会通过在其上运行的pbs_server守护程序来控制和监控所有的计算节点。具体步骤如下:
$ tar -xzvf torqueXXX.tar.gz
$ cd torqueXXX
$ ./configure
$ make
$ make install
[注意:]默认的binary程序安装路径通常会在/usr/local/bin和/usr/local/sbin下,因此就不用再设置路径了
然后运行安装目录下的./torque.setup,会提示
pbs_server: error while loading shared libraries: libtorque.so.2: cannot open shared object file: No such file or directory
这主要是Ubuntu没有将/usr/local/lib加入动态连接库,缺少的这个文件就在那里
因此需要在/etc/ld.so.conf加入该目录,即:
include /usr/local/lib/*.*
然后运行ldconfig来更新,这里因为添加的是所有目录文件,因此会提示有的不是连接库问题,不会有问题,再运行./torque.setup就正确了
(2)Torque测试
首先编辑/var/spool/torque/server_priv/nodes (需要自己建立),加入主机名和cpu的核数目
master np=4
node01 np=4
……..
node09 np=4
然后,启动主服务器上的pbs_server,pbs_sched,pbs_mom,并把其写到/etc/rc.local里使其能开机自启动,然后启动各个子服务器上的pbs_mom,并加入开机启动,注意子服务器上的/var/spool/torque/server_name应改成主服务器的hostname
3 运行测试
Torque不能在root下运行,因此必须新建立一个普通用户,然后设置和root的权限,然后提交qsub生成的测试脚本即可,原有脚本是mpich的,现在都用mpich2,有命令不兼容
如下
cd $EXEROOT/all
#paste ${PBS_NODEFILE} mpirun.pgfile1 > mpirun.pgfile
#echo local $PROC > mpirun.pgfile
echo “`date` — CSM EXECUTION BEGINS HERE”
#mpirun -p4pg mpirun.pgfile ./$COMPONENTS[1] //注意,这一行就是mpich2无法识别的,mpich2可以自动分配和监视运行的
mpiexec `cat gforker.cmdline`
wait
echo “`date` — CSM EXECUTION HAS FINISHED”
把那一行改为,
mpiexec -n 1 cpl :
-n 2 clm :
-n 4 pop :
-n 4 csim :
-n 16 cam
实验室这边就几个双路四核的服务器,运行非常慢,资源比较紧张,这个模式还是在大型集群上运行比较好。后面研究还是转到原来的GISS模式上,对资源要求小的多,像EdGCM用的是GISS2,一般pc都可以运行,但是现在不更新了,现在就把GISS modelE这个当前的版本搞熟悉了,作为今后研究的GCMs好了。