FAQ

From KratosWiki
Jump to: navigation, search

Contents

Instalación

¿Qué utilidades y paquetes se necesitan para construir el runtime de Kratos?

Si no has leído la parte de cómo instalar Kratos, a continuación se muestran los pasos a seguir en un gráfico que lo resume:

Install graph.png

Los óvalos amarillos indican el orden de instalación y las flechas púrpuras indican las dependencias. Tal y como indica el gráfico, la instalación es diferente si se pretende usar MPI de la instalación que se haría si no se quisiese usar.

Para más información, consulta la Wiki de Kratos: Install

Igualmente, a continuación, te muestro las herramientas que necesita Kratos ordenadas por tipo (compiladores, intérpretes y librerías):

Tipo Nombre Versión en Mare Nostrum Versión en Intel 7920
swig - -
Compiladores gcc 4.4.0 4.4.3
bjam 3.1 -
cmake 2.7 -
Intérpretes Python 2.5 -
csh - -
metis - -
boost 1.38.0 1.43
SuperLU_DIST 2.3 -
Librerías Python Numpy 1.5.0 -
Trilinos 10 10.2
MPI mpich 1.2 -

Herramientas

¿Cómo se usa bjam?

bjam (diminutivo de boost jam) es un compilador para la librería boost que usa Kratos que usa y cuya guía encontrarás en la siguiente dirección: usage of boost

Normalmente, usarás la orden bjam –j2 threading=multi para compilar Kratos desde el directorio donde esté el archivo Jamroot (para entendernos, es el Makefile de bjam). Las opciones más usuales de bjam son:

  • -jN, donde N es el número de procesadores que se usarán para compilar Kratos.
  • threading=multi, con lo que se indica que estamos compilando con paralelismo.
  • -a, con lo cual se compila todo Kratos desde el principio.
  • xlc/intel, con lo cual se indica cuál de los compiladores se usarán (el compilador por defecto es el gcc).

¿Qué es Metis?

Metis es una herramienta que Kratos usa para poder paralelizar de manera óptima a la hora de usar MPI. En particular, lo más interesante, es que facilita enormemente la partición y la distribución de carga a la hora de repartir los nodos que usa Kratos de cara a cálculos en paralelo.

Por ejemplo, imaginemos que tenemos el siguiente modelo sobre el cuál queremos hacer una serie de cálculos:

FAQ 0.png

Metis ayuda a dividir los nodos del modelo, de forma que cada procesador reciba un número aproximado de ellos de tal forma que se aproxime para cada uno de ellos el tiempo de cálculo que dedican y, además, que el perímetro de partición contenga el mínimo número posible de nodos.

¿Qué papel tienen Trilinos y Python?

Trilinos es una librería open source que se usa para desarrollar aplicaciones científicas, como sería el caso de Kratos.

En cambio, Python se usa para cargar y llamar a las diferentes operaciones de las librerías de Kratos que nos interesen con lo cual podemos usar Kratos sin tener que compilar. De hecho, Python se comunica con C++ gracias a la librería Boost.Python, la cual funciona de manera muy parecida al compilador swig, del cual tienes un ejemplo en el siguiente enlace: A SWIG example.

¿Cómo se configura Trilinos?

Trilinos es una librería que se compila usando el compilador cmake. Se configura a la hora de compilarlo, indicando qué se quiere activar y qué no y dónde están las diferentes librerías que necesita Trilinos.

El archivo, llamado do-configure, que usa Trilinos tiene normalmente la siguiente forma (si nos fijamos, en la cuarta línea se hace la llamada a cmake):

