Prodotto Matrice - Vettore in MPI - III Strategia
|
|
- Maria Corona
- 6 anni fa
- Visualizzazioni
Transcript
1 Facoltà di Ingegneria Corso di Studi in Ingegneria Informatica Esercitazione di Calcolo Parallelo Prodotto Matrice - Vettore in MPI - III Strategia Anno Accademico 2010/2011 Prof.ssa Alessandra D'alessio Candidati Mario Buonomo Lorenzo Carullo Luigi De Simone
2 Indice 1 Descrizione del problema 1 2 Descrizione Algoritmo Descrizione Input, output, errori e subroutine Analisi del software Analisi Tabelle Tempi Speed Up Efficienza Esempi d uso e Codice 13 Bibliografia 23 i
3 Elenco delle figure 2.1 Blocchi della matrice Suddivisione matrice Suddivisione finale della matrice Invio vettore Calcolo Prodotti parziali Situazione d errore Grafico Tempi Grafico Speed Up Grafico Efficienza Esempio d uso ii
4 Elenco delle tabelle 3.1 Tabella Tempi Tabella Speed Up Tabella Efficienza iii
5 Capitolo 1 Descrizione del problema Si vuole effettuare il calcolo del prodotto matrice vettore: Ax=y, A R nxn, x,y R n su un calcolatore MIMD a memoria distribuita con p processori, con A matrice quadrata di ordine n multiplo del numero di processori. 1
6 Capitolo 2 Descrizione Algoritmo 2.1 Descrizione L algoritmo sequenziale prevede, ovviamente, il calcolo del vettore y componente per componente: y i = n j=1 a i,j x j, con i=1,...,n Siccome il calcolo di ciascun prodotto delle righe della matrice A per il vettore x può essere fatto indipendentemente dagli altri prodotti, l algoritmo parallelo prevede di distribuire il calcolo delle componenti y ai processori utilizzati. La matrice A, di dimensione N, può essere distribuita ai processori secondo varie strategie, quella utilizzata in quest algoritmo, definita come la terza, è la distribuzione per blocchi di dimensione (N/sqrt(p), N/sqrt(p)) utilizzando una griglia bidimensionale. La strategia adottata per distribuire la matrice è stata quella di linearizzare la matrice stessa, e successivamente, di inviare quest ultima dal processore di rank 0 della griglia bidimensionale tramite una scatter ai processori che 2
7 Prodotto Matrice Vettore in MPI appartengono alla prima colonna. Ogni processore della prima colonna avrà un blocco della matrice di dimensione (N/sqrt(p), N/sqrt(p)). Sempre il processo di rank 0 della griglia bidimensionale invia tramite scatter il vettore X questa volta però alla prima riga della griglia bidimensionale in questo modo ogni processore della prima riga avrà un blocco di dimensione N/sqrt(p). Ogni processore della prima riga invia il proprio blocco di X in broadcast lungo la sua colonna d appartenza. Adesso ogni processore avrà il suo blocco della matrice originaria e il vettore x e può effettuare il calcolo riga (appartenente al suo blocco di righe locale) per colonna; ogni processore avrà nella sua memoria locale i risultati parziali e questi andranno poi raccolti e concatenati dal processore root della propria riga tramite un operazione di Reduce il quale scriverà il tutto nel vettore risultato. In figura è mostrato un esempio di suddivisione della matrice A in blocchi a 4 processori: Figura 2.1: Blocchi della matrice 3
8 Prodotto Matrice Vettore in MPI Di seguito è riportata la suddivisione della matrice A suddivisa per strisce orizzontali inviata alla prima colonna della griglia: Figura 2.2: Suddivisione matrice Nella seguente figura è mostrato l invio in blocchi delle strisce verticali della matrice originaria contenute nei processori della prima colonna lungo le altre colonne: Figura 2.3: Suddivisione finale della matrice Di seguito riportiamo i passi successivi per l implementazione dell algoritmo quali l invio in blocchi del vettore X e dei calcoli delle somme parziali: 4
9 Prodotto Matrice Vettore in MPI Figura 2.4: Invio vettore Figura 2.5: Calcolo Prodotti parziali 2.2 Input, output, errori e subroutine L input dell algoritmo è una matrice quadrata A di dimensioni NxN, dove N deve essere multiplo del numero di processori utilizzato; la dimensione della matrice è memorizzata in una costante nel programma C. L output generato dall algoritmo è composto dalla matrice A di ingresso (generata in maniera casuale), il vettore x (generato in maniera casuale), il vettore y contenente il prodotto Ax, il vettore contenente il prodotto Ax 5
10 Prodotto Matrice Vettore in MPI calcolato in maniera sequenziale (dal solo processore root) e infine da una stampa con un codice ok che ci da conferma del fatto che il risultato parallelo è corretto (lo si confronta con quello sequenziale). Un possibile errore del programma si verifica quando, la dimensione della matrice in considerazione non è un multiplo del numero di processori su cui facciamo girare il programma oppure quando il numero di processori su cui facciamo girare il programma non è un quadrato perfetto. Proprio per questo abbiamo inserito un controllo apposito nel codice. Un esempio della situazione d errore è la seguente (N della matrice = 16): Figura 2.6: Situazione d errore 6
11 Capitolo 3 Analisi del software 3.1 Analisi Osserviamo ora il nostro algoritmo analizzando in dettaglio alcune caratteristiche atte a valutare le prestazioni di un software parallelo. Esse consentiranno all utente di capire in quale situazione è più opportuno utilizzare l algoritmo e quando invece il suo utilizzo non reca alcun palese vantaggio. Tali caratteristiche sono: Tempo di esecuzione utilizzando un numero p>1 di processori. Generalmente indicheremo tale parametro con il simbolo T(p) ; Speed up riduzione del tempo di esecuzione rispetto all utilizzo di un solo processore, utilizzando invece p processori. In simboli, avremo S(p) = T(1) / T(p). Il valore dello speed up ideale dovrebbe essere pari al numero p dei processori, perciò l algoritmo parallelo risulta migliore quanto più S(p) è prossimo a p. 7
12 Prodotto Matrice Vettore in MPI Efficienza, Calcolare solo lo speed-up spesso non basta per effettuare una valutazione corretta, poiché occorre rapportare lo speed-up al numero di processori, e questo può essere effettuato valutando l efficienza. Siano dunque p il numero di processori ed S(p) lo speed - up ad esso relativi. Si definisce efficienza il parametro E(p) = S(p) / p, essa fornisce un indicazione di quanto sia stato usato il parallelismo nel calcolatore. Idealmente, dovremmo avere che E(p) = 1 e quindi l algoritmo parallelo risulta migliore quanto più E(p) è vicina ad 1. 8
13 Prodotto Matrice Vettore in MPI 3.2 Tabelle Le tabelle che seguono mostrano i dati raccolti analizzando ciascuna delle caratteristiche sopraelencate. I tempi sono stati raccolti presso su un cluster di nodi di calcolo presso il Data Center SCoPE. La prima riga di ogni tabella contiene il valore dei dati forniti in input, mentre la prima colonna elenca il numero di processori impiegati nella computazione. Accanto a ciascuna tabella viene mostrato il relativo grafico (ottenuti attraverso il software Gnuplot [1986])che evidenzia l andamento dei valori esaminati Tempi Tabella dei tempi (in microsecondi) N = 144 N = 1440 N = Tabella 3.1: Tabella Tempi 9
14 Prodotto Matrice Vettore in MPI Grafico Figura 3.1: Grafico Tempi Come si può vedere dal grafico, per una dimensione della matrice piccola, il tempo d esecuzione con 1, 4, 9 e 16 cpu è pressocchè costante. Quando invece aumentiamo ancora la dimensione della matrice, nel passaggio da 1 a 2 processori c è un notevole miglioramento del tempo d esecuzione, mentre aumentando ancora il numero di processori il tempo di esecuzione aumenta notevolmente rispetto a quello iniziale. 10
15 Prodotto Matrice Vettore in MPI Speed Up Tabella Speed-Up N = 144 N = 1440 N = Tabella 3.2: Tabella Speed Up Grafico Figura 3.2: Grafico Speed Up 11
16 Somma N numeri in MPI Efficienza Tabella Efficienza N = 144 N = 1440 N = Tabella 3.3: Tabella Efficienza Grafico Figura 3.3: Grafico Efficienza 12
17 Capitolo 4 Esempi d uso e Codice Per compilare il codice, aperta una shell linux digitiamo: mpicc eser13.c e nella directory di lavoro comparirà un nuovo file, quello d esecuzione. Eseguendolo con: mpiexec -n 4 a.out avremo l output a video: Figura 4.1: Esempio d uso 13
18 Somma N numeri in MPI Murli: ed ecco il codice in C, implementando l algoritmo presente nel testo di / ========================================================== ================== Name : esercitazione 13 di calcolo parallelo Author : Mario Buonomo Lorenzo Carullo Luigi De Simone Version : Copyright : Your copyright notice Description : Prodotto Matrice vettore I I I strategia ========================================================== ================== / #include <s t d i o. h> #include <s t d l i b. h> #include <math. h> #include <time. h> #include "mpi. h" / A(n, n) matrice da distribuire p numero di processori e quadrato perfetto di q ( righe o colonne della grigla ) che indica la dimensione della g r i g l i a elementi per blocco n/sqrt (p) / #define N 16 //deve essere un multiplo del numero di processori #define dim 2 // g r i g l i a 2D #define MASTER 0 // CPU MASTER int main ( int argc, char argv [ ] ) { int col, row, r e o r d e r, i, j, ndim [ 2 ], p e r i o d [ 2 ], b e l o n g s [ 2 ], rows [ 2 ], c o o r d i n a t e [ 2 ], coo_row [ 2 ] ; 14
19 Somma N numeri in MPI double t0, t1, te, t _ f i n ; int menum, nproc, menum2d, merow, k, p, q, a, b ; MPI_Comm comm2d, commcol, commrow; MPI_Init(& argc, &argv ) ; MPI_Comm_rank(MPI_COMM_WORLD, &menum) ; MPI_Comm_size(MPI_COMM_WORLD, &nproc ) ; / Controllo dimensione array / i f (N % nproc!= 0) { f p r i n t f ( s t d e r r, "\nquitting. Size of Matrix must be multiple of Number of Process \n" ) ; MPI_Abort(MPI_COMM_WORLD, 0) ; // i n i z i a l i z z o alcune v a r i a b i l i p = nproc ; row = s q r t ( ( double ) p ) ; / Controllo quadrato perfetto / i f ( ( int ) (pow ( ( double ) ( row ), 2 ) )!= p ) { f p r i n t f ( s t d e r r, "\nquitting. Number of process Must Be a perfect square \n" ) ; MPI_Abort(MPI_COMM_WORLD, 0) ; c o l = row ; //parametri della g r i g l i a bidimensionale ndim [ 0 ] = row ; ndim [ 1 ] = c o l ; p e r i o d [ 0 ] = p e r i o d [ 1 ] = 0 ; r e o r d e r = 0 ; a = N / s q r t ( ( double ) p ) ; b = s q r t ( ( double ) p ) ; 15
20 Somma N numeri in MPI int temp11 = ( int ) malloc ( s i z e o f ( int ) N) ; int temp22 = ( int ) malloc ( s i z e o f ( int ) a ) ; int b l o c c o = ( int ) malloc ( s i z e o f ( int ) a a ) ; int A_ricc = ( int ) malloc ( s i z e o f ( int ) N a ) ; int x_ric = ( int ) malloc ( s i z e o f ( int ) a ) ; int somma_parz = ( int ) malloc ( s i z e o f ( int ) a ) ; int somma_tot = ( int ) malloc ( s i z e o f ( int ) a ) ; int x = ( int ) malloc ( s i z e o f ( int ) N) ; int A_lin = ( int ) malloc ( s i z e o f ( int ) N N) ; int somma_par = ( int ) malloc ( s i z e o f ( int ) N) ; //Alloco variabile per risultato sequenziale int r e s u l t _ s e q = ( int ) malloc ( s i z e o f ( int ) N) ; // costruisco la matrice da inviare a blocchi i f (menum == MASTER) { / Alloco matrice da inviare e vettore in cui linearizzo la matrice / int A = ( int ) malloc ( s i z e o f ( int ) N) ; for ( k = 0 ; k < N; k++) { A[ k ] = ( int ) malloc ( s i z e o f ( int ) N) ; // printf ("\ nmatrice da inviare a blocchi \n") ; / Riempio la matrice con numeri casuali da zero a trenta / srand ( time (NULL) ) ; for ( i = 0 ; i < N; i ++) { for ( j = 0 ; j < N; j++) { A[ i ] [ j ] = ( int ) ( rand ( ) % 30) ; // printf("%d ", A[ i ] [ j ] ) ; //genero vettore x random x [ i ] = ( int ) ( rand ( ) %30) ; 16
21 Somma N numeri in MPI // printf ("\n") ; // printf ("\nvettore x : ") ; //for ( i = 0; i < N; i++) { // printf("%d ", x [ i ] ) ; // // printf ("\n") ; for ( i = 0 ; i < N; i ++){ r e s u l t _ s e q [ i ]=0; // i n i z i a l i z z o ogni elemento del vettore for ( j = 0 ; j < N; j++) r e s u l t _ s e q [ i ]= r e s u l t _ s e q [ i ]+A[ i ] [ j ] x [ j ] ; p r i n t f ( "\n\nrisultato FINALE sequenziale\n" ) ; for ( i =0; i <N; i ++) p r i n t f ( "%d ", r e s u l t _ s e q [ i ] ) ; p r i n t f ( "\n" ) ; // linearizzo la matrice i =0; for ( k = 0 ; k < N; k++) { for ( j = 0 ; j < N; j++) { A_lin [ i ] = A[ k ] [ j ] ; i ++; / Dealloco la matrice i n i z i a l e / for ( i =0; i <N; i ++) f r e e (A[ i ] ) ; f r e e (A) ; // free ( result_seq ) ; // fine MASTER 17
22 Somma N numeri in MPI MPI_Barrier (MPI_COMM_WORLD) ; / I n i z i a l i z z a z i o n e Tempi / t0 = MPI_Wtime ( ) ; //creo una g r i g l i a 2D MPI_Cart_create (MPI_COMM_WORLD, dim, ndim, period, r e o r d e r, &comm2d) ; //prendo i l rank del processo in esecuzione MPI_Comm_rank(comm2D, &menum2d) ; //prendo le coordinate del processo in esecuzione MPI_Cart_coords (comm2d, menum2d, dim, c o o r d i n a t e ) ; // s o t t o g r i g l i a di colonne b e l o n g s [ 0 ] = 1 ; b e l o n g s [ 1 ] = 0 ; MPI_Cart_sub (comm2d, belongs, &commcol) ; // s o t t o g r i g l i a di righe rows [ 0 ] = 0 ; rows [ 1 ] = 1 ; MPI_Cart_sub (comm2d, rows, &commrow) ; //prendo i l rank del processo in esecuzione MPI_Comm_rank(commRow, &merow) ; //prendo le coordinate del processo in esecuzione MPI_Cart_coords (commrow, merow, dim, coo_row ) ; // invio la matrice linearizzata per blocchi di righe a l l a prima colonna della g r i g l i a MPI_Scatter ( A_lin, N a, MPI_INT, A_ricc, N a, MPI_INT, 0, commcol) ; // invio i l vettore x in blocchi a l l a prima riga MPI_Scatter ( x, a, MPI_INT, x_ric, a, MPI_INT, 0, commrow) ; // invio in broadcast lungo le colonne i l blocco x presente nella prima riga MPI_Bcast ( x_ric, a, MPI_INT, 0, commcol) ; MPI_Barrier (MPI_COMM_WORLD) ; 18
23 Somma N numeri in MPI k = 0 ; //una scatter per riga ricevuta dai processori della prima colonna for ( i = 0 ; i < a ; i ++) { //solo g l i P0 della prima colonna della g r i g l i a crea i l vettore per la scatter i f (merow == 0) { // costruisco i l vettore temporaneo da inviare for ( q = N i ; q < N ( i + 1) ; q++) { temp11 [ q N i ] = ( int ) A_ricc [ q ] ; MPI_Scatter ( temp11, a, MPI_INT, temp22, a, MPI_INT, 0, commrow) ; for ( j = k ; j < k+a ; j++) b l o c c o [ j ] = temp22 [ j k ] ; k = k + a ; MPI_Barrier (MPI_COMM_WORLD) ; // i n i z i a l i z z o somma_parz for ( i = 0 ; i < a ; i ++) { somma_parz [ i ] = 0 ; //ogni cpu deve eseguire la propria somma parziale k=0; for ( i = 0 ; i < a ; i ++) { p = 0 ; for ( j = k ; p < a ; j++) { somma_parz [ i ] = somma_parz [ i ] + b l o c c o [ j ] x_ric [ j k ] ; p++; 19
24 Somma N numeri in MPI k = k + a ; MPI_Barrier (MPI_COMM_WORLD) ; MPI_Reduce( somma_parz, somma_tot, a, MPI_INT, MPI_SUM, MASTER, commrow) ; / Fine Tempi / t1 = MPI_Wtime ( ) ; MPI_Gather ( somma_tot, a, MPI_INT, somma_par, a, MPI_INT, MASTER, commcol) ; / i f (merow == 0) { //stampo i valori ricevuti printf ("Sono %d con coordinate (%d, %d) ho la parte di y:\n", menum2d, coordinate [ 0 ], coordinate [ 1 ] ) ; for ( i = 0; i < a ; i++) { printf("%d ", somma_tot[ i ] ) ; printf ("\n") ; / t e = 1. e6 ( t1 t0 ) ; MPI_Reduce(& te,& t_ fin, 1,MPI_DOUBLE,MPI_MAX, 0,MPI_COMM_WORLD) ; i f (menum == MASTER) { p r i n t f ( "\n\nrisultato FINALE parallelo \n" ) ; for ( i =0; i <N; i ++) p r i n t f ( "%d ", somma_par [ i ] ) ; 20
25 Somma N numeri in MPI p r i n t f ( "\n" ) ; / Check di controllo per la prodotto / int f l a g = 0 ; for ( i =0; i <N; i ++){ i f ( r e s u l t _ s e q [ i ]!= somma_par [ i ] ) { p r i n t f ( "\nerrore nel prodotto parallelo " ) ; f l a g =1; i=n; i f ( f l a g == 0) p r i n t f ( "\nverifica OK" ) ; p r i n t f ( "\n\ntempo d esecuzione : %f usecondi\n\n", t _ f i n ) ; //Dealloco f r e e ( x_ric ) ; f r e e ( somma_parz ) ; f r e e ( somma_tot ) ; f r e e ( temp11 ) ; f r e e ( temp22 ) ; f r e e ( b l o c c o ) ; f r e e ( A_ricc ) ; f r e e ( x ) ; f r e e ( A_lin ) ; f r e e ( r e s u l t _ s e q ) ; MPI_Finalize ( ) ; return 0 ; implementazione dell algoritmo in C 21
26 Bibliografia Gnuplot. Gnuplot. URL: Almerico Murli. Lezioni di Calcolo Parallelo. Liguori Editore. 22
Prodotto Matrice - Vettore in MPI II Strategia
Facoltà di Ingegneria Corso di Studi in Ingegneria Informatica Esercitazione di Calcolo Parallelo Prodotto Matrice - Vettore in MPI II Strategia Anno Accademico 2010/2011 Prof.ssa Alessandra D'alessio
DettagliSomma di un array di N numeri in MPI
Facoltà di Ingegneria Corso di Studi in Ingegneria Informatica Esercitazione di Calcolo Parallelo Somma di un array di N numeri in MPI Anno Accademico 2010/2011 Prof.ssa Alessandra D'alessio Candidati
DettagliA.d'Alessio. Calcolo Parallelo. Esempi di topologie
Message Passing Interface MPI Le topologie 1 Esempi di topologie Anello Griglia Toro L utilizzo di una topologia per la progettazione di un algoritmo in ambiente MIMD è spesso legata alla geometria intrinseca
DettagliUniversità degli Studi di Napoli Parthenope. Corso di Calcolo Parallelo e Distribuito. Virginia Bellino Matr. 108/1570
Università degli Studi di Napoli Parthenope Corso di Calcolo Parallelo e Distribuito Virginia Bellino Matr. 108/1570 Virginia Bellino Progetto 1 Corso di Calcolo Parallelo e Distribuito 2 Indice Individuazione
DettagliLe topologie. Message Passing Interface MPI Parte 2. Topologie MPI. Esempi di topologie. Definizione: topologia. Laura Antonelli
Topologie MPI Message Passing Interface MPI Parte 2 Le topologie. Laura Antonelli 1 2 Esempi di topologie Definizione: topologia Una topologia è la geometria virtuale in cui si immaginano disposti i processi
DettagliUNIVERSITA DEGLI STUDI DI NAPOLI FEDERICO II
UNIVERSITA DEGLI STUDI DI NAPOLI FEDERICO II PROGETTO DI CALCOLO PARALLELO PRODOTTO MATRICE VETTORE STUDENTE Gabriele Piantadosi (885/000282) 1. OBIETTIVI E AMBIENTE DI CALCOLO Si vuole distribuire un
DettagliCalcolo Parallelo. Domanda. In particolare. Qual è l algoritmo parallelo. PROBLEMA: Prodotto Matrice-Vettore
Calcolo Parallelo Algoritmi Paralleli per il prodotto Matrice-Vettore Laura Antonelli PROBLEMA: Prodotto Matrice-Vettore Progettazione di un algoritmo parallelo per architettura MIMD a memoria distribuita
DettagliLaboratorio di Calcolo Parallelo
Laboratorio di Calcolo Parallelo Lezione : Aspetti avanzati ed esempi in MPI Francesco Versaci & Alberto Bertoldo Università di Padova 6 maggio 009 Francesco Versaci (Università di Padova) Laboratorio
DettagliUNIVERSITA DEGLI STUDI DI NAPOLI FEDERICO II
UNIVERSITA DEGLI STUDI DI NAPOLI FEDERICO II PROGETTO DI CALCOLO PARALLELO SOMMA DEGLI ELEMENTI DI UN VETTORE STUDENTE Gabriele Piantadosi (885/000282) 1. OBIETTIVI E AMBIENTE DI CALCOLO Si vuole distribuire
DettagliAlcuni strumenti per lo sviluppo di software su architetture MIMD
Alcuni strumenti per lo sviluppo di software su architetture MIMD Calcolatori MIMD Architetture SM (Shared Memory) OpenMP Architetture DM (Distributed Memory) MPI 2 1 Message Passing Interface MPI www.mcs.anl.gov./research/projects/mpi/
DettagliAlcuni strumenti per lo sviluppo di software su architetture MIMD
Alcuni strumenti per lo sviluppo di software su architetture MIMD Calcolatori MIMD Architetture SM (Shared Memory) OpenMP Architetture DM (Distributed Memory) MPI 2 MPI : Message Passing Interface MPI
DettagliProgramma della 1 sessione di laboratorio
Programma della 1 sessione di laboratorio Familiarizzare con l ambiente MPI Hello World in MPI (Esercizio 1) Esercizi da svolgere Send/Receive di un intero e di un array di float (Esercizio 2) Calcolo
DettagliModello di sviluppo della popolazione: Matrice di Leslie
Modello di sviluppo della popolazione: Matrice di Leslie April 24, 2007 1 Scopo del progetto Lo scopo è quello di creare un programma parallelo in grado di fare una stima di quale sarà la popolazione in
DettagliLaboratorio di Algoritmi e Strutture Dati Ingegneria e Scienze Informatiche - Cesena A.A
Ingegneria e Scienze Informatiche - Cesena A.A. 2014-2015 pietro.dilena@unibo.it MergeSort MergeSort MergeSort: esempio MergeSort: pseudocodice Algoritmo di ordinamento ricorsivo basato sulla tecnica Divide
DettagliSistemi Operativi (M. Cesati)
Sistemi Operativi (M. Cesati) Compito scritto del 9 luglio 2012 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare tutti
DettagliMPI è una libreria che comprende:
1 Le funzioni di MPI MPI è una libreria che comprende: Funzioni per definire l ambiente Funzioni per comunicazioni uno a uno Funzioni percomunicazioni collettive Funzioni peroperazioni collettive 2 1 3
DettagliAlcuni strumenti per lo sviluppo di software su architetture MIMD
Alcuni strumenti per lo sviluppo di software su architetture MIMD Calcolatori MIMD Architetture SM (Shared Memory) OpenMP Architetture DM (Distributed Memory) MPI 2 MPI : Message Passing Interface MPI
DettagliARRAY DI PUNTATORI. ARRAY DI PUNTATORI Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di puntatori
ARRAY DI PUNTATORI Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di puntatori Ad esempio: char * stringhe[4]; definisce un vettore di 4 puntatori a carattere
DettagliMPI Quick Refresh. Super Computing Applications and Innovation Department. Courses Edition 2017
MPI Quick Refresh Super Computing Applications and Innovation Department Courses Edition 2017 1 Cos è MPI MPI acronimo di Message Passing Interface http://www.mpi-forum.org MPI è una specifica, non un
DettagliCompiti di un ambiente sw per il C.D. NetSolve: un ambiente per il calcolo distribuito. gestire gli accessi alle risorse. gestire l eterogeneita
Compiti di un ambiente sw per il C.D. NetSolve: un ambiente per il calcolo distribuito gestire gli accessi alle risorse gestire l eterogeneita gestire la dinamicita http://icl.cs.utk.edu/netsolve A. Murli
DettagliProgrammazione I - Laboratorio
Programmazione I - Laboratorio Esercitazione 3 - Array Gianluca Mezzetti 1 Paolo Milazzo 2 1. Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ mezzetti mezzetti di.unipi.it 2. Dipartimento
DettagliPrimi Programmi con MPI 1
Il cluster che usiamo: spaci Esercitazione: Primi Programmi con MPI http://www.na.icar.cnr.it/grid/#spacina Spacina è un cluster HP XC 6000 / Linux a 64 nodi biprocessore. La configurazione hardware dei
DettagliNon ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di
ARRAY DI PUNTATORI Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di puntatori Ad esempio: char * stringhe[4]; definisce un vettore di 4 puntatori a carattere
DettagliCorso di Informatica A.A
Corso di Informatica A.A. 2009-2010 Lezione 12 Corso di Informatica 2009-2010 Lezione 12 1 Allocazione dinamica della memoria La funzione calloc() La funzione calloc() alloca memoria dinamicamente. Numero
Dettaglidefinisce un vettore di 4 puntatori a carattere (allocata memoria per 4 puntatori)!
" Non ci sono vincoli sul tipo degli elementi di un vettore " Possiamo dunque avere anche vettori di puntatori Ad esempio: char * stringhe[4]; definisce un vettore di 4 puntatori a carattere (allocata
DettagliFondamenti di Programmazione
A.A. 08/09 Fondamenti di Programmazione (canale E-O) Docente: Prof.ssa Tiziana Calamoneri calamo@di.uniroma1.it Esercitatore: Dott. Roberto Petroccia petroccia@di.uniroma1.it Pagina del corso: http://twiki.di.uniroma1.it/twiki/view/programmazione1/eo/webhome
DettagliSomma di un array di N numeri in MPI
Facoltà di Ingegneria Corso di Studi in Ingegneria Informatica Elaborato di Calcolo Parallelo Somma di un array di N numeri in MPI Anno Accademico 2011/2012 Professoressa Alessandra D Alessio Studenti
DettagliAlcuni strumenti per lo sviluppo di software su architetture MIMD
Alcuni strumenti per lo sviluppo di software su architetture MIMD Calcolatori MIMD Architetture SM (Shared Memory) OpenMP Architetture DM (Distributed Memory) MPI 2 MPI : Message Passing Interface MPI
DettagliSistemi Operativi (M. Cesati)
Sistemi Operativi (M. Cesati) Compito scritto del 13 febbraio 2017 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare
DettagliLezione 8: Stringhe ed array multidimensionali
Lezione 8: Stringhe ed array multidimensionali Vittorio Scarano Corso di Laurea in Informatica Università degli Studi di Salerno Struttura della lezione AVVISO: la lezione di laboratorio di 28/5 non si
Dettagli1 (12) 2 (6) 3 (4) 4 (4) 5 (6)
CORSO DI LAUREA IN INGEGNERIA ELETTRICA, CHIMICA e MATERIALI Informatica B, C Anno Accademico 2013-2014 Proff. Danilo ARDAGNA, Antonio MIELE Primo appello 14.7.2014 Cognome Nome Matricola Firma Durata:
DettagliLaboratorio di Calcolo Numerico Laboratorio 8: Vettori e Matrici
Laboratorio di Calcolo Numerico Laboratorio 8: Vettori e Matrici Claudia Zoccarato E-mail: claudia.zoccarato@unipd.it Dispense: Moodle Dipartimento ICEA 03 Maggio 2017 Richiami In MATLAB, ogni variabile
DettagliIntroduzione al C Lez. 4
Introduzione al C Lez. 4 Allocazione Dinamica della memoria http://www.di.unipi.it/~rossano/algo1/lez4.pdf Allocazione dinamica memoria In C la memoria può essere anche gestita in modo dinamico, attraverso
DettagliLinguaggio C: Array Valeria Cardellini
Linguaggio C: Array Valeria Cardellini Corso di Calcolatori Elettronici A.A. 2018/19 Università degli Studi di Roma Tor Vergata Dipartimento di Ingegneria Civile e Ingegneria Informatica Array in C q Dichiarazione
DettagliGli array. slides credit M. Poneti
Gli array slides credit M. Poneti Vettori nome del vettore (tutti gli elementi hanno lo stesso nome, c) Vettore (Array) Gruppo di posizioni (o locazioni di memoria) consecutive Hanno lo stesso nome e lo
DettagliGestione dinamica della memoria
Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 Gestione dinamica della memoria Pietro Di Lena - pietro.dilena@unibo.it A pessimistic programmer sees the array as half empty.
DettagliMPI: comunicazioni collettive
- g.marras@cineca.it Gruppo Supercalcolo - Dipartimento Sistemi e Tecnologie 29 settembre 5 ottobre 2008 Collective Communications -Communications involving a group of process -Called by all processes
DettagliIL PRIMO PROGRAMMA IN C
IL PRIMO PROGRAMMA IN C LO SCOPO Si vuole scrivere un programma in linguaggio C che chieda all utente di introdurre da tastiera due numeri interi e visualizzi il valore della loro somma sul video SOLUZIONE
DettagliEsercizi Programmazione I
Esercizi Programmazione I Novembre 06 Esercizio Valutazione espressioni con puntatori Valutare e definire il tipo delle seguenti espressioni. Inserire le parentesi per sotolineare l ordine della valutazione
DettagliProblema. Vettori e matrici. Vettori. Vettori
e matrici Ver. 2.4 2010 - Claudio Fornaro - Corso di programmazione in C Problema Si vuole un programma che chieda 10 numeri dalla tastiera e li visualizzi dall ultimo al primo Soluzione attuale (con le
DettagliLezione 21 e 22. Valentina Ciriani ( ) Laboratorio di programmazione. Laboratorio di programmazione. Lezione 21 e 22
Lezione 21 e 22 - Allocazione dinamica delle matrici - Generazione di numeri pseudocasuali - Funzioni per misurare il tempo - Parametri del main - Classificazione delle variabili Valentina Ciriani (2005-2008)
DettagliCorso di High Performance Computing
Ultimo aggiornamento: 2018-11-20 Corso di High Performance Computing Esercitazione MPI del 20/11/2018 Moreno Marzolla Per svolgere l'esercitazione è possibile collegarsi al server isi-raptor03csruniboit
DettagliLaboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2007/2008
Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2007/2008 Dott.Davide Di Ruscio Dipartimento di Informatica Università degli Studi di L Aquila Lezione del 24/04/08 Nota Questi lucidi sono tratti
DettagliLo scopo. Il primo esperimento. Soluzione informale. Le variabili
Lo scopo 2 Il primo esperimento Si vuole scrivere un programma in linguaggio C che chieda all utente di introdurre da tastiera due numeri interi e visualizzi il valore della loro somma sul video Ver. 2.4
DettagliPrincipali strumenti per lo sviluppo di algoritmi in pascal-like. concetti universali presenti in tutti i linguaggi di programmazione
LABORATORIO DI PROGRAMMAZIONE Corso di laurea in matematica 12 LA COMPLESSITA COMPUTAZIONALE Marco Lapegna Dipartimento di Matematica e Applicazioni Universita degli Studi di Napoli Federico II wpage.unina.it/lapegna
DettagliCapitolo 10 - Strutture
1 Capitolo 10 - Strutture Strutture In molte situazioni, una variabile non è sufficiente per descrivere un oggetto. Ad esempio, una posizione sul piano cartesiano è identificata da due coordinate, e la
DettagliEsercizi di MatLab. Sommario Esercizi di introduzione a MatLab per il corso di Calcolo Numerico e Laboratorio, A.A
Esercizi di MatLab Sommario Esercizi di introduzione a MatLab per il corso di Calcolo Numerico e Laboratorio, AA 2017 2018 Gli esercizi sono divisi in due gruppi: fondamentali ed avanzati I primi sono
DettagliProgrammazione I (Classe 1)
Programmazione I (Classe 1) Primo appello (prima prova) 27 Giugno 2016 Docenti: De Prisco - Deufemia - Zizza Cognome: Nome: Matricola: Ritirato 1 Esercizi (leggere attentamente il testo prima di scrivere
DettagliAlgoritmi paralleli per la moltiplicazione di matrici
UNIVERSITA CA FOSCARI VENEZIA Facoltà di Scienze Matematiche, Fisiche e Naturali Corso di Laurea in Informatica Progetto di Calcolo Parallelo Prof. S. Orlando Algoritmi paralleli per la moltiplicazione
DettagliEsercitazione di Reti degli elaboratori
Esercitazione di Prof.ssa Chiara Petrioli Christian Cardia, Gabriele Saturni Cosa vedremo in questa lezione? Gli Array Gli array multidimensionali Le stringhe I puntatori Esercizi Pagina 1 Gli Array Definizione
DettagliEsercitazione 6. Array
Esercitazione 6 Array Arrays Array (o tabella o vettore): è una variabile strutturata in cui è possibile memorizzare un numero fissato di valori tutti dello stesso tipo. Esempio int a[6]; /* dichiarazione
DettagliProgrammazione C: Esercizi su vettori e funzioni. Titolo presentazione. sottotitolo. Milano, XX mese 20XX
Titolo presentazione Programmazione C: sottotitolo Esercizi su vettori e funzioni Milano, XX mese 20XX Informatica ed Elementi di Informatica Medica Agenda Richiami su vettori e funzioni Esercizi su vettori
DettagliC: panoramica. Violetta Lonati
C: panoramica Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010 Violetta Lonati
DettagliEsercizi sulla rappresentazione compatta di matrici sparse
Esercizi sulla rappresentazione compatta di matrici sparse Esercizio 1 Generare due matrici sparse A e B, di dimensione nxn, a banda, simmetrica sullo skyline ma non sui valori, con banda compresa tra
DettagliProgetti su più File Array e Funzioni
- DEIS - Facoltà di Ingegneria - Università di Bologna Elementi di informatica LA Corso di laurea in Ingegneria Elettrica - Anno Accademico 2007-2008 Progetti su più File Array e Funzioni ESERCIZIO 1 Scrivere
DettagliIntroduzione al C Lez. 4. Allocazione Dinamica della memoria
Introduzione al C Lez. 4 Allocazione Dinamica della memoria Allocazione dinamica memoria In C la memoria può essere anche gestita in modo dinamico, attraverso l allocazione esplicita di blocchi di memoria
DettagliConcetti chiave. Gli Array o Vettori. Array Elementi dell array Indici e lunghezza dell array Inizializzazione di vettori Array multidimensionali
Concetti chiave Gli Array o Vettori Array Elementi dell array Indici e lunghezza dell array Inizializzazione di vettori Array multidimensionali Fino ad ora abbiamo utilizzato variabili scalari, ossia riferite
DettagliIEIM Esercitazione X Ripasso: array, puntatori, ricorsione. Alessandro A. Nacci -
IEIM 2015-2016 Esercitazione X Ripasso: array, puntatori, ricorsione Alessandro A. Nacci alessandro.nacci@polimi.it - www.alessandronacci.it 1 Ripasso su array e puntatori 1 Ripasso su array e puntatori
DettagliPRIMA ESPERIENZA SIMULAZIONE DEL MOTO PARABOLICO DI UN PROIETTILE, PALLONE, (APPROSSIMATO COME PUNTO MATERIALE) SOGGETTO ALLA SOLA FORZA DI GRAVITA
PRIMA ESPERIENZA SIMULAZIONE DEL MOTO PARABOLICO DI UN PROIETTILE, PALLONE, (APPROSSIMATO COME PUNTO MATERIALE) SOGGETTO ALLA SOLA FORZA DI GRAVITA Elementi di Informatica e Programmazione Università di
Dettagli3. Matrici e algebra lineare in MATLAB
3. Matrici e algebra lineare in MATLAB Riferimenti bibliografici Getting Started with MATLAB, Version 7, The MathWorks, www.mathworks.com (Capitolo 2) Mathematics, Version 7, The MathWorks, www.mathworks.com
Dettagli1. Calcolo dell indice di condizionamento di una matrice
1 Esercizi sul condizionamento con matlab laboratorio di Calcolo Scientifico per Geofisici Prof. A. Murli a.a. 2006/07 1. Calcolo dell indice di condizionamento di una matrice Determinare una function
DettagliNB: sono richieste almeno 4 risposte esatte per la correzione delle domande aperte
7 Lug 17 MATRICOLA COGNOME NOME PUNTEGGI PER LE VARIE DOMANDE: Domande aperte: A: 6, B: 9, C: 9 Scelta multipla: 1.5 punti per ogni risposta esatta DURANTE IL COMPITO E AMMESSO SOLO L USO DI STRUMENTI
DettagliFondamenti di Informatica Ing. Biomedica
Fondamenti di Informatica Ing. Biomedica Esercitazione n.8 Matrici Antonio Arena antonio.arena@ing.unipi.it Fondamenti di Informatica - Esercitazione n.8 2 Matrici In C++ viene trattata come array multi-dimesionale.
DettagliMOLTIPLICAZIONE TRA MATRICI
MOLTIPLICAZIONE TRA MATRICI Riccardo Fontanini Consegna Implementare un programma C che sfrutti la GPU per eseguire una moltiplicazione tra due matrici utilizzando la shared memory. Inoltre adattare il
DettagliEsempi di programmi. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa E01. A. Miola Settembre 2007
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa E01 Esempi di programmi A. Miola Settembre 2007 http://www.dia.uniroma3.it/~java/fondinf1/ Esempi di programmi - 1 1 Contenuti
DettagliLe strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune.
Le strutture Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune. Dichiarazione di una struttura: struct point { int x; int y; }; La dichiarazione di una struttura
Dettagliint main(){ int numero; /* numero di cui voglio calcolare il fattoriale */ int fatt; /* memorizzo il fattoriale di numero */ int somma=0;
Problema: CALCOLARE LA SOMMA DEI FATTORIALI DEI PRIMI 100 NUMERI NATURALI 0!+1!+2! + 99! #include int fattoriale(int); Calcolo fattoriale int main(){ int numero; /* numero di cui voglio calcolare
DettagliEsercizi C su array e matrici
Politecnico di Milano Esercizi C su array e matrici Massimo, media e varianza,, ordinamento, ricerca e merge, matrice simmetrica, puntatori Array Array o vettore Composto da una serie di celle int vett[4]
DettagliLaboratorio di Matematica e Informatica 1
Laboratorio di Matematica e Informatica 1 Matteo Mondini Antonio E. Porreca matteo.mondini@gmail.com porreca@disco.unimib.it Dipartimento di Informatica, Sistemistica e Comunicazione Università degli Studi
DettagliInformatica B. Facoltà di Ingegneria Industriale Laurea in Ingegneria Energetica, Meccanica e dei Trasporti. Prof. Marco Masseroli
Facoltà di Ingegneria Industriale Laurea in Ingegneria Energetica, Meccanica e dei Trasporti Dipartimento di Elettronica e Informazione Informatica B Prof. Marco Masseroli Indice Laboratorio 4: Linguaggio
DettagliPuntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata
Puntatori int i = 10; int * pi = &i; pi i = 10 116 int * pi = pi contiene un informazione che mi permette di accedere ( puntare ) ad una variabile intera Un puntatore contiene un numero che indica la locazione
DettagliELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli
ELEMENTI DI INFORMATICA L-B Ing. Claudia Chiusoli Materiale Lucidi delle lezioni Date degli appelli Testi di esami precedenti Informazioni e contatti http://www.lia.deis.unibo.it/courses/ Programma del
DettagliI tipi strutturati e i record in C++
I tipi strutturati e i record in C++ Docente: Ing. Edoardo Fusella Dipartimento di Ingegneria Elettrica e Tecnologie dell Informazione Via Claudio 21, 4 piano laboratorio SECLAB Università degli Studi
DettagliCicli annidati ed Array multidimensionali
Linguaggio C Cicli annidati ed Array multidimensionali Cicli Annidati In C abbiamo 3 tipi di cicli: while(exp) { do { while(exp); for(exp;exp;exp3) { Cicli annidati: un ciclo all interno del corpo di un
DettagliARRAY E TYPEDEF. A volte è utile definire un nuovo tipo di dato come array. Si usa la solita sintassi del linguaggio C
A volte è utile definire un nuovo tipo di dato come array. Si usa la solita sintassi del linguaggio C Es typedef ; typedef char stringa[10]; dichiara che il tipo stringa è un array
DettagliInformatica (A-K) 5. Algoritmi e pseudocodifica
Vettori e matrici #1 Informatica (A-K) 5. Algoritmi e pseudocodifica Corso di Laurea in Ingegneria Civile & Ambientale A.A. 2011-2012 2 Semestre Prof. Giovanni Pascoschi Le variabili definite come coppie
DettagliFondamenti di Informatica 2
Fondamenti di Informatica 2 della prova scritta del 14 Febbraio 2006 Esercizio 1 (4 punti) Formulare la seguente istruzione del linguaggio C utilizzando il costrutto while: for(i=0,j=n-1; i
DettagliLABORATORIO DI INFORMATICA ESERCITAZIONE VIII
LABORATORIO DI INFORMATICA ESERCITAZIONE VIII Cercate di eseguire gli esercizi da soli. Se non ci riuscite, cercate di capire i messaggi di errore. Se non ci riuscite, provateci di nuovo. Poi chiamate
DettagliFondamenti di Programmazione
A.A. 08/09 Fondamenti di Programmazione (canale E-O) Docente: Prof.ssa Tiziana Calamoneri calamo@di.uniroma1.it Esercitatore: Dott. Roberto Petroccia petroccia@di.uniroma1.it Pagina del corso: http://twiki.di.uniroma1.it/twiki/view/programmazione1/eo/webhome
DettagliFondamenti di Informatica 6. Algoritmi e pseudocodifica
Vettori e matrici #1 Fondamenti di Informatica 6. Algoritmi e pseudocodifica Corso di Laurea in Ingegneria Civile A.A. 2010-2011 1 Semestre Prof. Giovanni Pascoschi Le variabili definite come coppie
DettagliMultidimensionali. Array Multidimensionali. Tipi di array. Matrice: array bidimensionale. Array multidimensionale. Dichiarazione di una matrice
Tipi di array Array Multidimensionali Antonella Santone Monodimensionali (vettore) Multidimensionali Array multidimensionale Un array multidimensionale è un array, i cui elementi sono a loro volta degli
DettagliProdotto Matrice - Vettore in MPI
Facoltà di Ingegneria Corso di Studi in Ingegneria Informatica Elaborato di Calcolo Parallelo Prodotto Matrice - Vettore in MPI Anno Accademico 2011/2012 Professoressa Alessandra D Alessio Studenti Definizione
DettagliMai fidarsi. int main() { int a,i=2; a = 1*abs(i 1); printf ( "%d\n", a); } $ gcc W Wall o first main.c $./first 1
Mai fidarsi int main() { int a,i=2; a = 1*abs(i 1); printf ( "%d\n", a); } $ gcc W Wall o first main.c $./first 1 $ gcc fno builtin o second main.c $./second 1 compilatore dipendente Bcast Vediamo la soluzione
DettagliPolitecnico di Milano Facoltà di Ingegneria Civile, Ambientale e Territoriale. Informatica B [079904]
Politecnico di Milano Facoltà di Ingegneria Civile, Ambientale e Territoriale Informatica B [079904] Prof. P. Plebani Allievi Ingegneria Civile e Ambientale II prova in itinere (04 Febbraio 2009) Cognome
DettagliEsercizio 1 (15 punti)
Esercizio 1 (15 punti) Corsi di laurea in Ingegnera Elettronica e Ingegneria Gestionale Fondamenti di Programmazione / Fondamenti di Informatica I Prova scritta del 30 giugno 2017 In un lontano paese da
DettagliL Allocazione Dinamica della Memoria
L Allocazione Dinamica della Memoria Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania mpalesi@diit.unict.it http://www.diit.unict.it/users/mpalesi Sommario Questo documento
DettagliEsempi di programmazione in C
Esempi di programmazione in C Problemi elementari..................................... 363 Somma tra due numeri positivi......................... 363 Moltiplicazione di due numeri positivi attraverso la
DettagliCalcolo parallelo. Una sola CPU (o un solo core), per quanto potenti, non sono sufficienti o richiederebbero tempi lunghissimi.
Calcolo parallelo Ci sono problemi di fisica, come le previsioni meteorologiche o alcune applicazioni grafiche, che richiedono un enorme potenza di calcolo. Una sola CPU (o un solo core), per quanto potenti,
DettagliIntroduzione a MPI Algoritmi e Calcolo Parallelo. Daniele Loiacono
Introduzione a MPI Algoritmi e Calcolo Parallelo Riferimenti! Tutorial on MPI Lawrence Livermore National Laboratory https://computing.llnl.gov/tutorials/mpi/ Cos è MPI? q MPI (Message Passing Interface)
DettagliIntroduzione a MATLAB
Università degli Studi di Napoli Federico II CdL Ing. Elettrica Corso di Laboratorio di Circuiti Elettrici Introduzione a MATLAB Lezione n. Dr. Carlo Petrarca Dipartimento di Ingegneria Elettrica e Tecnologie
DettagliFondamenti di Informatica 2
Fondamenti di Informatica 2 della prova scritta del 25 Luglio 2006 Esercizio 1 (4 punti) Date le seguenti variabili int A[] = 2,3,7,-2,5,-8,-4; int N = 7; int i; Scrivere la porzione di codice che sostituisca
DettagliFondamenti di Informatica
Vettori e matrici #1 Le variabili definite come coppie sono dette variabili scalari Fondamenti di Informatica 5. Algoritmi e pseudocodifica Una coppia è una variabile
DettagliLab 2 Info B. Diego Carrera Ing. Gian Enrico Conti 7 Novembre 2016
Lab 2 Info B Diego Carrera diego.carrera@polimi.it Ing. Gian Enrico Conti gianenrico.conti@mail.polimi.it 7 Novembre 2016 Per macchine PoliMI https://virtualdesktop.polimi.it 2 Richiami: Stringhe Le stringhe
DettagliEsame di Informatica Generale 9 CFU 19 Aprile 2011 Professori: Carulli, Fiorino, Mazzei
9cfu 19 aprile Soluzioni.doc 1/14 22/04/2011 17.39.25 Esame di Informatica Generale 9 CFU 19 Aprile 2011 Professori: Carulli, Fiorino, Mazzei Docente Risultati Scritto Orali Carulli Me 27/04/11 ore 15:00
DettagliCostruiamo un'immagine o qualcosa di simile.
Costruiamo un'immagine...... o qualcosa di simile. Se consideriamo la C che si trova in fondo a destra, ci accorgiamo che un'immagine non è altro che una tabella di valori. Nel caso in cui si consideri
Dettagli