Strumenti Utente

Strumenti Sito


grid:cactus

Cactus

Il porting del framework cactus sull'architettura INFN GRID è un'idea totalmente sperimentale, ma in linea teorica non ci sono motivi per cui non dovrebbe funzionare. Verrà eseguito uno studio di fattibilità tenuto conto del supporto ancora in fase di sviluppo di MPI, considerando le problematiche che verranno alla luce in corso d'opera.

Overview

Cactus è un framework, ossia una struttura di supporto su cui un software può essere organizzato e progettato, ed è formato da una serie di librerie di codice utilizzabili con più linguaggi di programmazione. Nel nostro caso si sta parlando di un ambiente open source per lo sviluppo di simulazioni multidimensionali parallele ad alte prestazioni; sviluppato originariamente per eseguire simulazioni di relatività numerica, è divenuto rapidamente un framework per lo sviluppo di applicazioni parallele in campo scientifico ( astronomia, meteorologia, chimica, ingegneria, gravitazione, ecc… )e vanta una notevole comunità di sviluppo e utilizzo; risulta essere pertanto un applicativo perfetto per il porting su grid.

CACTUS

THORNS

Struttura di Cactus

La struttura di cactus si ispira alla pianta che gli dona il nome: Si suddivide in due parti: Flesh e Thorns.

Il Nucleo “flesh” \è scritto in ANSI C, ed è indipendente da tutti i thorns. Cura la parte di compilazione in quanto contiene un sistema di compilazione flessibile e scheduler parametrizzati; dopo l'inizializzazione agisce come una libreria di utility/servizio chiamata dai thorns per richiedere compiti o informazioni.

I plug-in “thorns” ossia spine possono essere scritti in C, C++, Fortran77, Fortran90, ma anche in Java, Perl, Python e sono librerie separate che incorporano alcune funzionalità: si occupano dei driver, dell'input/output, dell'interpolazione, della gestione della metrica, della gestione delle griglie, della fisica, ecc…

Creare una configurazione

Una volta scaricato Cactus, nella directory ~/Cactus/ digitare

gmake<config name>-config options=<filename>

gmake WaveTEST-config options=configWaveGRID 

Come primo test si utilizza questo file di configurazione, nel quale indichiamo di utilizzare OpenMPI come implementazione di MPI, e indichiamo una thornlist ristretta, per compilare solo i moduli di cui necessita, e non introdurre complessità accessorie.

[fabrizio.cornia@grid-ui2 Cactus]$ cat configWaveGRID 

#CFLAGS=-Drestrict=
#F_LINE_DIRECTIVES = yes
DEBUG=no
F77=g77
F90=gfortran
THORNLIST=WaveDemo.th
THORNLIST_DIR=/home/local/fabrizio.cornia/Cactus/wavetest
MPI=OpenMPI
OPENMPI_DIR=/usr

Una volta creata una configurazione è possibile creare l'eseguibile: L'eseguibile è gestito da un file di parametro che descrive quali moduli attivare di quelli presenti all'interno della configurazione e setta i parametri per pilotare la simulazione.

Nella configurazione sono stati inseriti un insieme di thorn necessari all'esecuzione di un programma che valuta l'evoluzione di un campo scalare generato da due sorgenti orbitanti: WaveToy.

WaveToy

[fabrizio.cornia@grid-ui2 Cactus]$ cat WaveDemo.th
# $Id:
#2
!DESC "Demo Parameter File Using WaveToy Application With Cool Tools 
(Development)"

!REPOSITORY_TYPE pserver
!REPOSITORY_LOCATION cvs.cactuscode.org
!REPOSITORY_NAME /cactus

CactusBase/Boundary        
CactusBase/CoordBase
CactusBase/SymBase
CactusBase/CartGrid3D      
CactusBase/IOUtil          
CactusBase/IOBasic         
CactusBase/Time 
CactusBase/LocalReduce           
CactusBase/IOASCII      
CactusConnect/HTTPD
CactusConnect/HTTPDExtra 
CactusConnect/Socket
CactusExternal/jpeg6b
CactusPUGH/PUGH            
CactusPUGH/PUGHSlab
CactusPUGH/PUGHReduce
CactusPUGHIO/IsoSurfacer
CactusIO/IOJpeg
CactusWave/WaveToyC        
CactusWave/IDScalarWaveC   
CactusWave/WaveBinarySource  
Gestione della Configurazione

Per produrre l'eseguibile:

gmake <config>
gmake <config>-clean                  # rimuove file oggetto e dipendenze
gmake <config>-delete                 # rimuove la configurazione
gmake <config>-rebuild                # rigenera la configurazione
gmake <config>-thornlist              # rigenera la thornlist

Esecuzione

L'eseguibile si trova in ~/Cactus/exe/ Per eseguire il codice è necessario utilizzare un file di parametro che setta i thorn attivi, e i parametri per gestire questi thorns, incluse le condizioni iniziali del problema fisico.

[fabrizio.cornia@grid-ui2 exe]$ cat /home/local/fabrizio.cornia/Cactus/WaveDemo.par
!DESC "Demo WaveToy with Cool Tools"

ActiveThorns = "coordbase localreduce symbase pugh pughslab pughreduce isosurfacer 
iojpeg jpeg6b ioutil ioascii iobasic time wavetoyc cartgrid3d boundary 
idscalarwavec wavebinarysource httpd httpdextra socket"

# HTTPD

httpd::port                     = 5555
httpd::pause                    = 0