TRILINOS_HOME="/gpfs/projects/bsc15/kratos/tmp/trilinos-10.2.1-Source"
EXTRA_LINK_FLAGS="-lgfortran"
EXTRA_ARGS=$@
cmake \
-D CMAKE_INSTALL_PREFIX:PATH=/gpfs/projects/bsc15/kratos/trilinos-10.2.1 \
-D CMAKE_BUILD_TYPE:STRING=RELEASE \
-D TPL_ENABLE_MPI:BOOL=ON \
-D BLAS_LIBRARY_DIRS:PATH=/gpfs/projects/bsc15/kratos/install/lib \
-D BLAS_LIBRARY_NAMES:STRING="blas_LINUX" \
-D LAPACK_LIBRARY_DIRS:PATH=/gpfs/projects/bsc15/kratos/install/lib \
-D LAPACK_LIBRARY_NAMES:STRING="lapack_LINUX" \
-D MPI_BASE_DIR:PATH=/usr/bin \
-D MPI_INCLUDE_DIRS:PATH=/opt/osshpc/mpich-mx/32/include/ \
-D BUILD_SHARED_LIBS:BOOL=ON \
-D TPL_ENABLE_SuperLUDist:BOOL=ON \
-D SuperLUDist_INCLUDE_DIRS:PATH="/gpfs/projects/bsc15/kratos/SuperLU_DIST_2.3/SRC" \
-D SuperLUDist_LIBRARY_DIRS:PATH="/gpfs/projects/bsc15/kratos/SuperLU_DIST_2.3/lib/" \
-D SuperLUDist_LIBRARY_NAMES:STRING="superlu_dist_2.3" \
-D TPL_ENABLE_METIS:BOOL=ON \
-D TPL_METIS_INCLUDE_DIRS:PATH=/gpfs/projects/bsc15/kratos/ParMetis-3.1.1/METISLib \
-D METIS_LIBRARY_DIRS:PATH=/gpfs/projects/bsc15/kratos/install/lib \
-D METIS_LIBRARY_NAMES:STRING="metis" \
-D TPL_ENABLE_ParMETIS:BOOL=ON \
-D TPL_ParMETIS_INCLUDE_DIRS:PATH=/gpfs/projects/bsc15/kratos/ParMetis-3.1.1/ParMETISLib \
-D ParMETIS_LIBRARY_DIRS:PATH=/gpfs/projects/bsc15/kratos/install/lib \
-D ParMETIS_LIBRARY_NAMES:STRING="parmetis" \
-D Trilinos_EXTRA_LINK_FLAGS:STRING="$EXTRA_LINK_FLAGS" \
-D Trilinos_ENABLE_Amesos:BOOL=ON \
-D Amesos_ENABLE_SuperLUDist:BOOL=ON \
-D Trilinos_ENABLE_Anasazi:BOOL=ON \
-D Trilinos_ENABLE_AztecOO:BOOL=ON \
-D AztecOO_ENABLE_Teuchos:BOOL=ON \
-D Trilinos_ENABLE_Didasko:BOOL=ON \
-D Trilinos_ENABLE_Epetra:BOOL=ON \
-D Trilinos_ENABLE_EpetraExt:BOOL=ON \
-D Trilinos_ENABLE_Galeri:BOOL=ON \
-D Trilinos_ENABLE_Ifpack:BOOL=ON \
-D Trilinos_ENABLE_ML:BOOL=ON \
-D Trilinos_ENABLE_PyTrilinos:BOOL=ON \
-D Trilinos_ENABLE_Teuchos:BOOL=ON \
-D Trilinos_ENABLE_Triutils:BOOL=ON \
-D Trilinos_ENABLE_TESTS:BOOL=ON \
-D DART_TESTING_TIMEOUT:STRING=600 \
-D CMAKE_Fortran_FLAGS:STRING="-O5 -funroll-all-loops -fPIC" \
-D CMAKE_C_FLAGS:STRING="-O3 -fPIC -funroll-loops" \
-D CMAKE_CXX_FLAGS:STRING="-O3 -fPIC -funroll-loops -ffast-math" \
$EXTRA_ARGS \
${TRILINOS_HOME}

Si faltara alguna cosa o hubiese algún error a la hora de compilar Trilinos, en la mayoría de los casos se indica cómo solucionarlo mediante un mensaje. Para más información, consulta la siguiente página: FAQ

Diseño y configuración

¿Cómo está estructurado Kratos?

blablabla

¿Cómo se configura Kratos a través del Jamroot?

using gcc : : : <cxxflags>"-m64 -O3" <cflags>"-m64 -O3" <linkflags>"-m64 -lgfortran" ;
using intel : : : <cxxflags>"-fPIC -ansi -funroll-loops -cxxlib-gcc -openmp -wd654 -wd10010" <cflags>"-fPIC -funroll-loops -cxxlib-gcc -openmp -wd654 -wd10010" ;
using sun : : : <cflags>" -w  -DBOOST_UBLAS_UNSUPPORTED_COMPILER=0"  <cxxflags>" -w  -DBOOST_UBLAS_UNSUPPORTED_COMPILER=0" <linkflags>" -w -DBOOST_UBLAS_UNSUPPORTED_COMPILER=0" ;
using python ; 

# uncomment and specify compiler to use MPI
using mpi : /opt/osshpc/mpich-mx/64/bin/mpiCC ;

