High Performance Computing Applications High Performance Computing Applications NEC simulation - TiltRotor Unmanned Transport aircraft aircraft Space Vehicle Center of Excellence for High Performance Computing Hurricane forecast Center of Excellence for High Performance Computing HPCC High Performance Computing Numerical Simulations • Environmental Systems • Quantum-mechanical modeling of molecules • Turbulence in astrophysical and laboratory plasmas • Optimization in transportation systems Center of Excellence for High Performance Computing Lava flow simulation using SCIARA model (Etna – Nicolosi - July 2001) First eight days reproduce the real event Next days are simulated using SCIARA model Center of Excellence for High Performance Computing Lava flow simulation using SCIARA model (Etna – 1669) Detail of Catania Etna area Center of Excellence for High Performance Computing Landslide simulation using SCIDDICA model (Sarno May 1998) Center of Excellence for High Performance Computing Quantum-mechanical modeling of molecules Center of Excellence for High Performance Computing Physical case studies • solar atmosphere • solar wind • planetary magnetospheres • earth-sun interactions Center of Excellence for High Performance Computing Reconnection numeric simulation sample Evolution of magnetic field lines of force and current in a plasma. Line of force change topology during simulation. Center of Excellence for High Performance Computing HPCC Simulation of travel request from stop n.7 to stop n. 14 HPCC Simulation of travel request from stop n.7 to stop n. 14 HPCC Simulation of travel request from stop n.7 to stop n. 14 HPCC Simulation of travel request from stop n.7 to stop n. 14 HPCC Simulation of travel request from stop n.7 to stop n. 14 HPCC Simulation of travel request from stop n.7 to stop n. 14 HPCC Simulation of travel request from stop n.7 to stop n. 14 HPCC Simulation of travel request from stop n.7 to stop n. 14 HPCC Simulation of travel request from stop n.7 to stop n. 14 HPCC Simulation of travel request from stop n.7 to stop n. 14 HPCC Simulation of travel request from stop n.7 to stop n. 14 HPCC Simulation of travel request from stop n.7 to stop n. 14 HPCC Simulation of travel request from stop n.7 to stop n. 14 HPCC Simulation of travel request from stop n.7 to stop n. 14 HPCC Simulation of travel request from stop n.7 to stop n. 14 HPCC Simulation of travel request from stop n.7 to stop n. 14 HPCC Simulation of travel request from stop n.7 to stop n. 14 HPCC Simulation of travel request from stop n.7 to stop n. 14 HPCC Simulation of travel request from stop n.7 to stop n. 14 HPCC Simulation of travel request from stop n.7 to stop n. 14 HPCC Simulation of travel request from stop n.7 to stop n. 14 HPCC Simulation of travel request from stop n.7 to stop n. 14 HPCC Simulation of travel request from stop n.7 to stop n. 14 HPCC Simulation of travel request from stop n.7 to stop n. 14 HPCC Simulation of travel request from stop n.7 to stop n. 14 HPCC Simulation of travel request from stop n.7 to stop n. 14 HPCC Simulation of travel request from stop n.7 to stop n. 14 HPCC Simulation of travel request from stop n.7 to stop n. 14 HPCC Simulation of travel request from stop n.7 to stop n. 14 HPCC Simulation of travel request from stop n.7 to stop n. 14 HPCC Simulation of travel request from stop n.7 to stop n. 14 HPCC Simulation of travel request from stop n.7 to stop n. 14 HPCC Simulation of travel request from stop n.7 to stop n. 14 HPCC Simulation of travel request from stop n.7 to stop n. 14 HPCC HPCC High Performance Computing Center Center of Excellence MIUR for High Performance Computing University of Calabria – Rende (CS) - Italy HPCC HPCC Located at the University of Calabria Established in 2001 thanks to Italian Ministry funds for the creation of research centers of excellence Operating since October 2002 HPCC HPCC – Research lines (WP1) Workpackage 1 – A High Performance Computing Environment for Scientific and Industrial Applications Lagrangian relaxation for applications scheduling on computational grids Applications Agent Agent Agent Auctioneer Resources Agent Agent HPCC HPCC – Research lines (WP2) Workpackage 2 – Turbulence in Astrophysical and Laboratory Plasmas Numerical simulations of kinetics equations in plasmas Simulations of 3D MHD equations in plasmas Montecarlo simulations for particles diffusion in presence of collisions Montecarlo simulations for particles diffusion in presence of magneto-hydrodynamics turbulences HPCC HPCC – Research lines (WP2) Workpackage 2 – Turbulence in Astrophysical and Laboratory Plasmas Solar atmosphere and wind Planetary magnetosphere Earth-Sun interaction HPCC HPCC – Research lines (WP3) Workpackage 3 – Computational and Theoretical Chemistry Solvent effects in deMon code Topological analysis of electron localization function. Basis and applications Parallelization of SCF equations (Self Consistent Field). HPCC HPCC – Research lines (WP3) Workpackage 3 – Computational and Theoretical Chemistry Molecule’s quantum-mechanical models HPCC HPCC – Research lines (WP4) Workpackage 4 – Parallel Models for Simulation of Acentric Complex Phenomena Genetic algorithms application in debris flows HPCC HPCC – Research lines (WP4) Workpackage 4 – Parallel Models for Simulation of Acentric Complex Phenomena Cellular Automata SCIARA model: application in 2001 and 2002 Etnean lava flows HPCC HPCC – Research lines (WP5) Workpackage 5 – Parallel Computational Fluid Dynamics POD (Proper Orthonormal Decomposition) code for solar data analysis HPCC HPCC – Research lines (WP6) Workpackage 6 – Computational Optimization for Large-Scale Systems HPC in financial scope HPC in transportation scope ECOBACH DB EBA CH BRINDISI CLIENT PRINTER CLIENT HPCC HPCC – High-level training HPC technologies and grid computing Master (in progress). PhDs and research fellowships on HPC topics and their multidisciplinary applications. HPCC HPCC – The mission Infrastructure campus grid (4 equipped nodes and another 3 in progress) Geographic grid (SPACI) Base and applied research Technological transfer High-level training HPCC HPCC – The infrastructure The campus grid HPCC HPCC – The infrastructure The center’s equipment HP AlphaServer SC CPU: 64 1.25 GHz Alpha Performance: 160 GFLOPS HPCC HPCC – The infrastructure The center’s equipment HP Sierra XC 6000 CPU: 24 1.5 GHz Itanium-2 (Madison) Performance: 144 GFLOPS HPCC HPCC – The infrastructure The center’s equipment NEC TX-7 CPU: 16 1 GHz Itanium-2 Performance: 64 GFLOPS HPCC Performance Development 11.7 PF/s 10 P flop/s IBM Roadrunner 1.02 PF/s 1 Pflop/s IBM BlueGene/L NEC Earth Simulator SUM 100 Tflop/s 9.0 TF/s IBM ASCI W hite 1.17 TF/s Intel ASCI Red 10 Tflop/s 6-8 years #1 59.7 GF/s Fujitsu 'NW T' 1 Tflop/s #500 My Laptop 100 Gflop/s 2008 2007 2006 2005 2004 2003 2002 2001 2000 1999 1998 1997 1996 1995 1 Gflop/s 1994 10 Gflop/s 1993 0.4 GF/s 100 M flop/s Jack Dongarra INNOVATIVE COMPUTING LABORATORY 63 Caso esemplificativo • Perché? • This software will be developed to investigate long numbers management problems in the framework of the fast prime numbers generators. Currently we are working on the basical frame with the aim to further refine the model and the techniques. The main goal is to realize algorithms at high efficiency and high computation locality while low data exchange between non-near processes Fonte: wikipedia.org Distanza primo-posizione Distanza fra primo e primo successore Hai numeri primi hanno lavorato • • • • • • • • Euclide Eratostene Marsenne Fermat Eulero Goldbach Legendre Ramanujan • • • • • • • Riemann Hadamard Poussoin Gauss Landau Bohr Hardy e molti altri… La nostra posizione • Ogni sciocco può porre questioni sui numeri primi alle quali il più saggio degli uomini non può rispondere Hardy La nostra posizione • Ogni sciocco può porre questioni sui numeri primi alle quali il più saggio degli uomini non può rispondere Hardy, docente a Cambridge NESSUNA TEORIA SOLO UN CASO DI STUDIO Esempio di soluzione semplice • • • • • • • • • • • • • • • • • • • • • • • • • • • • #include <stdio.h> #include <stdlib.h> main(int argc, char *argv[]) { int i, j, N; int *a; if (argc < 2) { printf("errore: argomento mancante\n"); printf("il formato corretto è\n"); printf("%s <numero>\n", argv[0]); return; } N = atoi(argv[1]); a = (int *) malloc(N*sizeof(int)); if (a==NULL) { printf("errore: memoria insuff. \n"); return; } for (i=2; i<N; i++) a[i]=1; // li pone tutti uguali ad 1 for (i=2; i<N; i++) // li scorre if (a[i]) // se soddisfatta (valori diversi da zero) va avanti for (j=i; i*j<N; j++) a[i*j]=0; // j è posta uguale ad i, se i*j è maggiore di N a[i*j] diventa 0 perché scaturito da un prodotto for (i=2; i<N; i++) // li scorre if (a[i]) printf("%d ", i); // se soddisfatta (valori diversi da zero) va avanti e printf("\n", i); // stampa il numeratore iesimo } Fonte: Algoritmo presente in molte versioni d.p.d. su internet Esempio di soluzione semplice • • • • • • • • • • • • • • • • • • • • • • • • • • • • #include <stdio.h> Dichiarazioni #include <stdlib.h> main(int argc, char *argv[]) { int i, j, N; int *a; if (argc < 2) { printf("errore: argomento mancante\n"); printf("il formato corretto è\n"); printf("%s <numero>\n", argv[0]); return; } N = atoi(argv[1]); a = (int *) malloc(N*sizeof(int)); if (a==NULL) { printf("errore: memoria insuff. \n"); return; } for (i=2; i<N; i++) a[i]=1; // li pone tutti uguali ad 1 for (i=2; i<N; i++) // li scorre if (a[i]) // se soddisfatta (valori diversi da zero) va avanti for (j=i; i*j<N; j++) a[i*j]=0; // j è posta uguale ad i, se i*j è maggiore di N a[i*j] diventa 0 perché scaturito da un prodotto for (i=2; i<N; i++) // li scorre if (a[i]) printf("%d ", i); // se soddisfatta (valori diversi da zero) va avanti e printf("\n", i); // stampa il numeratore iesimo } Fonte: Algoritmo presente in molte versioni d.p.d. su internet Esempio di soluzione semplice • • • • • • • • • • • • • • • • • • • • • • • • • • • • #include <stdio.h> Dichiarazioni #include <stdlib.h> main(int argc, char *argv[]) { int i, j, N; int *a; if (argc < 2) Controllo parametro { printf("errore: argomento mancante\n"); printf("il formato corretto è\n"); printf("%s <numero>\n", argv[0]); return; } N = atoi(argv[1]); a = (int *) malloc(N*sizeof(int)); if (a==NULL) { printf("errore: memoria insuff. \n"); return; } for (i=2; i<N; i++) a[i]=1; // li pone tutti uguali ad 1 for (i=2; i<N; i++) // li scorre if (a[i]) // se soddisfatta (valori diversi da zero) va avanti for (j=i; i*j<N; j++) a[i*j]=0; // j è posta uguale ad i, se i*j è maggiore di N a[i*j] diventa 0 perché scaturito da un prodotto for (i=2; i<N; i++) // li scorre if (a[i]) printf("%d ", i); // se soddisfatta (valori diversi da zero) va avanti e printf("\n", i); // stampa il numeratore iesimo } Fonte: Algoritmo presente in molte versioni d.p.d. su internet Esempio di soluzione semplice • • • • • • • • • • • • • • • • • • • • • • • • • • • • #include <stdio.h> Dichiarazioni #include <stdlib.h> main(int argc, char *argv[]) { int i, j, N; int *a; if (argc < 2) Controllo parametro { printf("errore: argomento mancante\n"); printf("il formato corretto è\n"); printf("%s <numero>\n", argv[0]); return; } Allocazione memoria N = atoi(argv[1]); a = (int *) malloc(N*sizeof(int)); if (a==NULL) { printf("errore: memoria insuff. \n"); return; } for (i=2; i<N; i++) a[i]=1; // li pone tutti uguali ad 1 for (i=2; i<N; i++) // li scorre if (a[i]) // se soddisfatta (valori diversi da zero) va avanti for (j=i; i*j<N; j++) a[i*j]=0; // j è posta uguale ad i, se i*j è maggiore di N a[i*j] diventa 0 perché scaturito da un prodotto for (i=2; i<N; i++) // li scorre if (a[i]) printf("%d ", i); // se soddisfatta (valori diversi da zero) va avanti e printf("\n", i); // stampa il numeratore iesimo } Fonte: Algoritmo presente in molte versioni d.p.d. su internet Esempio di soluzione semplice • • • • • • • • • • • • • • • • • • • • • • • • • • • • #include <stdio.h> Dichiarazioni #include <stdlib.h> main(int argc, char *argv[]) { int i, j, N; int *a; if (argc < 2) Controllo parametro { printf("errore: argomento mancante\n"); printf("il formato corretto è\n"); printf("%s <numero>\n", argv[0]); return; } Allocazione memoria N = atoi(argv[1]); a = (int *) malloc(N*sizeof(int)); if (a==NULL) { Uscita se memoria insufficiente printf("errore: memoria insuff. \n"); return; } for (i=2; i<N; i++) a[i]=1; // li pone tutti uguali ad 1 for (i=2; i<N; i++) // li scorre if (a[i]) // se soddisfatta (valori diversi da zero) va avanti for (j=i; i*j<N; j++) a[i*j]=0; // j è posta uguale ad i, se i*j è maggiore di N a[i*j] diventa 0 perché scaturito da un prodotto for (i=2; i<N; i++) // li scorre if (a[i]) printf("%d ", i); // se soddisfatta (valori diversi da zero) va avanti e printf("\n", i); // stampa il numeratore iesimo } Fonte: Algoritmo presente in molte versioni d.p.d. su internet Esempio di soluzione semplice • • • • • • • • • • • • • • • • • • • • • • • • • • • • #include <stdio.h> #include <stdlib.h> main(int argc, char *argv[]) { int i, j, N; Cosa fa? int *a; if (argc < 2) { Individua tutti i numeri scaturiti printf("errore: argomento mancante\n"); printf("il formato corretto è\n"); da un prodotto, gli altri sono printf("%s <numero>\n", argv[0]); primi return; } N = atoi(argv[1]); a = (int *) malloc(N*sizeof(int)); if (a==NULL) { printf("errore: memoria insuff. \n"); return; } for (i=2; i<N; i++) a[i]=1; // li pone tutti uguali ad 1 for (i=2; i<N; i++) // li scorre if (a[i]) // se soddisfatta (valori diversi da zero) va avanti for (j=i; i*j<N; j++) a[i*j]=0; // j è posta uguale ad i, se i*j è maggiore di N a[i*j] diventa 0 perché scaturito da un prodotto for (i=2; i<N; i++) // li scorre if (a[i]) printf("%d ", i); // se soddisfatta (valori diversi da zero) va avanti e printf("\n", i); // stampa il numeratore iesimo } Fonte: Algoritmo presente in molte versioni d.p.d. su internet Esempio di soluzione semplice • • • • • • • • • • • • • • • • • • • • • • • • • • • • #include <stdio.h> #include <stdlib.h> main(int argc, char *argv[]) { int i, j, N; int *a; if (argc < 2) VANTAGGI { printf("errore: argomento mancante\n"); printf("il formato corretto è\n"); Molto efficiente: printf("%s <numero>\n", argv[0]); solo addizioni, for e moltiplicazioni return; } N = atoi(argv[1]); a = (int *) malloc(N*sizeof(int)); if (a==NULL) { printf("errore: memoria insuff. \n"); return; } for (i=2; i<N; i++) a[i]=1; // li pone tutti uguali ad 1 for (i=2; i<N; i++) // li scorre if (a[i]) // se soddisfatta (valori diversi da zero) va avanti for (j=i; i*j<N; j++) a[i*j]=0; // j è posta uguale ad i, se i*j è maggiore di N a[i*j] diventa 0 perché scaturito da un prodotto for (i=2; i<N; i++) // li scorre if (a[i]) printf("%d ", i); // se soddisfatta (valori diversi da zero) va avanti e printf("\n", i); // stampa il numeratore iesimo } Fonte: Algoritmo presente in molte versioni d.p.d. su internet Esempio di soluzione semplice • • • • • • • • • • • • • • • • • • • • • • • • • • • • #include <stdio.h> #include <stdlib.h> main(int argc, char *argv[]) { int i, j, N; int *a; if (argc < 2) { VANTAGGI printf("errore: argomento mancante\n"); printf("il formato corretto è\n"); printf("%s <numero>\n", argv[0]); Facile da paralelizzare return; } N = atoi(argv[1]); a = (int *) malloc(N*sizeof(int)); if (a==NULL) { printf("errore: memoria insuff. \n"); return; } for (i=2; i<N; i++) a[i]=1; // li pone tutti uguali ad 1 for (i=2; i<N; i++) // li scorre if (a[i]) // se soddisfatta (valori diversi da zero) va avanti for (j=i; i*j<N; j++) a[i*j]=0; // j è posta uguale ad i, se i*j è maggiore di N a[i*j] diventa 0 perché scaturito da un prodotto for (i=2; i<N; i++) // li scorre if (a[i]) printf("%d ", i); // se soddisfatta (valori diversi da zero) va avanti e printf("\n", i); // stampa il numeratore iesimo } Fonte: Algoritmo presente in molte versioni d.p.d. su internet Esempio di soluzione semplice • • • • • • • • • • • • • • • • • • • • • • • • • • • • #include <stdio.h> #include <stdlib.h> main(int argc, char *argv[]) { int i, j, N; int *a; if (argc < 2) { Intervenendo su j è possibile printf("errore: argomento mancante\n"); Parametrizzarla per n processori printf("il formato corretto è\n"); printf("%s <numero>\n", argv[0]); return; } N = atoi(argv[1]); a = (int *) malloc(N*sizeof(int)); if (a==NULL) { printf("errore: memoria insuff. \n"); return; } for (i=2; i<N; i++) a[i]=1; // li pone tutti uguali ad 1 for (i=2; i<N; i++) // li scorre if (a[i]) // se soddisfatta (valori diversi da zero) va avanti for (j=i; i*j<N; j++) a[i*j]=0; // j è posta uguale ad i, se i*j è maggiore di N a[i*j] diventa 0 perché scaturito da un prodotto for (i=2; i<N; i++) // li scorre if (a[i]) printf("%d ", i); // se soddisfatta (valori diversi da zero) va avanti e printf("\n", i); // stampa il numeratore iesimo } Fonte: Algoritmo presente in molte versioni d.p.d. su internet In particolare • In C/MPI – Con l’uso delle if su numero processore e della parametrizzazione degli indici, attraverso MPI_SEND , MPI_GATER (su p0) e MPI_RECV è possibile rendere questo semplicissimo algoritmo imbarazzantemente parallelo Superiamo questo modello • Desideriamo usare le griglie • Desideriamo veicolare numeri di molte cifre (simil-struct) • Desideriamo operare su più algoritmi di ricerca contemporaneamente • Desideriamo una topologia dinamica di processi I test di primalità di buona complessità computazionale • • • • Miller-Rabin Proth (Proth: k2n+1, k<n) Fermat Lucas-Lehmer (Mersenne: 2n-1) Il calcolo distribuito • La determinazione delle relazioni fra i nodi viene effettuata nel seguente modo • Ogni nodo invia un ping e attende un pong di risposta, mentre lo attende effettua un loop incrimentale banale con conteggio delle iterazioni i nodi che rispondono in un tempo inferiore o uguale alla media dei tempi (valore del conteggio) sono considerati near, quelli che rispondono in un tempo superiore alla media dei tempi sono considerati non-near Distinzione fra algoritmi • Quelli a bassa località e/o alta comunicazione saranno locati sui processori near , gli altri sui processi nonnear Come agiranno i near • Ogni volta che in un near viene identificato un p-match è inviato al primo libero che riparte da esso, se possibile con un test di primalità differente. In pratica quando un near finisce il proprio segmento riparte dal p-match più alto. Primo timeslice p-match p-match p-match p-match p-match p-match Secondo timeslice Workflow dei job 1/3 • 1) Vengono lanciati n processi n-1 saranno processi ”worker” – Al momento tutti i processi sono collocati nell'insieme non-near (a regime saranno differenziati) – P0 legge il file di partenza con l'elenco dei ”match” e crea un opportuno pool di segmenti successivi di lavoro da distribuire ai ”worker” Workflow dei job 2/3 • 2) I ”worker” attendono il proprio segmento di lavoro, lo espletano ed escono collocandosi in attesa se inattivi (in futuro lavoreranno su nuovi segmenti quando avranno terminato il proprio lavoro appena P0 comunicherà loro un nuovo carico) – I ”worker” comunicano ogni ”p-match” e lo stato di inattività a p0 Workflow dei job 3/3 • 3) P0 riceve tutti i ”p-match” e li inserisce ordinatamente in un file quindi esce (in futuro ridistribuirà nuovi segmentidi lavoro partendo dal ”p-match” più grande) Schema di accesso ai dati 1,2,3,5,7,11 1,2,3,5,7,11, 13 iniziale finale Descrizione algoritmo attuale in sviluppo • - inizializzazioni - dichiarazione variabili - iniziallizazione ambiente parallelo - se _P0 allora leggi file e distribuisci _Pn allora fai operzioni isolando i candidati primi quindi notificali a P0 _P0 e tutti Pn hanno terminato allora salva ed esci Problemi da risolvere • Gestione efficiente dei numeri a molte cifre – Con relativa gestione dei riporti • Comunicazione ottimizzata a buffers La zone near • Test di primalità probabilistici La zona non-near • Test di primalità non probabilistici (es.: elliptic curves) • Algoritmi Genetici (idea: distanze fra primi per individuazione zone ad alta primalità) Cosa intendiamo imparare adesso sulle griglie • Il funzionamento generale e le basi dello sviluppo codici • Accorpare i processi in insieme sulla base dei tempi “attesi” di comunicazione • Inviare ai processi “pacchetti di dati” da utilizzare successivamente HPCC HPCC – Financed Projects EGEE (Enable Grid for E-science in Europe – FP6) Grid.it (FIRB) Parallel optimization methods and resource management through open source simulation software (FIRB). Financial Optimization (CNR). Stochastic Programming on computational grids (MIUR). Financial planning under uncertain conditions (PRIN - MIUR). General-purpose optimization software (FIRB). WADI (WAter supply watersheD planning and management: an Integrated approach): HPC for water resource management. Avviso 901: updating of HPCC’s campus grid. Alarico - International Center for Technology and Innovation: international workshop on high performance and grid computing. HPCC HPCC – SPACI Southern Partnership for Advanced Computational Infrastructure (PON – 2001) Southern computational grid development Partnership University of Calabria - HPCC prof. L. Grandinetti and prof. R. Musmanno University of Lecce - Center For Advanced Computational Technologies (CACT) prof. G. Aloisio ICAR/CNR Naples - Research Center for Parallel Computing and Supercomputers prof. A. Murli HPCC HPCC – Projects under evaluation WADI-2 (FP6) Italian Ministries funds MIMERICA RISCHIO ZERO GITA DIGIdi RACCORSU Regional Ministries funds (POR) HPCC FINE