|
|||
INSTALAÇÃO DO MODELO CAM3.1 NCAR
MANUAL DE INSTALAÇÃO E OPERAÇÃO
Os pré-requisitos necessários para instalação do modelo CAM 3.0 são:
· Sistema Operacional Linux /Unix
· Matlab versão 2012a ou 2012b com o pacote nctoolbox (rodará no Windows)
· Compilador Portland ou Intel.
· Biblioteca NETCDF versão 3.6
· Biblioteca OPENMPI (paraleleismo)
Para fins didáticos, utiliza-se a seguinte estrutura de diretórios numa conta chamada cam em uma máquina do sistema Linux/Unix.
/u/cam/originais
/u/cam/MODELO1
/u/cam/MODELO2
/u/cam/MODELO3
/u/cam/MODELO4
/u/cam/INTEL ou /u/cam/PGI (conforme escolha do compilador ou ambos)
No diretório originais armazena-se os códigos fontes dos modelos e demais pacotes. No diretório MODELO1 instala-se o modelo em sua forma serial, no MODELO2 instala-se o modelo na forma paralela para sistemas com memória distribuída (DM) e no MODELO3 instala-se a forma paralela para memória compartilhada (SMP).
Um sistema de memória compartilhada (SMP) é um computador com vários processadores e que compartilham uma única memória. Um sistema de memória distribuída é um sistema onde vários processadores acessam cada um sua memória. Hoje em dia é mais comum ter sistemas híbridos (SMP+DM) em clusters de computadores, onde cada nó possui vários processadores que acessam uma mesma memória no nó, mas existem outros nós que possuem sua própria memória. Balancear o uso destas ferramentas é o grande objetivo de quem trabalha com aplicações de alta capacidade computacional.
Antes da instalação do modelo, necessita-se a instalação dos pacotes na seguinte ordem:
· Compilador Fortran/CC/C++
· Biblioteca NETCDF compilada com o compilador acima.
· Biblioteca OPENMPI compilada com o compilador acima.
O compilador deve ser escolhido aquele que possui suporte para o modelo. Para fins didáticos, escolheu-se o compilador INTEL para as atividades. Tudo que for compilar com o compilador, deverá estar dentro do diretório /u/cam/INTEL.
Escolhido o compilador e instalado corretamente, baixe os pacotes das bibliotecas nos seguintes lugares e armazene-as no diretório /u/cam/originais.
NETCDF :
Site: http://www.unidata.ucar.edu/downloads/netcdf/index.jsp
Baixar versão 3.6
OPENMPI
Baixar versão mais atual.
Nota Importante: Tanto o netcdf quanto o openmpi podem estar instalados em seu sistema, contudo compilados para Gnu Fortran. Se não for utilizar o GNU Fortran, vai ter que recompilar tanto o netcdf quanto o Openmpi.
A instalação deverá ser realizada de dentro do diretório originais mas a instalação será feita no diretório /u/cam/INTEL.
Após a instalação do modelo , criar o ambiente de compilação. Edite o arquivo .bashrc no diretório /u/cam com as seguintes linhas:
|
export CSMDATA=/u/CAM/MODELO2/ source /u/cam/INTEL/bin/ifortvars.sh intel64 source /u/cam/INTEL/bin/iccvars.sh intel64 export CC=icc export F77=ifort export FC=ifort export FCFLAGS=-O3 export CXX=icpc export INC_MPI=/u/cam/INTEL/mpi/include export LIB_MPI=/u/cam/INTEL/mpi/lib export PATH=$PATH:/u/cam/INTEL/mpi/bin export LD_LIBRARY_PATH=/u/cam/INTEL/mpi/lib:/u/cam/INTEL/lib:
|
Obviamente para outros compiladores deve-se alterar as opções e diretórios.
Instalação do netcdf:
Descompacte o arquivo baixado e entre no diretório resultante. Digite o seguinte comando:
./configure --prefix=/u/cam/INTEL/NETCDF3/
Make all install
Instalação do openmpi:
Descompacte o arquivo baixado e entre no diretório resultante. Digite o seguinte comando:
./configure --prefix=/u/cam/INTEL/mpi
O código fonte do modelo pode ser baixado no seguinte site:
http://www.cesm.ucar.edu/models/atm-cam/download/
Os arquivos devem ser baixados para o diretório originais.
Os arquivos a serem baixados são:
http://www.cesm.ucar.edu/models/atm-cam/download/cam3.1/cam3.1.p2_source_code.tar.gz
http://www.cesm.ucar.edu/models/atm-cam/download/cam3.1/cam3.1_forall_datasets.tar.gz
http://www.cesm.ucar.edu/models/atm-cam/download/cam3.0/cam3.0_landsurf_datasets.tar.gz
Baixar tudo ou somente a resolução que for usar:
http://www.cesm.ucar.edu/models/atm-cam/download/cam3.1/cam3.1_64x128_T42_datasets.tar.gz
http://www.cesm.ucar.edu/models/atm-cam/download/cam3.1/cam3.1_48x96_T31_datasets.tar.gz
http://www.cesm.ucar.edu/models/atm-cam/download/cam3.1/cam3.1_128x256_T85_datasets.tar.gz
Para fins didáticos, instalara-se a versão de resolução T85 do modelo.
A instalação da versão serial não é necessária para a operação. Contudo, em sistemas onde nunca foi instalado o modelo é aconselhável a instalação serial pois podem surgir problemas na instalação das versões em paralelo que não são problemas do paralelismo.
Por outro lado, é bom se ter a versão serial para avaliar o desempenho do modelo. Por exemplo, roda-se por um determinado tempo em serial. A versão paralela deve rodar em menor tempo do que a versão serial. O índice de desempenho será quanto menor esse tempo, melhor o desempenho. Caso o tempo, em paralelo aumente é por que alguma coisa está errada com o modelo ou ele chegou a um limite do paralelismo.
Outro teste de desempenho é para char o número de escalabilidade do sistema. Roda-se em serial um caso teste. Depois roda-se me paralelo com 2, 4, n processadores e verifica-se a escalabilidade do sistema, ou seja, se o desempenho aumenta ou diminui com o número de processadores. Isso evita que se utilize processadores a mais ou a menos de um sistema computacional.
Vá até o diretório /u/cam/MODELO1 e descompacte os arquivos do CAM que estão em /u/cam/originais através do comando gzip
gzip -xzvf /u/cam/originais/<arquivo do cam>
Descompactados, agora digite:
export CSMDATA=/u/CAM/MODELO1/
./cam1/models/atm/cam/bld/configure -i -x -cam_exe cam_intel_serial -nosmp -nospmd -fc ifort -cc icc -res 128x256 -target_os linux_intel
Pressione [enter] em todas as questões.
Depois digite:
gmake clean
gmake
Se não houver erros devido a problemas de pré-requisitos , modelo foi compilado.
Execute a instalação do modelo em serial.
Antes de executar o gmake, altere o arquivo Makefile conforme abaixo:
|
# Make macros for CAM.
UNAMES := ROOTDIR := /u/CAM/MODELO2/cam1 EXENAME := cam_intel_DM MODEL_EXEDIR := /u/cam/MODELO2 INC_NETCDF := /u/cam/INTEL/netcdf3/include LIB_NETCDF := /u/cam/INTEL/netcdf3/lib MOD_NETCDF := INC_MPI := /u/cam/INTEL/mpi/include LIB_MPI := /u/cam/INTEL/mpi/lib MPI_LIB_NAME := mpi ESMF_ROOT := /u/CAM/MODELO2/cam1/models/utils/esmf ESMF_BLD := /u/CAM/MODELO2/esmf DEBUG := FALSE SMP := TRUE NESTED_OMP := FALSE USER_FC := mpif90 USER_CC := mpicc USER_CPPDEFS := USER_CFLAGS := USER_FFLAGS := F_OPTIMIZATION_OVERRIDE := USER_LDFLAGS :=
|
O próximo bloco fica na linha: 556
|
ifeq ($(findstring mpif90,$(FC)),mpif90) ---> Trocque ifort -> por mpif90 ESMF_ARCH := linux_intel mod_path := -I$(ESMF_MOD)/$(ESMF_ARCH) -I$(MOD_NETCDF) FFLAGS := $(cpp_path) $(mod_path) $(CPPDEF) -132 -autodouble -ftz -g SPEC_FFLAGS := $(FFLAGS) LDFLAGS := FREEFLAGS := -FR ifeq ($(DEBUG),TRUE) FFLAGS += -CB else # Check for override of default Fortran compiler optimizations ifeq ($(F_OPTIMIZATION_OVERRIDE),$(null)) FORTRAN_OPTIMIZATION := -O2 endif FFLAGS += $(FORTRAN_OPTIMIZATION) endif ifeq ($(SMP),TRUE) FFLAGS += (retire o openmp) LDFLAGS += (retire o openmp) endif endif
|
Assim feitas modificações, execute :
gmake clean
gmake
Se não houver erros, o modelo foi compilado com sucesso.
Execute a instalação do modelo em serial.
Antes de executar o gmake, altere o arquivo Makefile conforme abaixo:
|
# Make macros for CAM.
UNAMES := ROOTDIR := /u/CAM/MODELO2/cam1 EXENAME := cam_intel_DM MODEL_EXEDIR := /u/cam/MODELO2 INC_NETCDF := /u/cam/INTEL/netcdf3/include LIB_NETCDF := /u/cam/INTEL/netcdf3/lib MOD_NETCDF := INC_MPI := /u/cam/INTEL/mpi/include LIB_MPI := /u/cam/INTEL/mpi/lib MPI_LIB_NAME := mpi ESMF_ROOT := /u/CAM/MODELO2/cam1/models/utils/esmf ESMF_BLD := /u/CAM/MODELO2/esmf DEBUG := FALSE SMP := TRUE NESTED_OMP := FALSE USER_FC := ifort USER_CC := ICC USER_CPPDEFS := USER_CFLAGS := USER_FFLAGS := F_OPTIMIZATION_OVERRIDE := USER_LDFLAGS := |
O próximo bloco fica na linha: 556
|
ifeq ($(findstring mpif90,$(FC)),mpif90) ---> Trocque ifort -> por mpif90 ESMF_ARCH := linux_intel mod_path := -I$(ESMF_MOD)/$(ESMF_ARCH) -I$(MOD_NETCDF) FFLAGS := $(cpp_path) $(mod_path) $(CPPDEF) -132 -autodouble -ftz -g SPEC_FFLAGS := $(FFLAGS) LDFLAGS := FREEFLAGS := -FR ifeq ($(DEBUG),TRUE) FFLAGS += -CB else # Check for override of default Fortran compiler optimizations ifeq ($(F_OPTIMIZATION_OVERRIDE),$(null)) FORTRAN_OPTIMIZATION := -O2 endif FFLAGS += $(FORTRAN_OPTIMIZATION) endif ifeq ($(SMP),TRUE) FFLAGS += (coloque o openmp) LDFLAGS += (coloque o openmp) endif endif
|
Assim feitas modificações, execute :
gmake
Se não houver erros, o modelo foi compilado com sucesso.
Execute a instalação do modelo em serial.
Antes de executar o gmake, altere o arquivo Makefile conforme abaixo:
|
# Make macros for CAM.
UNAMES := ROOTDIR := /u/CAM/MODELO2/cam1 EXENAME := cam_intel_DM MODEL_EXEDIR := /u/cam/MODELO3 INC_NETCDF := /u/cam/INTEL/netcdf3/include LIB_NETCDF := /u/cam/INTEL/netcdf3/lib MOD_NETCDF := INC_MPI := /u/cam/INTEL/mpi/include LIB_MPI := /u/cam/INTEL/mpi/lib MPI_LIB_NAME := mpi ESMF_ROOT := /u/CAM/MODELO3/cam1/models/utils/esmf ESMF_BLD := /u/CAM/MODELO3/esmf DEBUG := FALSE SMP := TRUE NESTED_OMP := FALSE USER_FC := mpif90 USER_CC := mpicc USER_CPPDEFS := USER_CFLAGS := USER_FFLAGS := F_OPTIMIZATION_OVERRIDE := USER_LDFLAGS := |
O próximo bloco fica na linha: 556
|
ifeq ($(findstring mpif90,$(FC)),mpif90) ---> Trocque ifort -> por mpif90 ESMF_ARCH := linux_intel mod_path := -I$(ESMF_MOD)/$(ESMF_ARCH) -I$(MOD_NETCDF) FFLAGS := $(cpp_path) $(mod_path) $(CPPDEF) -132 -autodouble -ftz -g SPEC_FFLAGS := $(FFLAGS) LDFLAGS := FREEFLAGS := -FR ifeq ($(DEBUG),TRUE) FFLAGS += -CB else # Check for override of default Fortran compiler optimizations ifeq ($(F_OPTIMIZATION_OVERRIDE),$(null)) FORTRAN_OPTIMIZATION := -O2 endif FFLAGS += $(FORTRAN_OPTIMIZATION) endif ifeq ($(SMP),TRUE) FFLAGS += (coloque o openmp) LDFLAGS += (coloque o openmp) endif endif |
Assim feitas modificações, execute :
Gmake clean
gmake
Se não houver erros, o modelo foi compilado com sucesso.
No caso serial:
./cam_serial < namelist
No caso em paralelo:
mpirun -np n ./cam_paralelo < namelist
onde n é o número de processadores que deve seguir : n deve ser sempre par.