#################################################################################
## defining "common includes" and external libraries
path-constant TOP : . ;
#path to the boost library -- FUNDAMENTAL --- ATTENTION: it is IMPORTANT to set to the directory FROM WHICH the boost was installed
path-constant BOOST_LIB_DIR :  /gpfs/projects/bsc15/kratos/install64/lib/ ; 
path-constant BOOST_INCLUDE_DIR :  /gpfs/projects/bsc15/kratos/install64/include/boost-1_38/ ; 
##blas/lapack lib dir
path-constant BLAS_LIB_DIR : /gpfs/projects/bsc15/kratos/install64/lib/ ;
path-constant LAPACK_LIB_DIR : /gpfs/projects/bsc15/kratos/install64/lib/ ;
# Path to CUDA - required to compile and use GPU solvers - strictly optional
##path-constant CUDA_LIB_DIR :  /usr/local/cuda/lib ;
##path-constant CUDA_INCLUDE_DIR :  /usr/local/cuda/include ;
##path-constant LAPACKPP_LIB_DIR :  /usr/local/lapackpp/lib ; #directory in which we installed the LAPACK++ lib
##path-constant LAPACKPP_INCLUDE_DIR :  /usr/local/lapackpp/include/lapackpp ; #directory in which we installed the LAPACK++ lib
##decomment and modify for parallel
path-constant MPI_LIB_DIR : /opt/osshpc/mpich-mx/64/lib/ ;
path-constant MPI_INCLUDE_DIR : /opt/osshpc/mpich-mx/64/include/ ;
path-constant TRILINOS_LIB_DIR : /gpfs/projects/bsc15/kratos/trilinos-10.2.1-numpy/lib/ ;
path-constant TRILINOS_INCLUDE_DIR : /gpfs/projects/bsc15/kratos/trilinos-10.2.1-numpy/include/ ;
path-constant METIS_LIB_DIR : /gpfs/projects/bsc15/kratos/install64/lib/ ;
path-constant METIS_INCLUDE_DIR : /gpfs/projects/bsc15/kratos/ParMetis-3.1.1/ParMETISLib/ ;
##path to the mkl library (STRICTLY OPTIONAL)
##path-constant MKL_INCLUDE_DIR : /opt/intel/mkl/10.0.1.014/include/ ;
##path-constant MKL_LIB_DIR : /opt/intel/mkl/10.0.1.014/lib/ ;

project KratosProject 
	:
	#############################################################################
	requirements 	<include>$(BOOST_INCLUDE_DIR)
			<include>/gpfs/projects/bsc15/kratos/install64/include/python2.5/
			<include>$(TOP)/kratos
			<include>$(TOP)/external_libraries
	#############################################################################
		     ##omptl - necessary for parallelism
		     <include>$(TOP)/external_libraries/omptl
			
			#basic configurations
		     <threading>multi
		     <define>NDEBUG

			 #compiler settings - can be CUSTOMIZED by the user
			 #WARNING -fPIC is NEEDED to compile on 64 bit systems - it has to be specified here in order to include it in the 
			 #kratos "static" library
			 <warnings>on

			 #gcc settings
			<toolset>gcc:<cflags>"-fPIC -funroll-loops" ##settings for external libraries
 			<toolset>gcc:<cxxflags>"-fPIC -ansi -funroll-loops -ffast-math -Wno-unknown-pragmas" 

			#msvc settings
			<toolset>msvc:<linkflags>"/NODEFAULTLIB:libcmt"
			<toolset>msvc:<cxxflags>"/D_SCL_SECURE_NO_DEPRECATE  /wd4335"

			#intel settings
		##	<toolset>intel:<cxxflags>"-fPIC -ansi -funroll-loops -ffast-math" 
	: 
		     default-build release
	;

#################################################################################
## defining "common external libraries" 
## the user should adapt this depending on the installations directories on his system
#############################################################################
lib pythonlib : : <name>python2.5 <search>"/gpfs/projects/bsc15/kratos/install64/lib/" ; 
lib boost_mpi_lib    : : <variant>release <name>boost_mpi-gcc44-mt    <search>$(BOOST_LIB_DIR) ;
lib boost_python_lib : : <variant>debug <name>boost_python-gcc44-mt-d <search>$(BOOST_LIB_DIR) ;    
lib boost_python_lib : : <variant>release <name>boost_python-gcc44-mt <search>$(BOOST_LIB_DIR) ;    
#############################################################################
#blas and lapack libraries
lib blaslibrary : : <name>blas <search>$(BLAS_LIB_DIR) <link>shared ;
lib lapacklibrary : : <name>lapack <search>$(LAPACK_LIB_DIR) <link>shared ;
#intel omp library...
lib intelomp  : : <name>guide  ; 
lib gccomp  : : <name>gomp  ; 
#ATTENTION: "this requires adding threading=multi to the bjam call"
alias libomp : intelomp : <toolset>intel ;
alias libomp : gccomp : <toolset>gcc ;
alias libomp : : <toolset>msvc ;
alias libomp : : <toolset>sun ;
alias libomp : : <toolset>clang ;
## MPI LIBRARIES - comment out if using mpi is not required
lib myriexpress : :  <name>myriexpress <search>/opt/osshpc/mx/lib64/ ;
lib mpilibrary : : <name>mpich <search>$(MPI_LIB_DIR) ;
lib mpilibrary_cpp : : <name>pmpich++ <search>$(MPI_LIB_DIR) ;

