MITgcm 编译安装测试说明
来源:互联网 发布:偷窥网络在线视频 编辑:程序博客网 时间:2024/06/07 08:27
科学计算软件编译安装方法说明 --- MITgcm 篇 (提供免费测试 QQ 178068275)
官网地址:
http://mitgcm.org/
截止目前(2017.5.4)最新版本:
MITgcm_c66g.tar.gz
下载:
http://mitgcm.org/public/source_code.html
最新版手册
http://mitgcm.org/public/r2_manual/latest/
1. 什么是MITgcm?
麻省技术研究所的环流模式,模拟大尺度海洋环流。
2. 编译环境
Intel Compiler /GNU Compiler + MPI Compiler
3. 安装 Intel Compiler 编译器,设置编译环境
如果使用的是Intel的CPU,建议使用Intel的编译器。
详细安装方法参见博客相关文章。
例如使用TH-1A的Intel 2013编译器编译,可以加载如下环境变量:
source /opt/intel/composer_xe_2013.0.079/bin/iccvars.sh intel64 source /opt/intel/composer_xe_2013.0.079/bin/ifortvars.sh intel64 source /opt/intel/composer_xe_2013.0.079/mkl/bin/mklvars.sh intel64
4.安装 MPI Compiler,设置编译环境
编译并行版的程序需要并行编译器,例如MPI并行的程序需要MPI编译器,常用的MPI例如Intel MPI 、MPICH 、OPENMPI等。
不同的机器可能针对自身硬件进行MPI优化,天河系统的MPI是基于开源MPICH进行的二次开发优化,进而支持性能卓越的天河自主高速互联网络。
详细安装方法参见博客相关文章。
例如使用TH-1A的Intel 2013编译器编译的mpich,可以加载如下环境变量:
export MPI_HOME=/usr/local/mpi-intel2013 export PATH=$MPI_HOME/bin:$PATH export LD_LIBRARY_PATH=$MPI_HOME/lib:$LD_LIBRARY_PATH
5.编写-of指向的文件linux_amd64_ifort_mpich
在MITgcm_c66g/tools/build_options目录有很多已经写好的配置文件,它们是针对不同的编译环境而编写的,故我们针对TH-1A的系统环境,编写了适用于我们的配置文件,名称为:linux_amd64_ifort_mpich。
具体内容为:
#!/bin/bash## $Header:$HOME/software/MITgcm/MITgcm_c66b/tools/build_options/linux_amd64_ifort+mpich,v 1.0 2016/12/14 16:47:3 zhenggang $# $Name: checkpoint66b ??? $## Build options for ifort with mpich on Linux AMD64 platform## Tested on TH-1A (NeoKylin 3.2) with ifort 13.0.1 and mpich 3.0.4#--------------------------------------------------------------------## CC FC F90C LINK#--------------------------------------------------------------------#MPI='true'CC=mpiccFC=mpif77F90C=mpif90LINK="$F90C -shared-intel -no-ipo"#--------------------------------------------------------------------## DEFINES F90FIXEDFORMAT EXTENDED_SRC_FLAG GET_FC_VERSION OMPFLAG#--------------------------------------------------------------------#DEFINES='-DALLOW_USE_MPI -DALWAYS_USE_MPI -DWORDLENGTH=4'F90FIXEDFORMAT='-fixed -Tf'EXTENDED_SRC_FLAG='-132'GET_FC_VERSION="--version"OMPFLAG='-openmp'#--------------------------------------------------------------------## CPP#--------------------------------------------------------------------#CPP='cpp -traditional -P'#--------------------------------------------------------------------## NOOPTFLAGS NOOPTFILES#--------------------------------------------------------------------#NOOPTFLAGS='-O0 -g'NOOPTFILES=''#--------------------------------------------------------------------## CFLAGS#--------------------------------------------------------------------#PROCF='-xHost'CFLAGS="-O3 -ip -m64 -no-offload -fno-alias -ansi-alias -override-limits $PROCF"#--------------------------------------------------------------------## FFLAGS F90FLAGS#--------------------------------------------------------------------## FFLAGS# details in the end of this fileFFLAGS="$FFLAGS -m64 -convert big_endian -assume byterecl -mcmodel=medium-shared-intel -no-offload -fno-alias -ansi-alias -override-limits $PROCF"F90FLAGS="$FFLAGS"#--------------------------------------------------------------------## F90OPTIM#--------------------------------------------------------------------## from linux_amd64_ifort+impiif test "x$IEEE" = x ; then #- with optimisation: FOPTIM="-O2 -align -ip -fp-model source $PROCF"else if test "x$DEVEL" = x ; then #- no optimisation + IEEE : FOPTIM="-O0 -fp-model source -noalign $PROCF" else #- development/check options: FOPTIM="-O0 -noalign -g -traceback $PROCF" NOOPTFLAGS=$FOPTIM NOOPTFILES='adread_adwrite.F mdsio_rw_field.F mdsio_rw_slice.F' FOPTIM="$FOPTIM -warn all -warn nounused" FOPTIM="$FOPTIM -fpe0 -ftz -fp-stack-check -check all -ftrapuv" fifiF90OPTIM=$FOPTIM#--------------------------------------------------------------------## set net-cdf / MPIetc.#--------------------------------------------------------------------## for TH-1AINCLUDEDIRS=''INCLUDES=''LIBS=''# --------------------------# NETCDF DIRECTORIES# --------------------------HDF5_HOME=/vol-th/software/io_tools/hdf5/mpi/1.8.11NETCDF_HOME=/vol-th/software/io_tools/netcdf/mpi/4.1.2INCLUDES="-I$NETCDF_HOME/include -I$HDF5_HOME/include"LIBS="-L$NETCDF_HOME/lib -lnetcdff -lnetcdf -I$HDF5_HOME/include -lhdf5_hl -lhdf5"# -----------------------# INCLUDE MPI DIRECTORIES# -----------------------# mpich3.0.4-intel2013MPI_HOME=/usr/local/mpi-intel2013INCLUDES="$INCLUDES -I$MPI_HOME/include"INCLUDEDIRS="$INCLUDEDIRS $MPI_HOME/include"LIBS="$LIBS -L$MPI_INC_DIR -lmpich"#- used for parallel (MPI) DIVAMPIINCLUDEDIR="$MPI_INC_DIR
大家可以针对build_options中提供的模板以及自己机器的配置,修改一个适合自己机器的模板内容,也欢迎讨论交流。
6.编译
以exp2为例:
cd /path/to/MITgcm_c66g/verification/exp2/build../../../tools/genmake2 -mods=../code -mpi -of=../../../tools/build_options/linux_amd64_ifort_mpichmake dependmake
mitgcmuv
7.单核本地测试
先声明环境变量(注意区分文件系统),这个针对相关库不在默认路径的情况(例如netcdf库)。如果不设置环境,容易出现找不到动态库的情况。
export LD_LIBRARY_PATH=/vol-th/software/io_tools/netcdf/mpi/4.1.2/lib:$LD_LIBRARY_PATHexport LD_LIBRARY_PATH=/vol-th/software/io_tools/hdf5/mpi/1.8.11/lib:$LD_LIBRARY_PATHexport LD_LIBRARY_PATH=/vol-th/intel_composer_xe_2013.0.079_lib:/vol-th/lib:$LD_LIBRARY_PATH
运行测试算例:
cd ../runcp ../input/* ./cp ../build/mitgcmuv ././mitgcmuv > output.txt
8.多核测试
如果是普通的集群,那么使用通常的mpirun命令即可,如果有作业管理系统,编写作业提交脚本即可。下面举例说明如何在TH-1A系统下提交作业计算:
1)编写提交脚本sub.sh
#!/bin/bash yhrun -N 2 -n 24 -p debug ./mitgcmuv > output.txt说明:
-N 节点数;-n 核数;-p 分区;./mitgcmuv 为刚刚编译的可执行文件;output.txt 为定向输出文件。
2)提交任务
yhbatch -N 2 -n 24-p debug sub.sh
3)查看输出
计算完成后会在output.txt文件中生成结果文件。
欢迎交流!
- MITgcm 编译安装测试说明
- MITgcm
- vasp 编译安装测试说明
- gromacs 编译安装测试说明
- atat 编译安装测试说明
- lammps 编译安装测试说明 (提供免费测试)
- libsrtp 编译测试说明
- fftw 编译安装说明
- castep 编译安装说明
- BerkeleyGW编译安装说明
- tez编译安装测试
- OpenCV编译、安装、测试
- 简单例子测试Ubuntu安装的mysql开发包SDK,附编译选项说明
- PHP编译安装参数说明
- 首次编译安装测试passthru
- sqlite 交叉编译安装测试
- libevent安装编译并测试
- cuda测试caffe编译安装
- 访问discuz报SELECT * FROM common_process WHERE `processid`='DZ_CRON_15'错误
- spark厦大----逻辑斯蒂回归分类器--spark.ml
- GIt简单入门
- 配置Java Tomcat Maven环境变量
- 从一个MySQL left join优化的例子加深对查询计划的理解
- MITgcm 编译安装测试说明
- Python:input输入中文,print输出乱码
- DAO模式中的实体类
- 数据模型的三要素
- 【实用手记】Linux如何设置在当前目录下打开终端
- html表格 <td> 文字过多需要隐藏的正确方法
- Oracle 计算两个时间的差值
- 线程实现交替任务
- Ubuntu 查看磁盘空间大小命令<转>