Closed cfbastarz closed 1 year ago
A compilação com ambiente de programação da Intel na máquina Egeon, para o oensMB09, deve ser feita da seguinte forma:
Login na Egeon;
Carregamento do ambiente:
module purge
module load ohpc
module swap gnu9 intel
module swap openmpi4 impi
module load hwloc
module load phdf5
module load netcdf
module load netcdf-fortran
module swap intel intel/2022.1.0
Compilação do oensMB09:
make comp=intel
Compilação do pré-processamento, modelo e pós-processamento (testado com o BAM_V1.2.1):
cd pre/sources
make linux_intel_egeon
cd ../../model/source
make linux_intel_egeon
cd ../../pos/source
make linux_intel_egeon
O ambiente de referência tem, portanto, os seguintes módulos carregados:
Currently Loaded Modules:
1) autotools 6) compiler-rt/2021.4.0 11) mkl/2021.4.0 16) netcdf/4.7.4
2) prun/2.2 7) debugger/2021.6.0 12) intel/2022.1.0 17) netcdf-fortran/4.5.3
3) ohpc 8) dpl/2021.4.0 13) mpi/2021.4.0
4) hwloc/2.5.0 9) oclfpga/2021.4.0 14) impi/2021.4.0
5) tbb/2021.4.0 10) compiler/2022.1.0 15) phdf5/1.10.8
Nota: foram feitos alguns ajustes para a compilação das bibliotecas bacio
e nemsio
do pré-processamento. Foi adicionado o arquivo Makefile.linux_intel_egeon
ao pré, model e pós. Para a compilação da w3lib
do pós-processamento, foram feitos alguns ajustes sugeridos pelo @JAAravequia em https://projetos.cptec.inpe.br/projects/smna/wiki/Portabilidade_do_sistema/34#w3lib-14.
Realizando testes de execução do pré-processamento com os executáveis gerados pelo compilador da Intel na Egeon, percebi que o Chopping não é executado da forma correta. O código pára na chamada da biblioteca nemsio
, mais especificamente na chamada do módulo baopenr
, indicando um problema com o código de retorno da rotina:
Boundary Run-Time Check Failure for variable 'nemsio_openclose_mp_nemsio_open_$IOS'
Entrei em contato com o pessoal do EMC para obter mais informações (https://github.com/NOAA-EMC/NCEPLIBS-nemsio/issues/64), mas acredito que esse problema seja devido ou ao compilador (versão) ou aos módulos que estou carregando para a compilação ou mesmo dentro do script do submissão.
Foram testados diferentes flags de debug e níveis de otimização para a compilação da biblioteca e do código do pré-processamento, sempre resultando no mesmo problema. De fato, o código roda quando a análise já se encontra em disco (e.g., em um teste anterior com o GNU, esqueci de remover a análise do model/datain
e o Chopping_parallel
aceitou essa análise (?)).
Conversando com o pessoal do EMC, foi sugerido (vide issue lincada na mensagem anterior) utilizar a versão mais recento do nemsio
. Para fazer isso, foi necessário utilizar também as bibliotecas bacio
e w3emc
(no modelo BAM, esta biblioteca é a w3lib
). A estrutura de compilação das versões atuais destas bibliotecas utiliza do CMake
, mas foi possível compilar elas por fora da estutura de compilação do modelo (ver instruções a seguir) e depois utilizar as bibliotecas geradas na compilação do pré-processamento do modelo BAM. Um detalhe é que foi necessário inserir a compilação da rotina nemsio_gfs.f90
dentro da estrutura de compilação do nameio
, e isso foi feito apenas adionando o nome da rotina dentro do arquivo NCEPLIBS-nemsio-2.5.4/src/CMakeLists.txt
. Fiz um teste com o Chopping_parallel
e funcionou sem problemas.
Nota: olhando em https://github.com/NOAA-EMC/NCEPLIBS, percebi que a rotina nemsio_gfs.f90
está em um repositório separado em https://github.com/NOAA-EMC/NCEPLIBS-nemsiogfs
Para compilar o pré-processamento utilizando as bibliotecas NCEPLIBS-bacio
, NCEPLIBS_w3emc
e NCEPLIBS-nemsio
utilizando o compilador Intel na Egeon:
Nota: atualização das instruções registradas na mensagem original desta issue.
Carregar os módulos para a compilação com o ambiente da Intel:
module purge
module load ohpc
module swap gnu9 intel
module swap openmpi4 impi
module load hwloc
module load phdf5
module load netcdf
module load netcdf-fortran
module swap intel intel/2022.1.0
Carregar o módulo cmake/3.21.3
:
module load cmake/3.21.3
Com as releases das bibliotecas NCEPLIBS-bacio
, NCEPLIBS_w3emc
e NCEPLIBS-nemsio
baixadas, utilizar o cmake
para a compilação, da seguinte forma e ordem:
NCEPLIBS-bacio-2.5.0:
cd NCEPLIBS-bacio-2.5.0
mkdir build
cd build
CC=/opt/intel/oneapi/mpi/2021.4.0/bin/mpiicc cmake -DCMAKE_INSTALL_PREFIX=/mnt/beegfs/carlos.bastarz/NCEPLIBS-bacio-2.5.0/rls ..
make -j2
make install
NCEPLIBS-w3emc-2.9.3:
cd NCEPLIBS-w3emc-2.9.3
mkdir build
cd build
CC=/opt/intel/oneapi/mpi/2021.4.0/bin/mpiicc FC=/opt/intel/oneapi/mpi/2021.4.0/bin/mpif90 cmake -DCMAKE_INSTALL_PREFIX=/mnt/beegfs/carlos.bastarz/NCEPLIBS-w3emc-2.9.3/rls -DCMAKE_PREFIX_PATH="/mnt/beegfs/carlos.bastarz/NCEPLIBS-bacio-2.5.0/rls" ..
make -j2
make install
NCEPLIBS-nemsio-2.5.4:
cd NCEPLIBS-nemsio-2.5.4
mkdir build
cd build
CC=/opt/intel/oneapi/mpi/2021.4.0/bin/mpiicc FC=/opt/intel/oneapi/mpi/2021.4.0/bin/mpif90 cmake -DCMAKE_INSTALL_PREFIX=/mnt/beegfs/carlos.bastarz/NCEPLIBS-nemsio-2.5.4/rls -DCMAKE_PREFIX_PATH="/mnt/beegfs/carlos.bastarz/NCEPLIBS-bacio-2.5.0/rls;/mnt/beegfs/carlos.bastarz/NCEPLIBS-w3emc-2.9.3/rls" ..
make -j2
make intall
Nota: Nos procedimentos de compilação, foram passadas as variáveis FC
e CC
para indicar corretamente os compiladores a serem indicados, caso contrário, mesmo com o módulos do ambiente de compilação Intel carregados, o gfortran
será utilizado; há dois pontos ..
que fazem parte do comando cmake
e eles não podem ser omitidos, pois indicam para o cmake
que o arquivo CMakeLists.txt
utilizado na compilação, está no diretório anterior.
Compilação do pré-processamento:
Considerando que as bibliotecas nemsio
, bacio
e w3emc
(ou w3lib
) já estão compiladas, não foi necessário compilar as versões que vem junto com o modelo. Apesar disso, a w3lib
do modelo foi compilada. Com isso, foi necessário apenas linkar os arquivo *.a
e *.mod
que foram gerados nas etapas anteriores para os locais em que se espera que estes arquivos estejam. Dessa forma, foi feito o seguinte:
Link da biblioteca libnemsio.a
e arquivos de módulos:
cd /mnt/beegfs/carlos.bastarz/oensMB09/pre/sources/nemsio/v2.2.2/src
ln -s /mnt/beegfs/carlos.bastarz/NCEPLIBS-nemsio-2.5.4.mod/rls/lib64/libnemsio.a .
cd /mnt/beegfs/carlos.bastarz/oensMB09/pre/sources/nemsio/v2.2.2/src/incmod
ln -s /mnt/beegfs/carlos.bastarz/NCEPLIBS-nemsio-2.5.4.mod/rls/include/* .
Link das bibliotecas libbacio_8.a
e libbacio_4.a
:
cd /mnt/beegfs/carlos.bastarz/oensMB09/pre/sources/bacio/v2.0.2/src_64bits
ln -s /mnt/beegfs/carlos.bastarz/NCEPLIBS-bacio-2.5.0/rls/lib/libbacio.a .
ln -s libbacio.a libbacio_8.a
cd /mnt/beegfs/carlos.bastarz/oensMB09/pre/sources/bacio/v2.0.2/src_32bits
ln -s /mnt/beegfs/carlos.bastarz/NCEPLIBS-bacio-2.5.0/rls/lib/libbacio.a .
ln -s libbacio.a libbacio_4.a
Ajustes no arquivo /mnt/beegfs/carlos.bastarz/oensMB09/pre/sources/Makefile
:
Para evitar a compilação das bibliotecas bacio
e nemsio
do pré-processamento, foram comentadas as linhas referentes às estas bibliotecas no referido arquivo Makefile
:
47 .DEFAULT:
48
49 # @- (cd .; if [ -f makefiles/Makefile.$@ -a ! -f bacio/v2.0.2/src_32bits/Makefile.$@ ];\
50 # then ln -fs ../../../makefiles/Makefile.$@ bacio/v2.0.2/src_32bits/Makefile.$@; fi)
51 #
52 # @- (cd .; if [ -f makefiles/Makefile.$@ -a ! -f bacio/v2.0.2/src_64bits/Makefile.$@ ];\
53 # then ln -fs ../../../makefiles/Makefile.$@ bacio/v2.0.2/src_64bits/Makefile.$@; fi)
54
55 @- (cd .; if [ -f makefiles/Makefile.$@ -a ! -f w3lib-1.4/Makefile.$@ ];\
56 then ln -fs ../makefiles/Makefile.$@ w3lib-1.4/Makefile.$@; fi)
57
58 # @- (cd .; if [ -f makefiles/Makefile.$@ -a ! -f nemsio/v2.2.2/src/Makefile.$@ ];\
59 # then ln -fs ../../../makefiles/Makefile.$@ nemsio/v2.2.2/src/Makefile.$@; fi)
223 #
224 # builds the binaries
225 #
226
227 ## @- (cd bacio/v2.0.2/src_32bits;$(MAKE) -f Makefile.$@;$(MAKE) -f Makefile.$@)
228 ## @- (cd bacio/v2.0.2/src_64bits;$(MAKE) -f Makefile.$@;$(MAKE) -f Makefile.$@)
229 # @- (rm -rf bacio/v2.0.2/$@; cd bacio/v2.0.2/src_64bits; ./makebacio_cptec.sh $@)
230 # @- (cd bacio/v2.0.2/src_64bits; ln -sf ../$@/libbacio_8.a .)
231 # @- (cd bacio/v2.0.2/src_32bits; ln -sf ../$@/libbacio_4.a .)
232 @- (cd w3lib-1.4;$(MAKE) -f Makefile.$@;$(MAKE) -f Makefile.$@)
233 ## @- (cd nemsio/v2.2.2/src;$(MAKE) -f Makefile.$@;$(MAKE) -f Makefile.$@)
234 # @- (cd nemsio/v2.2.2/src; ./makenemsio_cptec.sh $@; $(MAKE))
402 clean:
403 @echo "$(MAKE)"
404
405 (cd w3lib-1.4;$(MAKE) -f Makefile.common clean)
406 # (cd bacio/v2.0.2/src_32bits/;$(MAKE) -f Makefile.common clean)
407 # (cd bacio/v2.0.2/src_64bits/;$(MAKE) -f Makefile.common clean)
408 # (cd nemsio/v2.2.2/src/;$(MAKE) -f Makefile.common clean)
Finalmente, a compilação do pré-processamento pode ser feita com o comando:
make linux_intel_egeon
Comentando um pouco sobre os últimos pushes:
EnvironmentalVariables
(e.g, USE_SINGULARITY
e USE_INTEL
), de forma que seja possível ajustar via script, como o sistema será executado.Para a compilação com o GNU, tanto no ambiente de compilação do singularity quanto na Egeon, foi necessário fazer alguns ajustes no modelo BAM. Estes ajustes foram necessários porque o compilador Intel aceita algumas construções que o GNU não permite. Alterações no BAM_V1.2.1 para compilar com o GNU9 (da máquina) na Egeon (nenhuma destas modificações é necessária para compilar com o INtel da Egeon ou com um compilador GNU mais antigo, em uso com os containeres testados):
Physics/Convection/DeepConvection/RAS3PHASE/Cu_RAS3PHASE.f90
kind=i8
) para compilar sem a mensagem de erro Error: Arguments of 'iand' have different kind type parameters at (1)
Makefile.common
Physics/Radiation/Clirad/Rad_Clirad.f90
para evitar o erro f951: Fatal Error: './Physics/Radiation/Clirad/coa.data90' is not a directory
Physics/Radiation/CloudOpticalProperty.f90
STOP
e as aspas simples utilizadas para evitar o erro Error: Blank required in STOP statement near (1)
Estas modificações deverão ser integradas à versão BAM_V1.2.1 que está no repositório em https://github.com/GAD-DIMNT-CPTEC/cfbastarz/tree/main/BAM_V1.2.1.
Nesta issue, serão realizados testes com o compilador Intel na Egeon.