note13-2009-6-7-Ubuntu 9.04单机双核并行环境设置及CAM3性能测试报告

看似复杂的东西都由很简单的东西组成,图形界面也是由一个个简单的文本配置文件来控制的,电

脑软件说白了都是程序代码而已,懂了原理,一切都很简单。只按照别人说的一步步设置去做,却不去

想为什么要这样做,是否有更好更简单的方法,这样永远都不会体会到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 后,也就可用这个源,而不用漫长的下载了。

*********************************************************************

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)(专业软件);这些软件包都可以直接在新立得软件包管理器中搜索安装。

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其实在单机上没什么用处。

事实上,尽管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并行性能测试

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

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

您正在使用您的 WordPress.com 账号评论。 登出 /  更改 )

Google photo

您正在使用您的 Google 账号评论。 登出 /  更改 )

Twitter picture

您正在使用您的 Twitter 账号评论。 登出 /  更改 )

Facebook photo

您正在使用您的 Facebook 账号评论。 登出 /  更改 )

Connecting to %s