From e0fa5e6234a6a446c06eaab8ce3a214e3cbf6657 Mon Sep 17 00:00:00 2001 From: Juan ESCOBAR <juan.escobar@aero.obs-mip.fr> Date: Fri, 26 Aug 2022 17:19:41 +0200 Subject: [PATCH] Juan 26/08/2022:Rules.LXnvhpc2202.mk, new file , and set CPP to use mnh_expand+OPENACC --- src/Rules.LXnvhpc2202.mk | 303 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 303 insertions(+) create mode 100644 src/Rules.LXnvhpc2202.mk diff --git a/src/Rules.LXnvhpc2202.mk b/src/Rules.LXnvhpc2202.mk new file mode 100644 index 000000000..698193af6 --- /dev/null +++ b/src/Rules.LXnvhpc2202.mk @@ -0,0 +1,303 @@ +#MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier +#MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence +#MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +#MNH_LIC for details. version 1. +########################################################## +# # +# Compiler Options # +# # +########################################################## +#OBJDIR_PATH=${WORKDIR} +# +# Processor type +#TP= -tp=sandybridge, haswell, skylake +#all x86 TP= -tp=px +#Pentium4 64-bit: p7-64 +#Nuwa n375: Xeon E5-2680 v2: Ivy Bridge => between Sandy bridge and Haswell => sandybridge +#aeropc45-3: Xeon W-2265: Cascade Lake (version amelioree de Skylake) => skylake +#TP= -tp=sandybridge +#TP= -tp=skylake +#TP= -tp=p7-64 +TP= -tp=px +# +#Version of CUDA +#(8.0 at least if compute capability >= 6.0) +CUDALEVEL=cuda11.4 +# +#Compute capability of GPU +# +#OPT_CPTCAP=cc35,cc50,cc70 +#OPT_CPTCAP=cc35,cc50,cc60,cc70 +OPT_CPTCAP=cc70 +#Aeropc45: cc50 +#Nuwa: cc35 +#Ouessant Firestone K80: cc35 +#Ouessant Minsky P100: cc60 +# +#Compiler info level +#OPT_INFO = -Minfo=ftn,accel,inline,ipa,loop,lre,mp,opt,par,unified,vect,ccff +OPT_INFO = -Minfo=accel +# +#Compiler profiling options +#OPT_PROF = -Mprof=ccff +# +#PW: if -Ktrap=fp: nvprof/pgprof do not work OPT_BASE = -Ktrap=fp ... +#PW: -g: big impact on performance +OPT_BASE = $(TP) -Mbackslash -Mextend -Kieee -Mnofma -Mallocatable=95 +# +OPT_PERF0 = -O0 +OPT_PERF1 = -O1 +OPT_PERF2 = -O2 +# +OPT_MANAGED = -Mframe -Mnostack_arrays -acc=host,gpu -gpu=nofma,$(OPT_CPTCAP),$(CUDALEVEL),managed $(OPT_INFO) $(OPT_PROF) +OPT_MULTICORE = -acc=multicore $(OPT_INFO) $(OPT_PROF) +OPT_NOOPENACC = -acc=host $(OPT_INFO) $(OPT_PROF) +OPT_OPENACC = -Mframe -Mnostack_arrays -acc=host,gpu -gpu=nofma,$(OPT_CPTCAP),$(CUDALEVEL) $(OPT_INFO) $(OPT_PROF) +# +OPT_CHECK = -C #-Mchkfpstk -Mchkptr +OPT_I8 = -i8 +OPT_R8 = -r8 +# +ifeq "$(VER_USER)" "ZSOLVER" +CPPFLAGS += -DCARTESIANGEOMETRY -DPIECEWISELINEAR +PROG_LIST += MG_MAIN MG_MAIN_MNH_ALL +endif +# +IGNORE_OBJS += pgprof.o +# +# Real/integer 4/8 option +# +MNH_REAL ?=8 +MNH_INT ?=4 +# +ifneq "$(MNH_REAL)" "4" +OPT_BASE += $(OPT_R8) +endif +# +OPT_BASE_I4 := $(OPT_BASE) +ifeq "$(MNH_INT)" "8" +OPT_BASE += $(OPT_I8) +LFI_INT ?=8 +else +LFI_INT ?=4 +endif +# +# +OPT = $(OPT_BASE) $(OPT_PERF2) +OPT0 = $(OPT_BASE) $(OPT_PERF0) +OPT_NOCB = $(OPT_BASE) $(OPT_PERF2) +# +ifeq "$(OPTLEVEL)" "DEBUG" +OPT = -g $(OPT_BASE) $(OPT_PERF0) $(OPT_CHECK) +OPT0 = -g $(OPT_BASE) $(OPT_PERF0) $(OPT_CHECK) +OPT_NOCB = -g $(OPT_BASE) $(OPT_PERF0) +endif +# +ifeq "$(OPTLEVEL)" "MANAGED" +CPPFLAGS += -DMNH_OPENACC -DMNH_GPUDIRECT +OPT = -g $(OPT_BASE) $(OPT_MANAGED) $(OPT_PERF2) +OPT0 = -g $(OPT_BASE) $(OPT_MANAGED) $(OPT_PERF0) +OPT_NOCB = -g $(OPT_BASE) $(OPT_MANAGED) $(OPT_PERF2) +CXXFLAGS = -g -acc -Kieee -Mnofma $(OPT_MANAGED) +OBJS_REPROD= spll_mode_sum_ll.o +$(OBJS_REPROD) : OPT = $(OPT_BASE) $(OPT_MANAGED) $(OPT_PERF2) -Mvect=nosimd -Minfo=all -g +endif +# +ifeq "$(OPTLEVEL)" "MANAGEDO2" +CPPFLAGS += -DMNH_OPENACC -DMNH_GPUDIRECT +OPT = $(OPT_BASE) $(OPT_MANAGED) $(OPT_PERF2) +OPT0 = $(OPT_BASE) $(OPT_MANAGED) $(OPT_PERF0) +OPT_NOCB = $(OPT_BASE) $(OPT_MANAGED) $(OPT_PERF2) +CXXFLAGS = -acc -Kieee -Mnofma $(OPT_MANAGED) -gpu=nofma +OBJS_REPROD= spll_mode_sum_ll.o +$(OBJS_REPROD) : OPT = $(OPT_BASE) $(OPT_MANAGED) $(OPT_PERF2) -Mvect=nosimd -Minfo=all +OBJS_OPENACC = spll_modd_halo_d.o +$(OBJS_OPENACC) : OPT = $(OPT_BASE) $(OPT_OPENACC) $(OPT_PERF2) +OBJS_O1_MANAGED= spll_ice4_tendencies.o spll_turb_ver_thermo_flux.o spll_turb_hor_dyn_corr.o spll_mode_turb.o +$(OBJS_O1_MANAGED) : OPT = $(OPT_BASE) $(OPT_MANAGED) $(OPT_PERF1) +endif +# +ifeq "$(OPTLEVEL)" "MULTICORE" +CPPFLAGS += -DMNH_OPENACC +OPT = $(OPT_BASE) $(OPT_MULTICORE) +OPT0 = $(OPT_BASE) $(OPT_MULTICORE) $(OPT_PERF0) +OPT_NOCB = $(OPT_BASE) $(OPT_MULTICORE) +CXXFLAGS = -acc -Kieee -Mnofma $(OPT_MULTICORE) +endif +# +ifeq "$(OPTLEVEL)" "OPENACC" +CPPFLAGS += -DMNH_OPENACC -DMNH_GPUDIRECT +# -imacros MNH_OPENACC_SHUMAN_MACRO.CPP +OPT = -g $(OPT_BASE) $(OPT_OPENACC) $(OPT_PERF0) +OPT0 = -g $(OPT_BASE) $(OPT_OPENACC) $(OPT_PERF0) +OPT_NOCB = -g $(OPT_BASE) $(OPT_OPENACC) $(OPT_PERF0) +CXXFLAGS = -g -acc -Kieee -Mnofma $(OPT_OPENACC) +OBJS_REPROD= spll_mode_sum_ll.o +$(OBJS_REPROD) : OPT = $(OPT_BASE) $(OPT_OPENACC) $(OPT_PERF2) -Mvect=nosimd -Minfo=all -g +endif +ifeq "$(OPTLEVEL)" "OPENACCO2" +CPPFLAGS += -DMNH_OPENACC -DMNH_GPUDIRECT +OPT = $(OPT_BASE) $(OPT_OPENACC) $(OPT_PERF2) +OPT0 = $(OPT_BASE) $(OPT_OPENACC) $(OPT_PERF0) +OPT_NOCB = $(OPT_BASE) $(OPT_OPENACC) $(OPT_PERF2) +CXXFLAGS = -acc -Kieee -Mnofma $(OPT_OPENACC) +OBJS_REPROD= spll_mode_sum_ll.o +$(OBJS_REPROD) : OPT = $(OPT_BASE) $(OPT_OPENACC) $(OPT_PERF2) -Mvect=nosimd -Minfo=all +OBJS_O1_OPENACC= spll_ice4_tendencies.o spll_turb_ver_thermo_flux.o spll_mode_device.o spll_mppdb_check3d_real_mg.o \ + spll_mppdb_check0d_real_mg.o spll_mode_turb.o +$(OBJS_O1_OPENACC) : OPT = $(OPT_BASE) $(OPT_OPENACC) $(OPT_PERF1) +endif +# +ifeq "$(OPTLEVEL)" "OPENACCDEFONLY" +CPPFLAGS += -DMNH_OPENACC -D_FAKEOPENACC +OPT = -g $(OPT_BASE) $(OPT_NOOPENACC) $(OPT_PERF0) +OPT0 = -g $(OPT_BASE) $(OPT_NOOPENACC) $(OPT_PERF0) +OPT_NOCB = -g $(OPT_BASE) $(OPT_NOOPENACC) $(OPT_PERF0) +CXXFLAGS = -Kieee -Mnofma $(OPT_NOOPENACC) +OBJS_REPROD= spll_mode_sum_ll.o +$(OBJS_REPROD) : OPT = -g $(OPT_BASE) $(OPT_NOOPENACC) $(OPT_PERF2) -Mvect=nosimd -Minfo=all +endif +# +ifeq "$(OPTLEVEL)" "NOOPENACC" +#CPPFLAGS += -D_OPT_LINEARIZED_LOOPS +OPT = $(OPT_BASE) $(OPT_NOOPENACC) $(OPT_PERF2) +OPT0 = $(OPT_BASE) $(OPT_NOOPENACC) $(OPT_PERF0) +OPT_NOCB = $(OPT_BASE) $(OPT_NOOPENACC) $(OPT_PERF2) +CXXFLAGS = -Kieee -Mnofma $(OPT_NOOPENACC) +OBJS_REPROD= spll_mode_sum_ll.o +$(OBJS_REPROD) : OPT = $(OPT_BASE) $(OPT_NOOPENACC) $(OPT_PERF2) -Mvect=nosimd -Minfo=all -g +endif +# +CC = pgcc +CXXFLAGS += $(TP) +CFLAGS += $(TP) +FC = pgf90 +ifeq "$(VER_MPI)" "MPIAUTO" +F90 = mpif90 +CC = mpicc +CXX = mpicxx +else +F90 = pgf90 +CC = pgcc +CXX = pgcxx +endif +# +F77FLAGS = $(OPT) +F77 = $(F90) +F90FLAGS = $(OPT) +FX90 = $(F90) +FX90FLAGS = $(OPT) +# +LDFLAGS = -Wl,-warn-once $(OPT) +# +# preprocessing flags +# +#CPP = cpp -P -traditional -Wcomment -D_OPENACC=201711 -imacros MNH_OPENACC_NV_CR.CPP +CPP = mnh_expand -D_OPENACC=201711 -imacros MNH_OPENACC_NV_CR.CPP +# +CPPFLAGS_C = -DLITTLE_endian +CPPFLAGS_SURFEX = +CPPFLAGS_SURCOUCHE += -DMNH_COMPILER_NVHPC +CPPFLAGS_RAD = +CPPFLAGS_NEWLFI = -DSWAPIO -DLINUX -DLFI_INT=${LFI_INT} +CPPFLAGS_MNH = -DMNH -DMNH_PGI -DSFX_MNH +CPPFLAGS_MNH += -Uvector -Upixel +CPPFLAGS_MNH += -DMNH_EXPAND -DMNH_EXPAND_OPENACC +#CPPFLAGS_MNH += -imacros MNH_OPENACC_NV_CR.CPP +# +# BITREP flags +# +#if MNH_BITREP exists => compile with the BITREP library +MNH_BITREP = YES +ifeq "$(MNH_BITREP)" "YES" +CPPFLAGS_MNH += -DMNH_BITREP +endif +# +# LIBTOOLS flags +# +#if MNH_TOOLS exists => compile the tools +MNH_TOOLS = yes +# +## IOLFI flag +# +#if MNH_IOLFI exists => compile the NEWLFI library (for LFI files) +MNH_IOLFI=yes +# +## COMPRESS flag +# +#if MNH_COMPRESS exists => compile the COMPRESS library (for LFI files) +MNH_COMPRESS=yes +# +## S4PY flag +# +#if MNH_S4PY exists => compile the libs4py library (for epygram) +#MNH_S4PY=no +# +## ecCodes or grib_api selection +#MNH_GRIBAPI: if set to no: use ecCodes +# if set to yes: use grib_api (deprecated library) +# +MNH_GRIBAPI=no +# +# cdf / hdf +# +CDF_CONF="CPP=cpp" +HDF_CONF="CPP=cpp" +# +########################################################## +# # +# Source of MESONH PACKAGE Distribution # +# # +########################################################## +#DIR_SURFEX += ARCH_SRC/surfex.MNH-462 + +OBJS_NOCB += spll_isba.o +# +include Makefile.MESONH.mk +# +########################################################## +# # +# extra VPATH, Compilation flag modification # +# systeme module , etc ... # +# external precompiled module librairie # +# etc ... # +# # +########################################################## +OBJS_O1 += spll_modd_isba_n.o spll_mode_construct_ll.o \ + spll_init_surf_atm_n.o spll_mode_scatter_ll.o spll_convert_patch_teb.o \ + spll_define_mask_n.o spll_del1dfield_ll.o spll_mode_fm.o spll_mode_gather_ll.o \ + spll_convect_updraft.o spll_convect_updraft_shal.o \ + spll_mode_dustopt.o spll_mode_saltopt.o \ + spll_aeroopt_get.o spll_write_lfifm1_for_diag_supp.o spll_write_lfifm1_for_diag.o spll_write_lfifm_n.o \ + +#spll_unpack_1d_2d_from2d.o +#spll_pack_isba_patch_n.o +#spll_phys_param_n.o +$(OBJS_O1) : OPT = $(OPT_BASE) $(OPT_PERF1) + +OBJS_O0= spll_mode_mppdb.o \ + spll_fft55.o spll_fft.o spll_flat_invz.o \ + spll_mode_repro_sum.o \ + spll_modd_les_n.o \ + spll_default_desfm_n.o +#default_desfmn: workaround a nvhpc 21.9 bug (run stall in default_desfmn) + + +# spll_fast_terms.o +# spll_modd_ch_solver_n.o \ +# spll_modd_dummy_gr_field_n.o spll_modd_dyn_n.o +# spll_mode_sum_ll.o +$(OBJS_O0) : OPT = -g $(OPT_BASE) $(OPT_PERF0) + +OBJS_O2= spll_mode_device.o +$(OBJS_O2) : OPT = $(OPT_BASE) $(OPT_OPENACC) $(OPT_PERF2) + +ifneq "$(findstring 8,$(LFI_INT))" "" +OBJS_I8=spll_NEWLFI_ALL.o +$(OBJS_I8) : OPT = $(OPT_BASE) $(OPT_PERF2) $(OPT_I8) +endif + +ifeq "$(MNH_INT)" "8" +OBJS_I4=spll_modd_netcdf.o +$(OBJS_I4) : OPT = $(OPT_BASE_I4) +endif -- GitLab