! opzioni dei timer
cactus::cctk_timer_output  = "full"
pugh::timer_output         = "yes"


# Simulation

! numero di interazioni: fondamentale per la durata del job

cactus::cctk_itlast             = 100

! importante!!! dimensioni della griglia; da questo dipende la richiesta in
! memoria del problema, e la complessità di calcolo del problema.
! settando driver::local si attribuisce la taglia di ogni dimensione relativa al singolo processo
! mentre driver::global si riferisce alla dimensione della griglia fissata che viene suddivisa 
! dinamicamente tra i processi 

driver::local_nx                = 40
driver::local_ny                = 40
driver::local_nz                = 40



time::dtfac                     = 0.25
grid::type                      = "ByRange"
grid::domain                    = "full"
grid::xyzmin                    = -1
grid::xyzmax                    = 1


# Physics

wavetoy::bound                  = "radiation"
wavebinarysource::binary_omega  = 26 
wavebinarysource::binary_charge = 0.0001
wavebinarysource::binary_radius = 0.2
wavebinarysource::binary_size   = 0.1


# IO

IO::out_dir                     = "WaveDemo"
IO::out_downsample_x            = 2
IO::out_downsample_y            = 2
IO::out_downsample_z            = 2

IOBasic::outInfo_every          = 10
IOBasic::outInfo_vars           = "wavetoy::phi"

IOBasic::outScalar_every        = 10
IOBasic::outScalar_vars         = "wavetoy::phi"

IOASCII::out1D_every            = 10
IOASCII::out1D_vars             = "wavetoy::phi"

IOASCII::out2D_every            = 10
IOASCII::out2D_vars             = "wavetoy::phi"

IOJpeg::out_every               = 10
IOJpeg::out_vars                = "wavetoy::phi"
IOJpeg::mode                    = "remove"
IOJpeg::colormap                = "auto"
IOJpeg::colormap_factor         = 16 

IsoSurfacer::out_format         = "SOCK"
IsoSurfacer::out_vars           = "WAVETOY::phi"
IsoSurfacer::isovalue           = 0.5

Per l'esecuzione locale in parallelo:

mpirun -np $proc -machinefile $machinelist cactus_WaveGRID WaveDemo.par

Gestione Parametri

per visualizzare i parametri impostabili in un eseguibile eseguire l'esegibile ricavato dalla configurazione con l'opzione -O

./cactus_<config> -O
./cactus_WaveGRID -o cactus::cctk_timer_output

Parameter:   Cactus::cctk_timer_output
Description: "Provide output from timers"
Type:        KEYWORD
Default:     off
Scope:       PRIVATE
  Range:     full
    Origin:      Cactus
    Description: Detailed timer output
  Range:     off
    Origin:      Cactus
    Description: No timer output

Testing

E' necessario concentrare l'attenzione nel testing su alcuni thorn che risultano essere fondamentali per il tipo di problemi che vogliamo trattare (cpu-intensive, calcolo parallelo)

Thorns Importanti

* PUGH gestisce le griglie e la loro decomposizione tra i processi. Necessita delle librerie MPI per permettere l'esecuzione in parallelo; è quindi un thorn fondamentale per applicazioni cpu-intensive;

* CARPET gestisce le griglie nelle griglie per permettere risoluzioni differenti in punti diversi. Anche lui necessita delle librerie MPI;

* WHISKY implementa le routine per le simulazioni di relatività numerica; è importante per le attività del gruppo di relatività numerica;

E'possibile testare i thorn carpet all'interno della simulazione WaveToy: per utilizzare i thorns CARPET, è necessario aggiungerli alla thornlist in sede di compilazione dell'eseguibile, e selezionarli a runtime al posto di PUGH nella prima riga del file .par

Compilazione con Carpet

Seguendo la ThornList per wavetoy del sito carpet e aggiungendola alla nostra ThornList

CactusBase/Boundary
CactusBase/CoordBase
CactusBase/SymBase
CactusBase/CartGrid3D
CactusBase/IOUtil
CactusBase/IOBasic
CactusBase/Time
CactusBase/LocalReduce
CactusBase/IOASCII
CactusConnect/HTTPD
CactusConnect/HTTPDExtra
CactusConnect/Socket
CactusExternal/jpeg6b
CactusPUGH/PUGH
CactusPUGH/PUGHSlab
CactusPUGH/PUGHReduce
CactusPUGHIO/IsoSurfacer
CactusIO/IOJpeg
CactusWave/WaveToyC
CactusWave/IDScalarWaveC
CactusWave/WaveBinarySource

#### CARPET #####

Carpet/Carpet                      # driver (CarpetLib) [ ] {Cactus,I$
Carpet/CarpetIOASCII               # IOASCII (CarpetLib,driver,Hypers$
#Carpet/CarpetIOFlexIO              # IOFlexIO (CarpetLib,driver,Hype$
Carpet/CarpetLib                   # CarpetLib ( ) [ ] { }
Carpet/CarpetReduce                # reduce (CarpetLib,driver) [ ] { }
Carpet/CarpetRegrid                # CarpetRegrid (CarpetLib,driver) $
Carpet/CarpetSlab                  # Hyperslab (CarpetLib,driver) [ ]$
Carpet/CarpetTest                  # CarpetTest ( ) [ ] { }
Carpet/CartGrid3D                  # grid ( ) [ ] {driver}

il codice viene compilato

/var/www/html/dokuwiki/data/pages/grid/cactus.txt · Ultima modifica: Y/m/d H:i da