看似复杂的东西都由很简单的东西组成,图形界面也是由一个个简单的文本配置文件来控制的,电
脑软件说白了都是程序代码而已,懂了原理,一切都很简单。只按照别人说的一步步设置去做,却不去
想为什么要这样做,是否有更好更简单的方法,这样永远都不会体会到linux其中真味,永远只是初级玩
家。
一、Ubuntu 9.04系统安装及环境配置(预装XP系统前提下)
1.首先在windows磁盘管理器中清理出一个空白分区(至少5G),然后把该分区删除,重启从光盘安装
Ubuntu,出现安装菜单时选择安装语言为中文,然后直接按回车,进入系统后单击桌面上的install图标,
整个过程共7步,基本上全部选默认设置,注意gparted分区时选择利用剩余的空白空间,然后自动分区
即可。系统安装过程结束后重启即可。
*********************************************************************
2.修改你的源,并升级到最新的系统:
sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup
sudo gedit /etc/apt/sources.list
然后加入最新的源列表(根据系统版本从网上查找),或者不修改源列表,直接用默认的源也可,用更
新管理器更新系统。
脑软件说白了都是程序代码而已,懂了原理,一切都很简单。只按照别人说的一步步设置去做,却不去
想为什么要这样做,是否有更好更简单的方法,这样永远都不会体会到linux其中真味,永远只是初级玩
家。
一、Ubuntu 9.04系统安装及环境配置(预装XP系统前提下)
1.首先在windows磁盘管理器中清理出一个空白分区(至少5G),然后把该分区删除,重启从光盘安装
Ubuntu,出现安装菜单时选择安装语言为中文,然后直接按回车,进入系统后单击桌面上的install图标,
整个过程共7步,基本上全部选默认设置,注意gparted分区时选择利用剩余的空白空间,然后自动分区
即可。系统安装过程结束后重启即可。
*********************************************************************
2.修改你的源,并升级到最新的系统:
sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup
sudo gedit /etc/apt/sources.list
然后加入最新的源列表(根据系统版本从网上查找),或者不修改源列表,直接用默认的源也可,用更
新管理器更新系统。
*********************************************************************
3.本地源设置(系统重装时可节省下载大量软件包的时间)
在非系统分区或移动硬盘上新建一个文件夹(重装时系统分区要格式化),并把所有 deb 软件复制过去,
建立软件包列表信息之后就可以用这个源了。
代码:
sudo mkdir /mnt/win_d/soft_debs
sudo cp /var/cache/apt/archives/partial/*.deb /mnt/win_d/soft_debs/
cd /mnt/win_d (最好在这里,不然可能用问题)
sudo dpkg-scanpackages soft_debs /dev/null | gzip > soft_debs/Packages.gz
使用时只要在sources.list中加上代码:
deb file:/mnt/win_d soft_debs/
如果加了或删除了软件包,就再:
cd /mnt/win_d
sudo dpkg-scanpackages soft_debs /dev/null | gzip > soft_debs/Packages.gz
重装 ubuntu 后,也就可用这个源,而不用漫长的下载了。
*********************************************************************
3.本地源设置(系统重装时可节省下载大量软件包的时间)
在非系统分区或移动硬盘上新建一个文件夹(重装时系统分区要格式化),并把所有 deb 软件复制过去,
建立软件包列表信息之后就可以用这个源了。
代码:
sudo mkdir /mnt/win_d/soft_debs
sudo cp /var/cache/apt/archives/partial/*.deb /mnt/win_d/soft_debs/
cd /mnt/win_d (最好在这里,不然可能用问题)
sudo dpkg-scanpackages soft_debs /dev/null | gzip > soft_debs/Packages.gz
使用时只要在sources.list中加上代码:
deb file:/mnt/win_d soft_debs/
如果加了或删除了软件包,就再:
cd /mnt/win_d
sudo dpkg-scanpackages soft_debs /dev/null | gzip > soft_debs/Packages.gz
重装 ubuntu 后,也就可用这个源,而不用漫长的下载了。
*********************************************************************
4.其他软件包安装
用得到的软件包括:压缩解压缩软件(rar,unrar,bzip2,unzip,zip),杀毒软件(avast),英汉词
典(startdict),音乐播放器(audacious);基本编译工具(make,cmake,build-essential),rpm软
件包转换工具(alien,rpm),shell(csh,tcsh),GNU编译器(cc,gcc,g++,f77,gfortran),netcdf及
相关软件(netcdf,nco)(专业软件);这些软件包都可以直接在新立得软件包管理器中搜索安装。
用得到的软件包括:压缩解压缩软件(rar,unrar,bzip2,unzip,zip),杀毒软件(avast),英汉词
典(startdict),音乐播放器(audacious);基本编译工具(make,cmake,build-essential),rpm软
件包转换工具(alien,rpm),shell(csh,tcsh),GNU编译器(cc,gcc,g++,f77,gfortran),netcdf及
相关软件(netcdf,nco)(专业软件);这些软件包都可以直接在新立得软件包管理器中搜索安装。
Grads软件可以到官网下载最新的2.0版本bin版本,解压缩后在.bashrc中添加路径即可:
export GADDIR=$HOME/tools/grads/grads-2.0.a5
export PATH=$PATH:$HOME/tools/grads/grads-2.0.a5/bin/
而NCL软件也类似处理:
export NCARG_ROOT=$HOME/tools/ncl
export PATH=$PATH:$NCARG_ROOT/bin
ncview下载源码包编译即可,添加到.bashrc中的路径(根据自己路径修改)
export PATH=$PATH:$HOME/tools/ncview/bin/
export MANPATH=$MANPATH:$HOME/tools/ncview/man/
*********************************************************************
基础知识之源代码安装的基本过程:下载软件源码包,解压缩,进入解压缩后软件包目录,
sudo ./configure
sudo make
sudo make install
修改主目录下.bashrc文件中环境变量
**********************************************************************************************
5. Intel编译器(icc,ifort)与PGI编译器家族
PGI编译器直接照着安装说明书(readme或install文件)步骤安装到/opt/pgi/目录,并把网上生成的
license存入license.dat文件中放在/opt/pgi/目录下(license生成需要先到PGI官网注册,然后按照/opt/
pgi/目录下license.info文件中说明把hostid输入方可生成),该license只能免费用15天。
最后在.bashrc文件中修改环境变量:
export PGI=/opt/pgi
export MANPATH=$MANPATH:$PGI/linux86/8.0/man
export LM_LICENSE_FILE=$PGI/license.dat
export PATH=$PGI/linux86/8.0/bin:$PATH
******************************************************
但intel编译器在ubuntu 9.04中无法从源代码直接编译,需要先把源码包中的rpm包转为deb格式,然
后安装(以intel_fortran_compiler为例):
cd l_fc_p_10.1.023/data /*说明:进入解压缩后源码包的data目录下*/
sudo alien -cv intel-ifort101008-10.1.023-1.i386.rpm /*说明:将rpm包转为deb包*/
sudo dpkg -i intel-ifort101008_10.1.023-2_i386.deb /*说明:安装deb包到/opt/intel/目录下*/
sudo mkdir -p /opt/intel/licenses /*说明:创建licenses文件夹*/
sudo cp /your/license/path/NCOM_L_CMP_FOR_NDXX-WMM6JDJF.lic /opt/intel/licenses
之后在vim 下输入命令:
%s/<INSTALLDIR>/\/opt\/intel\/fc\/10.1.023
或者:
cd /opt/intel/fc/10.1.023/bin
sudo perl -pi -w -e 's/!\/bin\/sh/!\/bin\/bash/g;' *
sudo perl -pi -w -e 's/<INSTALLDIR>/\/opt\/intel\/fc\/10.1.023/g;' *
./iccvars.sh
目的在于把相关文件中所有的/bin/sh替换为/bin/bash;把<INSTALLDIR>替换为/opt\/intel\/fc\/10.1.023/
最后在.bashrc 中添加如下一行:
source /opt/intel/fc/10.0.023/bin/ifortvars.sh
对于icc则为source /opt/intel/cc/10.1.008/bin/iccvars.sh
卸载intel编译器方法:
sudo apt-get remove intel-ifort101008
**********************************************************************************************
6.运行GENIE模式
将genie.v7及subgenie.v7复制到/home/wangyue/下,编辑genie.v7/genie-cgoldstein/下的
makefile文件,编译器用ifort:
FC = ifort
参数项加-fpp进去,以调用预处理器:
FLAGS = -static-libcxa -r8 -fpconstant -O3 -ipo -fpe3 -fpp -tpp7 -xW #NOTE: IA-32 (optimized)
保存,然后用户根目录下用如下命令编译之:
cd genie.v7/genie-cgoldstein/
make c_goldstein
make cb_goldstein
make cbs_goldstein
OK后,用户根目录下如下命令运行:
subgenie.v7 cbs_goldstein wor000s
*********************************************************************
7.NCAR diagnostic(diag)软件包使用说明:
该软件包要求已安装 netcdf、 nco、ncl;解压缩该软件包至任意目录,复制/code/diag040819.csh 到任意目
录,修改之,首先:
第 442 行:修改 diag 软件包目录:setenv DIAG_HOME yourpath
第 82 行:修改工作目录(所有输出文件的目录):setenv WKDIR /media/cam2/
第 97 行:修改 test_path: set test_path = /media/cam/cam3_output/b30.104w/
第 104 行:修改 test 目录下输入文件名前缀:set conv_test = "b30.104w.cam2.h0."
第 114 行:修改 test case run 的开始时间:set test_begin = 410
第 115 行:修改 test case run 的运行时间:set test_nyrs = 30
第 121 行:修改 test case 的标识符: set test_prefix = b30.104w
第 134 行:修改 control case 的类型为自定义:set CNTL = USER
同样类似地修改第 151 行,158 行,168 行,169 行,175 行的 control case 情况;
第 218 行:set custom_names = 0 使用第 221 和 222 行的标签
第 221 行:set test_name = b30.104w
第 222 行:set cntl_name = climap
第 230 行:保存输出的 netcdf 文件:set save_ncdfs = 0
第 275 行:设置是否进行显著性检验:set significance = 0
第 278 行:设置显著性检验的置信区间:set sig_lvl = 0.05
第 285-288;295-298 均设置为 0,计算两个 case 的年平均、DJF、JJA、逐月平均值;然后保存到工作目录;
第 304-307 行设置为 1,不进行画图操作;
第 313 行设置为 0,13 个 set 全部计算。
修改完毕,保存执行,这次执行只计算均值,不画图,计算得到两个 case 的均值 netcdf 文件保存在工作目录
下(每个 case 建立单独文件夹),完毕之后,修改如下:
第 97 行:修改 test_path: set test_path = /media/cam2/b30.104w/
第 151 行:修改 control case path:set cntl_path = /media/cam2/climap/
第 285-288;295-298 均设置为 1,不再计算均值;
第 304-307 行设置为 0,进行差异显著检验,并进行画图操作;
修改完毕后,执行,读取工作目录下的均值文件,进行两个 case 差值的显著性检验,并画图,最后把画图结果
打包为一个*.tar 文件放于工作目录下。
***********************************************************
由于 diag 软件包所计算的变量有限,还需要另外计算其他变量则需要首先从原始结果中提取各个变量
逐月的数据 monthly.csh,然后用 ncl 脚本计算均值,ttest 等,输出为各个变量文件,最后用 grads 画
图。
8. 安装MPICH2与PBS资源调度软件
***************************
SSH环境配置:
(1)配置ssh环境
首先修改/etc/hosts文件,在127.0.0.1 localhost行下面加入:
192.*.*.* 结点名
/*说明:左边一串数字是你机子的本地ip,右边是你取的hostname,有几个核加就几行,IP一样,
不同结点名代表不同的核,这样四个核相当与四个节点,节点之间可以用hostname互访,可以通过ping
hostname 或ssh hostname测试设置是否成功*/
(2)实现无密码远程访问
打开一个终端
ssh-keygen -d
回车
回车
在~/.ssh下生成id_dsa (存放私人密匙)和id_dsa_pub(存放公用密匙)
cp id_dsa_pub authorized_keys
ssh hostname(无需输入密码)
(3)MPI可以从新立得软件包管理器中选择安装openMPI,也可以自己下载源代码包安装MPI的最新
版MPICH2,我选的是后者(默认支持SSH),按照基本流程编译安装即可。
(4)放权
sudo gedit /etc/hosts.equiv
加入前面设定的结点名
(5)检验 mpich
进入mpich安装目录的examples
make cpi
启动mpd(后台运行): mpd &
mpirun -np 4 cpi
可以检查mpich安装和设置是否成功
**************************************************************************
PBS是功能最为齐全,历史最悠久,支持最广泛的本地集群调度器之一。 PBS的目前包括
openPBS,PBS Pro和Torque三个主要分支。 其中OpenPBS是最早的PBS系统,目前已经没有太多
后续开发,PBS pro是PBS的商业版本,功能最为丰富。Torque是Clustering公司接过了
OpenPBS,并给与后续支持的一个开源版本。Ubuntu 9.04中torque也可从新立得软件包管理器中选
择安装。
对于单机多核环境,多个CPU共享同一个内存,与单个SMP结点服务器类似,内存共享的线程并
行机制(OpenMP)更有优势,相对而言,MPI属于消息传输并行机制,主要用在分布式内存的cluser
(集群)系统上。因此MPI 和PBS其实在单机上没什么用处。
export GADDIR=$HOME/tools/grads/grads-2.0.a5
export PATH=$PATH:$HOME/tools/grads/grads-2.0.a5/bin/
而NCL软件也类似处理:
export NCARG_ROOT=$HOME/tools/ncl
export PATH=$PATH:$NCARG_ROOT/bin
ncview下载源码包编译即可,添加到.bashrc中的路径(根据自己路径修改)
export PATH=$PATH:$HOME/tools/ncview/bin/
export MANPATH=$MANPATH:$HOME/tools/ncview/man/
*********************************************************************
基础知识之源代码安装的基本过程:下载软件源码包,解压缩,进入解压缩后软件包目录,
sudo ./configure
sudo make
sudo make install
修改主目录下.bashrc文件中环境变量
**********************************************************************************************
5. Intel编译器(icc,ifort)与PGI编译器家族
PGI编译器直接照着安装说明书(readme或install文件)步骤安装到/opt/pgi/目录,并把网上生成的
license存入license.dat文件中放在/opt/pgi/目录下(license生成需要先到PGI官网注册,然后按照/opt/
pgi/目录下license.info文件中说明把hostid输入方可生成),该license只能免费用15天。
最后在.bashrc文件中修改环境变量:
export PGI=/opt/pgi
export MANPATH=$MANPATH:$PGI/linux86/8.0/man
export LM_LICENSE_FILE=$PGI/license.dat
export PATH=$PGI/linux86/8.0/bin:$PATH
******************************************************
但intel编译器在ubuntu 9.04中无法从源代码直接编译,需要先把源码包中的rpm包转为deb格式,然
后安装(以intel_fortran_compiler为例):
cd l_fc_p_10.1.023/data /*说明:进入解压缩后源码包的data目录下*/
sudo alien -cv intel-ifort101008-10.1.023-1.i386.rpm /*说明:将rpm包转为deb包*/
sudo dpkg -i intel-ifort101008_10.1.023-2_i386.deb /*说明:安装deb包到/opt/intel/目录下*/
sudo mkdir -p /opt/intel/licenses /*说明:创建licenses文件夹*/
sudo cp /your/license/path/NCOM_L_CMP_FOR_NDXX-WMM6JDJF.lic /opt/intel/licenses
之后在vim 下输入命令:
%s/<INSTALLDIR>/\/opt\/intel\/fc\/10.1.023
或者:
cd /opt/intel/fc/10.1.023/bin
sudo perl -pi -w -e 's/!\/bin\/sh/!\/bin\/bash/g;' *
sudo perl -pi -w -e 's/<INSTALLDIR>/\/opt\/intel\/fc\/10.1.023/g;' *
./iccvars.sh
目的在于把相关文件中所有的/bin/sh替换为/bin/bash;把<INSTALLDIR>替换为/opt\/intel\/fc\/10.1.023/
最后在.bashrc 中添加如下一行:
source /opt/intel/fc/10.0.023/bin/ifortvars.sh
对于icc则为source /opt/intel/cc/10.1.008/bin/iccvars.sh
卸载intel编译器方法:
sudo apt-get remove intel-ifort101008
**********************************************************************************************
6.运行GENIE模式
将genie.v7及subgenie.v7复制到/home/wangyue/下,编辑genie.v7/genie-cgoldstein/下的
makefile文件,编译器用ifort:
FC = ifort
参数项加-fpp进去,以调用预处理器:
FLAGS = -static-libcxa -r8 -fpconstant -O3 -ipo -fpe3 -fpp -tpp7 -xW #NOTE: IA-32 (optimized)
保存,然后用户根目录下用如下命令编译之:
cd genie.v7/genie-cgoldstein/
make c_goldstein
make cb_goldstein
make cbs_goldstein
OK后,用户根目录下如下命令运行:
subgenie.v7 cbs_goldstein wor000s
*********************************************************************
7.NCAR diagnostic(diag)软件包使用说明:
该软件包要求已安装 netcdf、 nco、ncl;解压缩该软件包至任意目录,复制/code/diag040819.csh 到任意目
录,修改之,首先:
第 442 行:修改 diag 软件包目录:setenv DIAG_HOME yourpath
第 82 行:修改工作目录(所有输出文件的目录):setenv WKDIR /media/cam2/
第 97 行:修改 test_path: set test_path = /media/cam/cam3_output/b30.104w/
第 104 行:修改 test 目录下输入文件名前缀:set conv_test = "b30.104w.cam2.h0."
第 114 行:修改 test case run 的开始时间:set test_begin = 410
第 115 行:修改 test case run 的运行时间:set test_nyrs = 30
第 121 行:修改 test case 的标识符: set test_prefix = b30.104w
第 134 行:修改 control case 的类型为自定义:set CNTL = USER
同样类似地修改第 151 行,158 行,168 行,169 行,175 行的 control case 情况;
第 218 行:set custom_names = 0 使用第 221 和 222 行的标签
第 221 行:set test_name = b30.104w
第 222 行:set cntl_name = climap
第 230 行:保存输出的 netcdf 文件:set save_ncdfs = 0
第 275 行:设置是否进行显著性检验:set significance = 0
第 278 行:设置显著性检验的置信区间:set sig_lvl = 0.05
第 285-288;295-298 均设置为 0,计算两个 case 的年平均、DJF、JJA、逐月平均值;然后保存到工作目录;
第 304-307 行设置为 1,不进行画图操作;
第 313 行设置为 0,13 个 set 全部计算。
修改完毕,保存执行,这次执行只计算均值,不画图,计算得到两个 case 的均值 netcdf 文件保存在工作目录
下(每个 case 建立单独文件夹),完毕之后,修改如下:
第 97 行:修改 test_path: set test_path = /media/cam2/b30.104w/
第 151 行:修改 control case path:set cntl_path = /media/cam2/climap/
第 285-288;295-298 均设置为 1,不再计算均值;
第 304-307 行设置为 0,进行差异显著检验,并进行画图操作;
修改完毕后,执行,读取工作目录下的均值文件,进行两个 case 差值的显著性检验,并画图,最后把画图结果
打包为一个*.tar 文件放于工作目录下。
***********************************************************
由于 diag 软件包所计算的变量有限,还需要另外计算其他变量则需要首先从原始结果中提取各个变量
逐月的数据 monthly.csh,然后用 ncl 脚本计算均值,ttest 等,输出为各个变量文件,最后用 grads 画
图。
8. 安装MPICH2与PBS资源调度软件
***************************
SSH环境配置:
(1)配置ssh环境
首先修改/etc/hosts文件,在127.0.0.1 localhost行下面加入:
192.*.*.* 结点名
/*说明:左边一串数字是你机子的本地ip,右边是你取的hostname,有几个核加就几行,IP一样,
不同结点名代表不同的核,这样四个核相当与四个节点,节点之间可以用hostname互访,可以通过ping
hostname 或ssh hostname测试设置是否成功*/
(2)实现无密码远程访问
打开一个终端
ssh-keygen -d
回车
回车
在~/.ssh下生成id_dsa (存放私人密匙)和id_dsa_pub(存放公用密匙)
cp id_dsa_pub authorized_keys
ssh hostname(无需输入密码)
(3)MPI可以从新立得软件包管理器中选择安装openMPI,也可以自己下载源代码包安装MPI的最新
版MPICH2,我选的是后者(默认支持SSH),按照基本流程编译安装即可。
(4)放权
sudo gedit /etc/hosts.equiv
加入前面设定的结点名
(5)检验 mpich
进入mpich安装目录的examples
make cpi
启动mpd(后台运行): mpd &
mpirun -np 4 cpi
可以检查mpich安装和设置是否成功
**************************************************************************
PBS是功能最为齐全,历史最悠久,支持最广泛的本地集群调度器之一。 PBS的目前包括
openPBS,PBS Pro和Torque三个主要分支。 其中OpenPBS是最早的PBS系统,目前已经没有太多
后续开发,PBS pro是PBS的商业版本,功能最为丰富。Torque是Clustering公司接过了
OpenPBS,并给与后续支持的一个开源版本。Ubuntu 9.04中torque也可从新立得软件包管理器中选
择安装。
对于单机多核环境,多个CPU共享同一个内存,与单个SMP结点服务器类似,内存共享的线程并
行机制(OpenMP)更有优势,相对而言,MPI属于消息传输并行机制,主要用在分布式内存的cluser
(集群)系统上。因此MPI 和PBS其实在单机上没什么用处。
事实上,尽管MPI测试显示设置正常,当采用CAM3进行MPI并行测试时,不管进程数取多少,一
直都只有一个CPU资源占用是100%,可能哪里还是没设置对。因此后面CAM3的并行测试主要针对
openMP进行。目前大部分编译器都支持 OpenMP,因此不需要单独安装,只需程序按照openMP标准
编写,编译时加如下编译选项即可开启openMP(具体线程数由环境变量控制):
Intel compiler: Compile with -Qopenmp on Windows, or just -openmp on Linux or Mac OSX
gcc4.3.2: Compile with -fopenmp
Sun micro: Compile with -xopenmp
PGI: Compile with -mp
********************************************************************************************
9. CAM3的openMP并行性能测试
直都只有一个CPU资源占用是100%,可能哪里还是没设置对。因此后面CAM3的并行测试主要针对
openMP进行。目前大部分编译器都支持 OpenMP,因此不需要单独安装,只需程序按照openMP标准
编写,编译时加如下编译选项即可开启openMP(具体线程数由环境变量控制):
Intel compiler: Compile with -Qopenmp on Windows, or just -openmp on Linux or Mac OSX
gcc4.3.2: Compile with -fopenmp
Sun micro: Compile with -xopenmp
PGI: Compile with -mp
********************************************************************************************
9. CAM3的openMP并行性能测试
NCAR的CAM3的开发测试都在IBM AIX系统上进行,然后才移植到其他系统平台上,在linux平台上也支持PGI编译器,本机环境为Intel Core(TM) Duo P7450双核,2.13GHZ主频,内存,32位Ubuntu 9.04系统,测试脚本如下:
*******************************************************************************************************
#! /bin/tcsh -f
#=======================================================================
unsetenv MP_PROCS
# must be set equal to (CPUs-per-node / tasks_per_node)
# set openMP thread number(1 or 2 or 4 or 8.....)
setenv OMP_NUM_THREADS 2
# # suggestion from Jim Edwards to reintroduce XLSMPOPTS on 11/13/03
setenv XLSMPOPTS "stack=256000000"
setenv AIXTHREAD_SCOPE S
setenv MALLOCMULTIHEAP true
setenv OMP_DYNAMIC false
## Do our best to get sufficient stack memory
limit stacksize unlimited
## netCDF stuff for Q32
# the version of netcdf is important, 3.6.2 and 3.5.1 are all ok but 4.0 will error
setenv INC_NETCDF /home/wy/cam3_0/netcdf3.6.2/include
setenv LIB_NETCDF /home/wy/cam3_0/netcdf3.6.2/lib
setenv MOD_NETCDF /home/wy/cam3_0/netcdf3.6.2/include
# # netCDF stuff for Q64
#setenv INC_NETCDF /dgpfs/fs1/zhaoping/tongji/netcdf_64/include
#setenv LIB_NETCDF /dgpfs/fs1/zhaoping/tongji/netcdf_64/lib
# # MPI stuff
#setenv INC_MPI /home/wy/tools/mpi/include
#setenv LIB_MPI /home/wy/tools/mpi/lib
#setenv mpirun /home/wy/tools/mpi/bin/mpirun
## ROOT OF CAM DISTRIBUTION - probably needs to be customized.
## Contains the source code for the CAM distribution.
## (the root directory contains the subdirectory "models")
set camroot = /home/wy/cam3_0
## ROOT OF CAM DATA DISTRIBUTION - needs to be customized unless running at NCAR.
## Contains the initial and boundary data for the CAM distribution.
## (the root directory contains the subdirectories "atm" and "lnd")
setenv CSMDATA /home/wy/cam3_0/inputdata
## Default namelist settings:
## $case is the case identifier for this run. It will be placed in the namelist.
## $runtype is the run type: initial, restart, or branch.
## $nelapse is the number of timesteps to integrate, or number of days if negative.
set case = camrun
set runtype = initial
set nelapse = -1
## $wrkdir is a working directory where the model will be built and run.
## $blddir is the directory where model will be compiled.
## $rundir is the directory where the model will be run.
## $cfgdir is the directory containing the CAM configuration scripts.
set wrkdir = /home/wy/cam3_0/run/
set blddir = $wrkdir/$case/bld
set rundir = $wrkdir/$case
set cfgdir = $camroot/models/atm/cam/bld
## Ensure that run and build directories exist
mkdir -p $rundir || echo "cannot create $rundir" && exit 1
mkdir -p $blddir || echo "cannot create $blddir" && exit 1
## If an executable doesn't exist, build one.
if ( ! -x $blddir/cam ) then
cd $blddir || echo "cd $blddir failed" && exit 1
$cfgdir/configure -smp || echo "configure failed" && exit 1
echo "building CAM in $blddir ..."
rm -f Depends
# make -j32 >&! MAKE.out || echo "CAM build failed: see $blddir/MAKE.out" && exit 1
make >&! MAKE.out || echo "CAM build failed: see $blddir/MAKE.out" && exit 1
endif
echo "build finished"
## Create the namelist
cd $blddir || echo "cd $blddir failed" && exit 1
cp /home/wy/cam3_0/namelist_in $blddir/
$cfgdir/build-namelist -case $case -runtype initial \
-namelist "&camexp nelapse=$nelapse, fincl1='CLDHGH','CLDLOW','CLDMED','CLDTOT', \
'CLOUD','CONCLD','CMFDQ','CMFDQR','CMFDT','DCQ','DTCOND','DTH','DTV','ETADOT',\
'FLN200','FLN200C','FLNS','FLNSC','FLNSOI','FLNT','FLNTC','FLUT','FLUTC','FSDS',\
'FSDSC','FSN200','FSN200C','FSNS','FSNSC','FSNSOI','FSNT','FSNTC','FSNTOA','FSNTOAC',\
'FU','FV','LANDFRAC','LHFLX','LHFLXOI','LPSTEN','NSTEP','OCNFRAC','OMEGA','OMEGA500',\
'OMEGA850','OMEGAT','OMEGAU','PBOT','PDELDRY','PHIS','PRECC','PRECCFRQ','PRECCINT',\
'PRECCav','PRECL','PRECLFRQ','PRECLINT','PRECLav','PRECSC','PRECSH','PRECSL','PRECT',\
'PRECTMX','PS','PSDRY','PSL','Q','Q200','Q850','QC','QFLX','QRL','QRS','RELHUM','SFCLDICE',\
'SFCLDLIQ','SFQ','SGH','SHFLX','SHFLXOI','SNOWHICE','SNOWHLND','SOLIN','SRFRAD','SST','T',\
'T300','T850','TAUGWX','TAUGWY','TAUTMSX','TAUTMSY','TAUX','TAUY','TBOT','TMQ','TREFHT',\
'TS','TSMN','TSMX','TTEND','U','U200','U850','UBOT','US','USTAR','UTEND','UU','V','V200',\
'V850','VBOT','VD01','VQ','VT','VU','VV','WSPEED','Z050','Z3','Z300','Z500','Z700','ZBOT' \
mss_irt=0 /" -infile $blddir/namelist_in -o $rundir/namelist\
|| echo "build-namelist failed" && exit 1
echo "build-namelist finished"
## Run CAM
cd $rundir || echo "cd $rundir failed" && exit 1
echo "running CAM in $rundir"
#mpirun -np 8 $blddir/cam < namelist >out.txt || echo "CAM run failed" && exit 1
$blddir/cam < namelist || echo "CAM run failed" && exit 1
exit 0
*************************************************************************
该脚本通过修改 OMP_NUM_THREADS线程个数进行测试,而MPI测试则通过mpirun -np 参数设置
结点个数,似乎结点个数对测试结果没什么影响(线程数一直为1),可能并未并行起来,即MPI并行
无法识别单机或单结点上共享内存的多个核,而只能识别分布内存的多个CPU:
MPI进程数=1时,总时间=381.435s
MPI进程数=2时,总时间=376.216s
MPI进程数=4时,总时间=380.493s
而openMP线程个数为2时(每个核一个线程)效率最高,CAM3模拟一天需要时间如下所示:
线程数=1时: 总时间=363.856s
线程数=2时: 总时间=209.085s
线程数=4时: 总时间=224.619s
线程数=8时: 总时间=291.311s
#! /bin/tcsh -f
#=======================================================================
unsetenv MP_PROCS
# must be set equal to (CPUs-per-node / tasks_per_node)
# set openMP thread number(1 or 2 or 4 or 8.....)
setenv OMP_NUM_THREADS 2
# # suggestion from Jim Edwards to reintroduce XLSMPOPTS on 11/13/03
setenv XLSMPOPTS "stack=256000000"
setenv AIXTHREAD_SCOPE S
setenv MALLOCMULTIHEAP true
setenv OMP_DYNAMIC false
## Do our best to get sufficient stack memory
limit stacksize unlimited
## netCDF stuff for Q32
# the version of netcdf is important, 3.6.2 and 3.5.1 are all ok but 4.0 will error
setenv INC_NETCDF /home/wy/cam3_0/netcdf3.6.2/include
setenv LIB_NETCDF /home/wy/cam3_0/netcdf3.6.2/lib
setenv MOD_NETCDF /home/wy/cam3_0/netcdf3.6.2/include
# # netCDF stuff for Q64
#setenv INC_NETCDF /dgpfs/fs1/zhaoping/tongji/netcdf_64/include
#setenv LIB_NETCDF /dgpfs/fs1/zhaoping/tongji/netcdf_64/lib
# # MPI stuff
#setenv INC_MPI /home/wy/tools/mpi/include
#setenv LIB_MPI /home/wy/tools/mpi/lib
#setenv mpirun /home/wy/tools/mpi/bin/mpirun
## ROOT OF CAM DISTRIBUTION - probably needs to be customized.
## Contains the source code for the CAM distribution.
## (the root directory contains the subdirectory "models")
set camroot = /home/wy/cam3_0
## ROOT OF CAM DATA DISTRIBUTION - needs to be customized unless running at NCAR.
## Contains the initial and boundary data for the CAM distribution.
## (the root directory contains the subdirectories "atm" and "lnd")
setenv CSMDATA /home/wy/cam3_0/inputdata
## Default namelist settings:
## $case is the case identifier for this run. It will be placed in the namelist.
## $runtype is the run type: initial, restart, or branch.
## $nelapse is the number of timesteps to integrate, or number of days if negative.
set case = camrun
set runtype = initial
set nelapse = -1
## $wrkdir is a working directory where the model will be built and run.
## $blddir is the directory where model will be compiled.
## $rundir is the directory where the model will be run.
## $cfgdir is the directory containing the CAM configuration scripts.
set wrkdir = /home/wy/cam3_0/run/
set blddir = $wrkdir/$case/bld
set rundir = $wrkdir/$case
set cfgdir = $camroot/models/atm/cam/bld
## Ensure that run and build directories exist
mkdir -p $rundir || echo "cannot create $rundir" && exit 1
mkdir -p $blddir || echo "cannot create $blddir" && exit 1
## If an executable doesn't exist, build one.
if ( ! -x $blddir/cam ) then
cd $blddir || echo "cd $blddir failed" && exit 1
$cfgdir/configure -smp || echo "configure failed" && exit 1
echo "building CAM in $blddir ..."
rm -f Depends
# make -j32 >&! MAKE.out || echo "CAM build failed: see $blddir/MAKE.out" && exit 1
make >&! MAKE.out || echo "CAM build failed: see $blddir/MAKE.out" && exit 1
endif
echo "build finished"
## Create the namelist
cd $blddir || echo "cd $blddir failed" && exit 1
cp /home/wy/cam3_0/namelist_in $blddir/
$cfgdir/build-namelist -case $case -runtype initial \
-namelist "&camexp nelapse=$nelapse, fincl1='CLDHGH','CLDLOW','CLDMED','CLDTOT', \
'CLOUD','CONCLD','CMFDQ','CMFDQR','CMFDT','DCQ','DTCOND','DTH','DTV','ETADOT',\
'FLN200','FLN200C','FLNS','FLNSC','FLNSOI','FLNT','FLNTC','FLUT','FLUTC','FSDS',\
'FSDSC','FSN200','FSN200C','FSNS','FSNSC','FSNSOI','FSNT','FSNTC','FSNTOA','FSNTOAC',\
'FU','FV','LANDFRAC','LHFLX','LHFLXOI','LPSTEN','NSTEP','OCNFRAC','OMEGA','OMEGA500',\
'OMEGA850','OMEGAT','OMEGAU','PBOT','PDELDRY','PHIS','PRECC','PRECCFRQ','PRECCINT',\
'PRECCav','PRECL','PRECLFRQ','PRECLINT','PRECLav','PRECSC','PRECSH','PRECSL','PRECT',\
'PRECTMX','PS','PSDRY','PSL','Q','Q200','Q850','QC','QFLX','QRL','QRS','RELHUM','SFCLDICE',\
'SFCLDLIQ','SFQ','SGH','SHFLX','SHFLXOI','SNOWHICE','SNOWHLND','SOLIN','SRFRAD','SST','T',\
'T300','T850','TAUGWX','TAUGWY','TAUTMSX','TAUTMSY','TAUX','TAUY','TBOT','TMQ','TREFHT',\
'TS','TSMN','TSMX','TTEND','U','U200','U850','UBOT','US','USTAR','UTEND','UU','V','V200',\
'V850','VBOT','VD01','VQ','VT','VU','VV','WSPEED','Z050','Z3','Z300','Z500','Z700','ZBOT' \
mss_irt=0 /" -infile $blddir/namelist_in -o $rundir/namelist\
|| echo "build-namelist failed" && exit 1
echo "build-namelist finished"
## Run CAM
cd $rundir || echo "cd $rundir failed" && exit 1
echo "running CAM in $rundir"
#mpirun -np 8 $blddir/cam < namelist >out.txt || echo "CAM run failed" && exit 1
$blddir/cam < namelist || echo "CAM run failed" && exit 1
exit 0
*************************************************************************
该脚本通过修改 OMP_NUM_THREADS线程个数进行测试,而MPI测试则通过mpirun -np 参数设置
结点个数,似乎结点个数对测试结果没什么影响(线程数一直为1),可能并未并行起来,即MPI并行
无法识别单机或单结点上共享内存的多个核,而只能识别分布内存的多个CPU:
MPI进程数=1时,总时间=381.435s
MPI进程数=2时,总时间=376.216s
MPI进程数=4时,总时间=380.493s
而openMP线程个数为2时(每个核一个线程)效率最高,CAM3模拟一天需要时间如下所示:
线程数=1时: 总时间=363.856s
线程数=2时: 总时间=209.085s
线程数=4时: 总时间=224.619s
线程数=8时: 总时间=291.311s
没有评论:
发表评论