#################################################################################
# IN PRINCIPLE THIS SHOULD REQUIRE NO CUSTOMARIZATION .. apart for compiling new applications
## defining "ids" for the different projects
use-project /kratos-prj : . ;
##gid post library
use-project /kratos-prj/gidpost : $(TOP)/external_libraries/gidpost ;
##kratos base library and python interfaces
use-project /kratos-prj/kratos : kratos ; 
##applications included in the compilation
use-project /kratos-prj/PFEMapplication : $(TOP)/applications/PFEMapplication ;
use-project /kratos-prj/incompressible_fluid_application : $(TOP)/applications/incompressible_fluid_application ;
use-project /kratos-prj/structural_application : $(TOP)/applications/structural_application ;
use-project /kratos-prj/convection_diffusion_application : $(TOP)/applications/convection_diffusion_application ;
use-project /kratos-prj/ExternalSolversApplication : $(TOP)/applications/ExternalSolversApplication ;
use-project /kratos-prj/ULFapplication : $(TOP)/applications/ULFapplication ;
use-project /kratos-prj/ALEapplication : $(TOP)/applications/ALEapplication ;
use-project /kratos-prj/FSIapplication : $(TOP)/applications/FSIapplication ;
use-project /kratos-prj/MeshingApplication : $(TOP)/applications/MeshingApplication ;
##use-project /kratos-prj/Qcompressible_fluid_application : $(TOP)/applications/Qcompressible_fluid_application ;
use-project /kratos-prj/FluidDynamicsApplication : $(TOP)/applications/FluidDynamicsApplication ;
## REQUIRES METIS TO BE INSTALLED
use-project /kratos-prj/MetisApplication : $(TOP)/applications/metis_application ;

## REQUIRES TRILINOS TO BE INSTALLED
use-project /kratos-prj/TrilinosApplication : $(TOP)/applications/trilinos_application ;

## MKL solvers: will not be compiled by default ###################################################
## this requires intel MKL library (v. 10.0.1.014) installed properly on your system ##############
# use-project /kratos-prj/mkl_solvers_application : $(TOP)/applications/mkl_solvers_application ; 
# GPU Solvers: needs CUDA to be installed and appropriate environment variable set, a GT200 series GPU card (GTX260, GTX 280, etc.) with the *latest* driver installed
# Before trying to compile this application, go to "~/kratos/applications/gpu_solvers_application/custom_external_libraries" and issue a "./build.sh" to build the "gpu_sparse.a" library
# use-project /kratos-prj/gpu_solvers_application : $(TOP)/applications/gpu_solvers_application ;
###################################################################################################
alias libkratos_static : /kratos-prj/kratos//libkratos/<link>static ;
alias gidpost : /kratos-prj/gidpost//gidpost/<link>static ; 
#################################################################################
## installation
alias install :
		/kratos-prj//kratos 
		/kratos-prj/PFEMapplication//install 
		/kratos-prj/incompressible_fluid_application//install
		/kratos-prj/structural_application//install
		/kratos-prj/convection_diffusion_application//install
		/kratos-prj/ExternalSolversApplication//install
		/kratos-prj/ULFapplication//install
		/kratos-prj/ALEapplication//install
		/kratos-prj/MeshingApplication//install
#		/kratos-prj/FSIapplication//install
#		/kratos-prj/mkl_solvers_application//install
#		/kratos-prj/Qcompressible_fluid_application//install
		/kratos-prj/FluidDynamicsApplication//install
		/kratos-prj/MetisApplication//install
		/kratos-prj/TrilinosApplication//install
#		/kratos-prj/gpu_solvers_application//install
		; 
ECHO $(TOP) ;

Desarrollo

¿Cómo se desarrolla para Kratos?

blablabla

--Juanpere 10:42, 28 November 2010 (CET)

Personal tools
Categories