Tabla de Contenidos
INSTALACIÓN DE FLASH
EN COMPUTADORA PERSONAL
1. Registrarse en la Universidad de Chicago: FLASH
2. Luego, se enviará por mail la aceptación y se podrá bajar el código: FLASH
3. Descomprimir el tar.gz bajado en el lugar donde se va a querer trabajar.
4. Instalar fortran, c, mpif90. Para éste último, instalar mpich.
5. Flash necesita la librería hdf5 1.8.12. Instalación como root: bajar, descomprimir, y hacer
- ./configure --prefix=/usr/local/hdf5
- make
- make install
EN LOS CLUSTERS
1. Ya está instalado. Sólo levantar los módulos que se detallan en la sección “Uso de Flash”
USO DE FLASH
Manual de usuario: manual de FLASH
1. El Makefile.h que usa para compilar el programa está en: /lugardeinstalacion/FLASHX.X/sites/Prototypes/Linux Allí hay varios ejemplos de makefiles. Para nuestro ejemplo utilizaremos un makefile que llamaremos Makefile.h.escogido. Iremos a la carpeta “site”.
- cd /lugardeinstalacion/FLASHX.X/sites/
Ejecutar el siguiente comando.
- mkdir $HOSTNAME
Eso creará una carpeta que se llama como el nombre de la maquina en /sites. Copiar en esa carpeta el Makefile.h elegido. Renombrar este archivo a Makefile.h.
- cd /lugardeinstalacion/FLASHX.X/sites/Prototypes/Linux/
- cp Makefile.h.elegido /lugardeinstalacion/FLASHX.X/sites/Makefile.h
2. Módulos a cargar en las diferentes máquinas:
clemente
- module load gcc
- module load openmpi
- module load hypre
- module load hdf5
- module load flash
- Nombre del archivo: Makefile.h
- Servidor: clemente
- Makefile.h
- #FLASH makefile definitions for x86-64 Linux (GNU compilers)
- #----------------------------------------------------------------------------
- # Set the HDF5/MPI library paths -- these need to be updated for your system
- #----------------------------------------------------------------------------
- # sites/clemente/Makefile.h
- MPI_PATH = /opt/spack/0.16.2/opt/spack/linux-centos7-broadwell/gcc-10.2.0/openmpi-4.0.5-jdedu5ob5yuqtaujmqw7l3fyzfaatzqm/
- HDF4_PATH =
- HDF5_PATH = /opt/spack/0.16.2/opt/spack/linux-centos7-broadwell/gcc-10.2.0/hdf5-1.10.7-6v6h3jwmez6mhhfg5vrhp2odezq7kdat/
- HYPRE_PATH = /opt/spack/0.16.2/opt/spack/linux-centos7-broadwell/gcc-10.2.0/hypre-2.20.0-izz4brayoocfvlz2u3z76avmrlvls2gi/
- ZLIB_PATH = /opt/spack/0.16.2/opt/spack/linux-centos7-broadwell/gcc-10.2.0/zlib-1.2.11-nk6k5unszfepso6b4zvivtimoeped7if/
- PAPI_PATH =
- PAPI_FLAGS =
- NCMPI_PATH = /usr/local/netcdf
- MPE_PATH =
- #----------------------------------------------------------------------------
- # Compiler and linker commands
- #
- # Use the MPICH wrappers around the compilers -- these will automatically
- # load the proper libraries and include files. Version of MPICH prior
- # to 1.2.2 (?) do not recognize .F90 as a valid Fortran file extension.
- # You need to edit mpif90 and add .F90 to the test of filename extensions,
- # or upgrade your MPICH.
- #----------------------------------------------------------------------------
- FCOMP = ${MPI_PATH}/bin/mpif90
- CCOMP = ${MPI_PATH}/bin/mpicc
- CPPCOMP = ${MPI_PATH}/bin/mpic++
- LINK = ${MPI_PATH}/bin/mpif90
- # pre-processor flag
- PP = -D
- #----------------------------------------------------------------------------
- # Compilation flags
- #
- # Three sets of compilation/linking flags are defined: one for optimized
- # code, one for testing, and one for debugging. The default is to use the
- # _OPT version. Specifying -debug to setup will pick the _DEBUG version,
- # these should enable bounds checking. Specifying _TEST is used for
- # flash_test, and is set for quick code generation, and (sometimes)
- # profiling. The Makefile generated by setup will assign the generic token
- # (ex. FFLAGS) to the proper set of flags (ex. FFLAGS_OPT).
- #----------------------------------------------------------------------------
- OPENMP =
- #-fopenmp
- # *************************cambio ********************************
- # PATRON
- #FFLAGS_OPT = -c -O2 -fdefault-real-8 -fdefault-double-8 \
- #-Wuninitialized
- # OPTIMIZADO
- FFLAGS_OPT = -c -O3 -march=broadwell -fdefault-real-8 -fdefault-double-8 \
- -Wuninitialized
- #I explictly add -O0 because I found that compiling source files without
- #an optimization flag generates the same object code as compiling source
- #files with -O2. The -O0 is required so that gdb no longer shows
- #"<value optimized out>" for certain function arguments.
- FFLAGS_DEBUG = -ggdb -c -O0 -fdefault-real-8 -fdefault-double-8 \
- -pedantic -Wall -Waliasing \
- -Wsurprising -Wconversion -Wunderflow \
- -ffpe-trap=invalid,zero,overflow -fbounds-check \
- -fimplicit-none -fstack-protector-all
- FFLAGS_TEST = -ggdb -c -O0 -fdefault-real-8 -fdefault-double-8
- FFLAGS_HYPRE = -I${HYPRE_PATH}/include
- F90FLAGS = -w -fallow-argument-mismatch
- #The macro _FORTIFY_SOURCE adds some lightweight checks for buffer
- #overflows at both compile time and run time (only active at -O1 or higher)
- #http://gcc.gnu.org/ml/gcc-patches/2004-09/msg02055.html
- # *****************************cambios***********************************
- # FLAGS PATRON
- #CFLAGS_OPT = -ggdb -c -O2 -Wuninitialized -D_FORTIFY_SOURCE=2
- # FLAGS OPTIMIZADO
- CFLAGS_OPT = -c -O3 -march=broadwell -Wuninitialized -D_FORTIFY_SOURCE=2
- CFLAGS_DEBUG = -ggdb -c -O0 -Wno-div-by-zero -Wundef \
- -Wconversion -Wstrict-prototypes -Wunreachable-code \
- -pedantic -Wall -Winit-self -ftree-vrp -Wfloat-equal \
- -Wunsafe-loop-optimizations -Wpadded -fstack-protector-all
- CFLAGS_TEST = -ggdb -O0 -c
- # if we are using HDF5, we need to specify the path to the include files
- CFLAGS_HDF5 = -I${HDF5_PATH}/include -DH5_USE_16_API
- CFLAGS_NCMPI = -I${NCMPI_PATH}/include
- #----------------------------------------------------------------------------
- # Linker flags
- #
- # There is a seperate version of the linker flags for each of the _OPT,
- # _DEBUG, and _TEST cases.
- #----------------------------------------------------------------------------
- LFLAGS_OPT = -o
- LFLAGS_DEBUG = -ggdb -O0 -o
- LFLAGS_TEST = -ggdb -O0 -o
- #----------------------------------------------------------------------------
- # Library specific linking
- #
- # If a FLASH module has a 'LIBRARY xxx' line in its Config file, we need to
- # create a macro in this Makefile.h for LIB_xxx, which will be added to the
- # link line when FLASH is built. This allows us to switch between different
- # (incompatible) libraries. We also create a _OPT, _DEBUG, and _TEST
- # library macro to add any performance-minded libraries (like fast math),
- # depending on how FLASH was setup.
- #----------------------------------------------------------------------------
- LIB_OPT =
- LIB_DEBUG =
- LIB_TEST =
- LIB_HDF4 =
- LIB_HDF5 = -L ${HDF5_PATH}/lib -lhdf5 -lz
- LIB_PAPI =
- LIB_MATH =
- LIB_MPI =
- LIB_NCMPI = -L ${NCMPI_PATH}/lib -lpnetcdf
- LIB_MPE =
- LIB_HYPRE = -L${HYPRE_PATH}/lib -lHYPRE
- # Uncomment the following line to use electic fence memory debugger.
- # export EF_ALLOW_MALLOC_0=1
- #CONFIG_LIB = -L/usr/lib64 -lefence
- #----------------------------------------------------------------------------
- # Additional machine-dependent object files
- #
- # Add any machine specific files here -- they will be compiled and linked
- # when FLASH is built.
- #----------------------------------------------------------------------------
- MACHOBJ =
- #----------------------------------------------------------------------------
- # Additional commands
- #----------------------------------------------------------------------------
- MV = mv -f
- AR = ar -r
- RM = rm -f
- CD = cd
- RL = ranlib
- ECHO = echo
- #----------------------------------------------------------------------------
- # Fake existence of iso_c_bindings module to prevent unnecessary recompilations.
- #----------------------------------------------------------------------------
- ifeq ($(FLASHBINARY),true)
- iso_c_binding.mod :
- touch $@
- endif
mulatona (mulatona.ccad.unc.edu.ar)
- module load gcc/7
- module load flash/4.4
mendieta (mendieta.ccad.unc.edu.ar)
- module load flash/4.5
3. Cómo compilar el programa: En /lugardeinstalacion/FLASHX.X/./setup magnetoHD/proyecto -auto -parfile=flash.par +usm threadBlockList=True -objdir=object -site=clemente -2d -maxblocks=5000 -nxb=20 -nyb=10
- parfile: archivo de parámetros
- +usm: se activa el Unsplit Staggered Method. Este metodo evalua los campos en las caras, para hacer una correcta limpieza de los monopolos magnéticos.
- threadBlockList:
- -objdir: directorio donde se crearán los objetos para compilar
- -site: nombre de la máquina donde se correrá. Si no se pone nada, por default es la máquina donde estamos
- -2d: corrida bidimensional
- maxblocks: número máximo de bloques permitidos
- nxb, nyb: número de celdas por bloque.
Luego compilar haciendo:
- cd /lugardeinstalacion/FLASHX.X/object/
- make -j 16
4. Cómo correr el programa
a) Máquinas con trabajos en cola → clemente, mulatona (uso exclusivo del IATE) y mendieta (cluster UNC) Para correr el programa, usar los diferentes script según la maquina . Se deben copiar los submit_job_maquina.sh en las carpetas donde se crean los objetos de la compilación. Luego correrlos con: sbatch submit_job_maquina.sh
Tutorial de Slurm
b) Para correr en las máquinas sin trabajos en cola:
- cd /lugardeinstalacion/FLASHX.X/object/
- mpirun -np 8 ./flash4