Somma di un array di N numeri in MPI

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Somma di un array di N numeri in MPI"

Transcript

1 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 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 12 Bibliografia 17 i

3 Elenco delle figure 2.1 Disegno II Strategia 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 Sviluppare un algoritmo per il calcolo della somma di N numeri in ambiente di calcolo parallelo su architettura MIMD a memoria distribuita, che utilizzi la libreria MPI. Per la comunicazione dei risultati finali, tale algoritmo utilizzerà la 2 a strategia, la quale prevede che, al termine della computazione, il risultato finale sia presente in un unico processore prestabilito. 1

6 Capitolo 2 Descrizione Algoritmo 2.1 Descrizione La nostra implementazione dell algoritmo è basata sulla seconda strategia. In essa ogni processore calcola la sua somma parziale si e poi a coppie distinte i processori comunicano tra di loro le somme calcolate, cioè un processore invia all altro la sua somma parziale. Il risultato finale ovviamente è nel processo Master (cioè p0). Ad esempio, supponendo di avere a disposizione p = 4 processori, l applicazione della seconda strategia può essere schematizzata nel modo seguente: 2

7 Figura 2.1: Disegno II Strategia Come si può notare, nel primo passo i processori P1 e P3 inviano le loro somme parziali rispettivamente a P0 e a P2. Nel secondo passo invece, sarà soltanto il processore P0 che avrà il risultato finale. Rispetto alla prima strategia, questo algoritmo ha sicuramente il vantaggio di dimezzare i passi temporali per giungere al risultato e di fare in modo che, in ciascun passo, coppie distinte di processori operino concorrentemente. Tuttavia, l indubbio svantaggio è quello di avere uno sbilanciamento nel carico di lavoro dei processori, poiché risulta che ad ogni passo parte dei processori rimane inattiva, e alla fine è attivo soltanto il processore che contiene il risultato. Rispetto alla terza strategia invece, le differenze sono praticamente nulle, tranne per il fatto che, alla fine, nella terza strategia il risultato si trova in tutti i processori. La nostra implementazione funziona così: Calcoliamo la dimensione dei chunk dell array da inviare, cioè il numero di elementi da distribuire a ciascun processore; 3

8 Tramite la funzione MPI_Scatter inviamo dal Master a tutti gli altri processori questi pezzi dell array ( e il master detiene i primi chunk elementi dell array); Dopo aver ricevuto gli elementi, calcoliamo le somme parziali (in ciascun processore) tramite la funzione update; Infine, ad ogni passo e per ogni coppia di processori, inviamo la somma parziale al processore precedente, il quale la unisce questa somma ricevuta a quella già in suo possesso, e poi si ripete il tutto ciclicamente, dimezzando ad ogni passo i processori e fin quando non rimarrà so il processore p0 il quale conterrà la somma finale. Ovviamente nella fase di calcolo, tutti i processori del comunicatore vengono sincronizzati con una chiamata a MPI_Barrier. 2.2 Input, output, errori e subroutine L input dell algoritmo è un array di interi di dimensione pari a un multiplo del numero di cpu, le quali devono essere multiplo di 2 n (altrimenti non potremmo dimezzare le cpu ad ogni passo). Queste due condizioni sono garantite da due if iniziali nel codice. In output a video, il programma mostrearà tre cose: il calcolo della somma effettuato in maniera sequenziale; lo stesso calcolo effettuato in parallelo per confrontare la bontà del risultato; 4

9 Il tempo d esecuzione dell algoritmo in parallelo. Una possibile situazione d errore si verifica quando lanciamo il programma su un numero di CPU che non è un multiplo di 2 n : Figura 2.2: Situazione d errore Nella nostra implementazione usiamo due procedure di appoggio: update, int update(int *data,int chunk, int myid) che mi calcola la somma parziale; prende come input l array, il numero di elementi dell array, e l identificativo del processore; log2, double log2(double n) che mi calcola il logaritmo (necessario per individuare lo step e a chi processore inviare la somma parziale); 5

10 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. 6

11 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. 7

12 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 = 1024 N = 5120 N = N = Tabella 3.1: Tabella Tempi 8

13 Grafico Figura 3.1: Grafico Tempi Come si può vedere dal grafico, per un determinato numero di processori si risulta un peggioramento dei tempi d esecuzione, semplicemente perchè aumenta il numero di processori che resta inattivo, quindi non migliora sempre la situazione all aumentare del numero di processori, al contrario di quanto intuitivamente ci si aspetta. 9

14 3.2.2 Speed Up Tabella Speed-Up N = 1024 N = 5120 N = N = Tabella 3.2: Tabella Speed Up Grafico Figura 3.2: Grafico Speed Up 10

15 3.2.3 Efficienza Tabella Efficienza N = 1024 N = 5120 N = N = Tabella 3.3: Tabella Efficienza Grafico Figura 3.3: Grafico Efficienza 11

16 Capitolo 4 Esempi d uso e Codice Per compilare il codice, aperta una shell linux digitiamo: mpicc eser6.c e nella directory di lavoro comparirà un nuovo file, quello d esecuzione. Eseguendolo con: mpirun -np 8 a.out avremo l output a video: Figura 4.1: Esempio d uso 12

17 Murli: ed ecco il codice in C, implementando l algoritmo presente nel testo di / ========================================================================= Name : esercitazione 6 di calcolo parallelo Author : Mario Buonomo, Lorenzo Carullo, Luigi De Simone Copyright : Your copyright notice Description : Calculate sum of an array of n elements, using p processors (2nd strategy ) ========================================================================= / #include "mpi. h" #include <s t d i o. h> #include <s t d l i b. h> #include <time. h> #include <math. h> #define ARRAYSIZE #define MASTER 0 int main ( int argc, char argv [ ] ) { int numtasks, t a s k i d, i, q, k, chunksize, tag =0,mysum=0,sum=0, s t e p ; int update ( int data, int chunk, int myid ) ; double l o g 2 ( double n ) ; int data, r_data ; double check, t0, t f i n e, te, tmax ; MPI_Status s t a t u s ; / I n i z i a l i z z a z i o n e / MPI_Init(& argc, &argv ) ; / Numero Tasks / MPI_Comm_size(MPI_COMM_WORLD, &numtasks ) ; / Individuazione ranks / 13

18 MPI_Comm_rank(MPI_COMM_WORLD,& t a s k i d ) ; / Controlli / check = pow ( 2, ( double ) ( numtasks ) ) ; i f ( ( int ) check % numtasks!=0) { p r i n t f ( "ERROR: The number of CPU must be multiple of 2^n" ) ; MPI_Abort(MPI_COMM_WORLD, 1) ; else i f (ARRAYSIZE%numtasks!=0) { p r i n t f ( "ERROR: s ize array must be a multiple of the number of CPU" ) ; MPI_Abort(MPI_COMM_WORLD, 1) ; else { / Creazione chunks / c h u n k s i z e = (ARRAYSIZE / numtasks ) ; data = ( int ) malloc ( s i z e o f ( int ) ARRAYSIZE) ; r_data = ( int ) malloc ( s i z e o f ( int ) c h u n k s i z e ) ; / Master / i f ( t a s k i d == MASTER) { / Creazione array e calcolo somma i n i z i a l e / srand ( time (NULL) ) ; // printf ("\narray GENERATED\n") ; for ( i =0; i <ARRAYSIZE; i ++) { data [ i ]=( int ) ( rand ( ) %1000) ; // printf("%d ", data [ i ] ) ; sum = sum + data [ i ] ; p r i n t f ( "\n \nsequential array sum = %d \n",sum) ; // printf ("\n Sent %d elements to every tasks \n", chunksize ) ; sum=0; / Invio e Ricezione chunk dal master / 14

19 MPI_Scatter ( data, chunksize, MPI_INT, r_data, chunksize, MPI_INT,MASTER,MPI_COMM_WORLD) ; / I n i z i a l i z z a z i o n e Tempi / t0 = MPI_Wtime ( ) ; / Calcolo Somma parziale / sum = update ( r_data, chunksize, t a s k i d ) ; // printf ("\ncpu: %d somma parziale : %d\n", taskid,sum) ; / Calcolo a quale step stiamo / s t e p = ( int ) l o g 2 ( numtasks ) ; / Invio e ricezione delle somme p a r z i a l i ai r i s p e t t i v i vettori / for ( k=1; k<=s t e p ; k++){ q = ( int ) pow ( 2. 0, ( double ) k 1) ; for ( i=q ; i<=numtasks q ; i=i +(int )pow ( ( double ) 2, ( double ) k ) ) { i f ( t a s k i d == i ) { MPI_Send(&sum, 1, MPI_INT, ( i q ), tag, MPI_COMM_WORLD) ; // printf ("\n CPU: %d > CPU: %d\n", i, i q) ; MPI_Barrier (MPI_COMM_WORLD) ; for ( i =0; i <numtasks q ; i = i + ( int ) pow ( 2. 0, ( double ) k ) ) { i f ( t a s k i d == i ) { MPI_Recv(&mysum, 1, MPI_INT, ( i+q ), tag,mpi_comm_world,& s t a t u s ) ; // printf ("\n CPU: %d < CPU: %d\n", i, i+q) ; sum = sum + mysum ; // printf ("\ncpu : %d sum= %d mysum= %d\n", i,sum, mysum) ; / Fine Tempi / 15

20 t f i n e = 1. 6 e (MPI_Wtime ( ) t0 ) ; f r e e ( data ) ; f r e e ( r_data ) ; MPI_Reduce(& t f i n e,&tmax, 1,MPI_DOUBLE,MPI_MAX, 0,MPI_COMM_WORLD) ; i f ( t a s k i d ==0){ p r i n t f ( "\ nparallel array sum = %d\n",sum) ; p r i n t f ( "\ntempo d esecuzione : %f usecondi\n\n", tmax ) ; MPI_Finalize ( ) ; / end of main / / Funzione calcolo somma / int update ( int data, int chunk, int myid ) { int i, mysum ; mysum = 0 ; for ( i =0; i < chunk ; i ++) { mysum = mysum + data [ i ] ; // printf ("\n Task %d mysum = %d \n",myid,mysum) ; return (mysum) ; / Funzione calcolo logaritmo / double l o g 2 ( double n ) { double r = ( l o g ( n ) / l o g ( 2. 0 ) ) ; return r ; implementazione dell algoritmo in C 16

21 Bibliografia Gnuplot. Gnuplot. URL: Almerico Murli. Lezioni di Calcolo Parallelo. Liguori Editore. 17

Prodotto Matrice - Vettore in MPI II Strategia

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

Dettagli

Prodotto Matrice - Vettore in MPI - III Strategia

Prodotto Matrice - Vettore in MPI - III Strategia 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

Dettagli

Università 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 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

Dettagli

Laboratorio di Calcolo Parallelo

Laboratorio 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

Dettagli

Alcuni strumenti per lo sviluppo di software su architetture MIMD

Alcuni 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/

Dettagli

Alcuni strumenti per lo sviluppo di software su architetture MIMD

Alcuni 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

Dettagli

UNIVERSITA DEGLI STUDI DI NAPOLI FEDERICO II

UNIVERSITA 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

Dettagli

Laboratorio di Algoritmi e Strutture Dati Ingegneria e Scienze Informatiche - Cesena A.A

Laboratorio 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

Dettagli

La vera difficoltà non è progettare architetture

La vera difficoltà non è progettare architetture Superamento dei 10 Pflops Progettazione di algoritmi e software paralleli diffusione dei cluster e avvento dei multicore il modo con cui è stato sviluppato il software fino ad ora scomparirà tra pochi

Dettagli

Calcolo Parallelo. Domanda. In particolare. Qual è l algoritmo parallelo. PROBLEMA: Prodotto Matrice-Vettore

Calcolo 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

Dettagli

Primi Programmi con MPI 1

Primi 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

Dettagli

C: panoramica. Violetta Lonati

C: 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

Dettagli

Alcuni strumenti per lo sviluppo di software su architetture MIMD

Alcuni 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

Dettagli

Somma di un array di N numeri in MPI

Somma 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

Dettagli

Programma della 1 sessione di laboratorio

Programma 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

Dettagli

UNIVERSITA DEGLI STUDI DI NAPOLI FEDERICO II

UNIVERSITA 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

Dettagli

Lezione 8: Stringhe ed array multidimensionali

Lezione 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

Dettagli

Programmi su più moduli - Esempio

Programmi su più moduli - Esempio Programmi su più moduli - Esempio Calcolo del logaritmo in base qualunque Incapsulare la logica di calcolo in una funzione PASSO 1: definisco la dichiarazione della funzione (nome, parametri di input e

Dettagli

Calcolo Parallelo e Distribuito. a.a

Calcolo Parallelo e Distribuito. a.a Calcolo Parallelo e Distribuito a.a. 2005-2006 1 Problema Progettare un algoritmo parallelo per l ordinamento di un vettore su un calcolatore MIMD a memoria distribuita con p processori Sorting Bitonico

Dettagli

Fondamenti di Programmazione

Fondamenti 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

Dettagli

Politecnico 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] 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

Dettagli

Programmazione I - Laboratorio

Programmazione 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

Dettagli

Calcolo Parallelo e Distribuito

Calcolo Parallelo e Distribuito Calcolo Parallelo e Distribuito 1 Problema Progettare un algoritmo parallelo per l ordinamento di un vettore su un calcolatore MIMD a memoria distribuita con p processori Sorting Bitonico A. Murli Calcolo

Dettagli

La funzione main() La funzione main(), presente in tutti i programmi C, è una funzione come tutte le altre

La funzione main() La funzione main(), presente in tutti i programmi C, è una funzione come tutte le altre La funzione main() La funzione main(), presente in tutti i programmi C, è una funzione come tutte le altre Unica particolarità: viene chiamata dal Sistema Operativo, appena il programma viene avviato Non

Dettagli

Alcuni strumenti per lo sviluppo di software su architetture MIMD

Alcuni 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

Dettagli

Università degli Studi di Verona. Esercizi. Gennaio Sergio Marin Vargas. Dipartimento di Biotecnologie

Università degli Studi di Verona. Esercizi. Gennaio Sergio Marin Vargas. Dipartimento di Biotecnologie Università degli Studi di Verona Dipartimento di Biotecnologie Laurea in Biotecnologie Corso di Informatica 2014/2015 Esercizi Gennaio 2015 - Sergio Marin Vargas Scrivere un programma Una volta che avete

Dettagli

Le 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. 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

Dettagli

Sistemi Operativi (M. Cesati)

Sistemi 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

Dettagli

Calcolo parallelo. Una sola CPU (o un solo core), per quanto potenti, non sono sufficienti o richiederebbero tempi lunghissimi.

Calcolo 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,

Dettagli

Compiti 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 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

Dettagli

MPI Quick Refresh. Super Computing Applications and Innovation Department. Courses Edition 2017

MPI 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

Dettagli

Esempi di programmazione in C

Esempi 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

Dettagli

Capitolo 5 - Funzioni

Capitolo 5 - Funzioni Capitolo 5 - Funzioni Divide and conquer Introduzione Costruire un programma da pezzi più piccoli o da singole componenti Questi pezzi più piccoli sono chiamati moduli Ogni singolo pezzo è più facilmente

Dettagli

char *s; s = (char *) malloc(5*sizeof(char)); scanf( %s, s); Stringhe

char *s; s = (char *) malloc(5*sizeof(char)); scanf( %s, s); Stringhe char *s; s = (char *) malloc(5*sizeof(char)); scanf( %s, s); Stringhe Stringhe s char *s; s = (char *) malloc(5*sizeof(char)); scanf( %s, s); c i a o \0 Scrivere un programma che legga da input un array

Dettagli

Calcolo parallelo. Una sola CPU (o un solo core), per quanto potenti, non sono sufficienti o richiederebbero tempi lunghissimi

Calcolo 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,

Dettagli

A.d'Alessio. Calcolo Parallelo. Esempi di topologie

A.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

Dettagli

Calcolo Parallelo e Distribuito

Calcolo Parallelo e Distribuito Calcolo Parallelo e Distribuito 1 Problema Progettare un algoritmo parallelo per l ordinamento di un vettore su un calcolatore MIMD a memoria distribuita con p processori Sorting Bitonico A. Murli Calcolo

Dettagli

Esercitazione 6. Array

Esercitazione 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

Dettagli

do { printf("inserisci due numeri reali:"); scanf("%f %f", &a, &b);

do { printf(inserisci due numeri reali:); scanf(%f %f, &a, &b); Fondamenti di Informatica T-1 modulo 2 Laboratorio 02 1 Obiettivi di questa esercitazione 1. Valutazione in cortocircuito i 2. If innestati 3. Switch 4. Cicli 5. Funzioni e Header File 2 Valutazione in

Dettagli

do { printf("inserisci due numeri reali:"); scanf("%f %f", &a, &b); while(b!=0 && a/b<0);

do { printf(inserisci due numeri reali:); scanf(%f %f, &a, &b); while(b!=0 && a/b<0); Obiettivi di questa esercitazione Fondamenti di Informatica T-1 modulo 2 Laboratorio 02 1. Valutazione in cortocircuito i 2. If innestati 3. Switch 4. Cicli 5. Funzioni e Header File 1 2 Valutazione in

Dettagli

Funzioni come parametri

Funzioni come parametri Funzioni come parametri Obiettivi: Riprendere il modello computazionale alla base del linguaggio C (e mostrare i parametri del main) Presentare e sperimentare le funzioni come parametri di funzione 1 Modello

Dettagli

MPI è una libreria che comprende:

MPI è 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

Dettagli

Nota: Si consideri il valore di pi greco.

Nota: Si consideri il valore di pi greco. ESERCIZIO 1 (Costrutti condizionali + Casting delle variabili) Realizzare un programma che, dato in ingresso un angolo specificato in gradi come un numero intero, fornisca la relativa conversione in radianti.

Dettagli

Introduzione a MPI Algoritmi e Calcolo Parallelo. Daniele Loiacono

Introduzione 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)

Dettagli

Algoritmo per il calcolo della somma di N numeri In ambiente di calcolo parallelo su architettura MIMD a memoria distribuita

Algoritmo per il calcolo della somma di N numeri In ambiente di calcolo parallelo su architettura MIMD a memoria distribuita Algoritmo per il calcolo della somma di N numeri In ambiente di calcolo parallelo su architettura MIMD a memoria distribuita Carlo Maurizio Santoro 0108-000528 Attività di laboratorio Università Parthenope

Dettagli

Programmazione di base

Programmazione di base Fondamenti di Informatica Primo Appello 01-17 8 febbraio 017 Rispondi alle domande negli appositi spazi. I punti assegnati per ogni domanda sono indicati nel riquadro a lato. L'esame contiene 10 domande,

Dettagli

Politecnico di Milano Facoltà di Ingegneria Civile, Ambientale e Territoriale. Informatica (ICA-LC) [083668]

Politecnico di Milano Facoltà di Ingegneria Civile, Ambientale e Territoriale. Informatica (ICA-LC) [083668] Politecnico di Milano Facoltà di Ingegneria Civile, Ambientale e Territoriale Informatica (ICA-LC) [083668] Prof. P. Plebani Allievi Ingegneria Civile e Ambientale II prova in itinere (04 Febbraio 2009)

Dettagli

Programmazione I Prova scritta - 18 febbraio h20min

Programmazione I Prova scritta - 18 febbraio h20min Programmazione I Prova scritta - 18 febbraio 2019-1h20min NOTA: Nei programmi si trascuri ogni problema legato al tipo ed al valore di ritorno della funzione main, inoltre si sottintenda la presenza delle

Dettagli

1 (6) 2 (7) 3 (7) 4 (7) 5 (6)

1 (6) 2 (7) 3 (7) 4 (7) 5 (6) CORSO DI LAUREA IN INGEGNERIA ELETTRICA, CHIMICA e MATERIALI Informatica B anno accademico 010-011 Prof. Danilo ARDAGNA Seconda Prova in Itinere 7.06.011 Durata 1h 30 Valutazioni 1 (6) (7) 3 (7) 4 (7)

Dettagli

Algoritmo di ordinamento per sostituzione. Esempio : dato l array :

Algoritmo di ordinamento per sostituzione. Esempio : dato l array : Algoritmo di ordinamento per sostituzione Per ottenere un ordinamento crescente con l algoritmo di ordinamento per Sostituzione si confronta l elemento nella prima posizione con gli elementi nelle posizioni

Dettagli

Università degli Studi di Verona. Esercizi (seconda parte) Gennaio Sergio Marin Vargas. Dipartimento di Biotecnologie

Università degli Studi di Verona. Esercizi (seconda parte) Gennaio Sergio Marin Vargas. Dipartimento di Biotecnologie Università degli Studi di Verona Dipartimento di Biotecnologie Laurea in Biotecnologie Corso di Informatica 2014/2015 Esercizi (seconda parte) Gennaio 2015 - Sergio Marin Vargas Scrivere un programma Una

Dettagli

Operazioni su file di caratteri

Operazioni su file di caratteri Operazioni su file di caratteri Apertura fopen Chiusura fclose Scrittura fprintf Lettura fscanf Controllo fine file feof Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1 Apertura di un file: Si

Dettagli

Introduzione al C Lez. 4

Introduzione 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

Dettagli

Lezione 19: Il preprocessore

Lezione 19: Il preprocessore Lezione 19: Il preprocessore Vittorio Scarano Corso di Laurea in Informatica Università di Salerno Struttura della lezione Il debugger gdb Il preprocessore direttive #include e #define macro con parametri

Dettagli

Introduzione al linguaggio C Puntatori

Introduzione al linguaggio C Puntatori Introduzione al linguaggio C Puntatori Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica 19 ottobre 2017

Dettagli

Pigreco in OpenMP. Facoltà di Ingegneria Corso di Studi in Ingegneria Informatica. Elaborato di Calcolo Parallelo. Anno Accademico 2011/2012

Pigreco in OpenMP. Facoltà di Ingegneria Corso di Studi in Ingegneria Informatica. Elaborato di Calcolo Parallelo. Anno Accademico 2011/2012 Facoltà di Ingegneria Corso di Studi in Ingegneria Informatica Elaborato di Calcolo Parallelo Pigreco in OpenMP Anno Accademico 2011/2012 Professoressa Alessandra D Alessio Studenti Giuffrida Serena M63/000239

Dettagli

Le topologie. Message Passing Interface MPI Parte 2. Topologie MPI. Esempi di topologie. Definizione: topologia. Laura Antonelli

Le 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

Dettagli

Funzioni di libreria. KP pp , , , 589, DD pp , , ,

Funzioni di libreria. KP pp , , , 589, DD pp , , , Funzioni di libreria KP pp.112-115, 471-474, 573-575, 589, 598-601 DD pp.144-153, 307-313, 563-565, 588-591 Funzioni matematiche (1) KP p. 112,573 Il linguaggio C non contiene funzioni matematiche predefinite.

Dettagli

Fondamenti di Informatica: Ingegneria Meccanica Prova scritta del 12 luglio 2008

Fondamenti di Informatica: Ingegneria Meccanica Prova scritta del 12 luglio 2008 Fondamenti di Informatica: Ingegneria Meccanica Prova scritta del 12 luglio 2008 Gli studenti dell a.a. 2007-2008 e 2006-2007 (6CFU) devono svolgere i 6 esercizi. Gli studenti degli anni precedenti non

Dettagli

INFORMATICA A. Titolo presentazione sottotitolo. Laboratorio n 4 Dott. Michele Zanella Ing. Gian Enrico Conti

INFORMATICA A. Titolo presentazione sottotitolo. Laboratorio n 4 Dott. Michele Zanella Ing. Gian Enrico Conti INFORMATICA A Titolo presentazione sottotitolo A.A. 2018-19 Milano, XX mese 20XX Laboratorio n 4 Dott. Michele Zanella Ing. Gian Enrico Conti Puntatori I puntatori sono delle variabili che contengono l

Dettagli

Programmazione C: Esercizi su vettori e funzioni. Titolo presentazione. sottotitolo. Milano, XX mese 20XX

Programmazione 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

Dettagli

Programmazione I (Classe 1)

Programmazione I (Classe 1) Programmazione I (Classe 1) Terzo Appello (prima prova) 9 Settembre 2016 Docenti: De Prisco - Deufemia - Zizza Cognome: Nome: Matricola: Ritirato 1 Esercizi (leggere attentamente il testo prima di scrivere

Dettagli

Calcolo Parallelo con MPI (2 parte)

Calcolo Parallelo con MPI (2 parte) 2 Calcolo Parallelo con MPI (2 parte) Approfondimento sulle comunicazioni point-to-point Pattern di comunicazione point-to-point: sendrecv Synchronous Send Buffered Send La comunicazione non-blocking Laboratorio

Dettagli

#include <stdio.h> /* l esecuzione comincia dalla funzione main */ int main()

#include <stdio.h> /* l esecuzione comincia dalla funzione main */ int main() Primi passi Il mio primo programma #include /* l esecuzione comincia dalla funzione main */ int main() { printf( Hello World!\n" ); return 0; /* il programma termina con successo */ } /* fine

Dettagli

Programmazione Concorrente, Parallela e su Cloud

Programmazione Concorrente, Parallela e su Cloud 2019 Programmazione Concorrente, Parallela e su Cloud Algoritmi per memoria condivisa Carmine Spagnuolo, Ph.D. Finding the Minimum in O(logn) Time Algoritmo sequenziale, T (n) = n 1 = O(n): 1: m := a[1];

Dettagli

ELEMENTI DI INFORMATICA. Linguaggio C

ELEMENTI DI INFORMATICA. Linguaggio C Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica ELEMENTI DI INFORMATICA http://agile.diee.unica.it A.A. 2015/2016 Ing. Marco Ortu Diee, secondo piano Tel. 070-6755774 mail:

Dettagli

Lab 16 Gestione file binari"

Lab 16 Gestione file binari Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni Lab 16 Gestione file binari" Lab16 1 Esercizio 1" n Un registratore di cassa registra su di un file binario alcuni

Dettagli

Fondamenti di Informatica Laurea in Ingegneria Civile e Ingegneria per l ambiente e il territorio

Fondamenti di Informatica Laurea in Ingegneria Civile e Ingegneria per l ambiente e il territorio Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma Fondamenti di Informatica Laurea in Ingegneria ivile e Ingegneria per l ambiente e il territorio Linguaggio : Le basi Stefano

Dettagli

Capitolo 10 - Strutture

Capitolo 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

Dettagli

Il corpo di tutte le funzioni deve essere contenuto tra parentesi graffe

Il corpo di tutte le funzioni deve essere contenuto tra parentesi graffe Primi passi Il mio primo programma #include /* l esecuzione comincia dalla funzione main */ int main() { printf( Hello World!\n" ); return 0; /* il programma termina con successo */ } /* fine

Dettagli

Fondamenti di Programmazione

Fondamenti 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

Dettagli

Introduzione al C. Lezione 1 Elementi. Rossano Venturini. Pagina web del corso

Introduzione al C. Lezione 1 Elementi. Rossano Venturini. Pagina web del corso Introduzione al C Lezione 1 Elementi Rossano Venturini rossano@di.unipi.it Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Lezioni di ripasso C Mercoledì 19 Giovedì

Dettagli

ESERCITAZIONI DI INTRODUZIONE AGLI ALGORITMI (A.A. 08/09)

ESERCITAZIONI DI INTRODUZIONE AGLI ALGORITMI (A.A. 08/09) ESERCITAZIONI DI INTRODUZIONE AGLI ALGORITMI (A.A. 08/09) DISPENSA N. 4 1. Ricerca Binaria Ricorsiva L algoritmo Ricerca Binaria risolve il problema della ricerca di una chiave in un vettore. È un esempio

Dettagli

Linguaggio C: Array Valeria Cardellini

Linguaggio 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

Dettagli

Consideriamo un vettore allocato dinamicamente

Consideriamo un vettore allocato dinamicamente Libreria per per la la gestione/manipolazione dei dei vettori Consideriamo un vettore allocato dinamicamente int * v; v = (int *) malloc (n * sizeof (int) ); Conversione di tipo da void * a int * Numero

Dettagli

Sistemi Operativi 1. Lezione III: Concetti fondamentali. Mattia Monga. 7 marzo 2008

Sistemi Operativi 1. Lezione III: Concetti fondamentali. Mattia Monga. 7 marzo 2008 1 Dip. di Informatica e Comunicazione Università degli Studi di Milano, Italia mattia.monga@unimi.it 7 marzo 2008 1 c 2008 M. Monga. Creative Commons Attribuzione-Condividi allo stesso modo 2.5 Italia

Dettagli

Sistemi Operativi 1. Mattia Monga. 7 marzo Dip. di Informatica e Comunicazione Università degli Studi di Milano, Italia

Sistemi Operativi 1. Mattia Monga. 7 marzo Dip. di Informatica e Comunicazione Università degli Studi di Milano, Italia 1 Dip. di Informatica e Comunicazione Università degli Studi di Milano, Italia mattia.monga@unimi.it 7 marzo 2008 1 c 2008 M. Monga. Creative Commons Attribuzione-Condividi allo stesso modo 2.5 Italia

Dettagli

Progetti su più File Array e Funzioni

Progetti 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

Dettagli

Fondamenti di Informatica. Ingegneria elettronica

Fondamenti di Informatica. Ingegneria elettronica Fondamenti di Informatica Ingegneria elettronica Prima esercitazione Cecilia Catalano Sistema Operativo Il S.O. è costituito da un insieme di programmi che permettono di utilizzare e gestire tutte le risorse

Dettagli

Informatica A aa Seconda prova in itinere. Esempi di esercizi possibili

Informatica A aa Seconda prova in itinere. Esempi di esercizi possibili Informatica A aa 2002-03 Seconda prova in itinere Esempi di esercizi possibili Struttura della prova-parte 1 Fortran: comprensione di un programma dato (semplice) Reti: domanda teorica (per verificare

Dettagli

Studio degli algoritmi

Studio degli algoritmi COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI Fondamenti di Informatica a.a.2006/07 Prof. V.L. Plantamura Dott.ssa A. Angelini Studio degli algoritmi Dato un problema P, le problematiche riguardano: Sintesi

Dettagli

Alcuni Soluzioni. Fornire la specifica di un algoritmo risolutivo utilizzando lo pseudocodice visto a lezione.

Alcuni Soluzioni. Fornire la specifica di un algoritmo risolutivo utilizzando lo pseudocodice visto a lezione. Alcuni Soluzioni ESERCIZIO 1 Data una sequenza di interi di dimensione dim, determinare se esistono esattamente cont occorrenze del valore val, utilizzando per questo una variabile booleana check. Stato

Dettagli

Preprocessore, linker e libreria standard

Preprocessore, linker e libreria standard Preprocessore, linker e libreria standard Università degli Studi di Brescia Prof. Massimiliano Giacomin Elementi di Informatica e Programmazione Università di Brescia 1 IL PREPROCESSORE Programma sorgente

Dettagli

Esercizio 1: parole nel testo

Esercizio 1: parole nel testo Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 6 Esercitazione: 11 novembre 2005 Esercizi di riepilogo in preparazione alla prima prova intermedia Problema (tratto da

Dettagli

Lezione 11: Liste a Puntatori e Input/Output

Lezione 11: Liste a Puntatori e Input/Output Lezione 11: Liste a Puntatori e Input/Output Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università degli Studi di Salerno Struttura della lezione Richiamo: strutture (struct)

Dettagli

Esercitazioni di Fondamenti di Informatica - Lez. 7 20/11/2018

Esercitazioni di Fondamenti di Informatica - Lez. 7 20/11/2018 Esercitazioni di Fondamenti di Informatica - Lez. 7 0/11/018 Esercizi sull allocazione dinamica della memoria in C 1. Cosa stampa il seguente programma? 1 #d e f i n e MAXLENGTH 0 4 typedef struct { char

Dettagli

Introduzione al C. Lez. 1 Elementi. Rossano Venturini

Introduzione al C. Lez. 1 Elementi. Rossano Venturini Introduzione al C Lez. 1 Elementi Rossano Venturini rossano@di.unipi.it Pagine del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start http://algoritmica.spox.spoj.pl/alglab2013 Lezioni

Dettagli

Valutazione delle prestazioni di programmi paralleli

Valutazione delle prestazioni di programmi paralleli Valutazione delle prestazioni di programmi paralleli Moreno Marzolla Dip. di Informatica Scienza e Ingegneria (DISI) Università di Bologna moreno.marzolla@unibo.it Copyright 2013, 2014, Moreno Marzolla,

Dettagli

Introduzione ai thread

Introduzione ai thread Introduzione ai thread Processi leggeri. Immagine di un processo (codice, variabili locali e globali, stack, descrittore). Risorse possedute: : (file aperti, processi figli, dispositivi di I/O..),. L immagine

Dettagli

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 4 24/10/2013

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 4 24/10/2013 Laboratorio di Programmazione 1 1 Docente: dr. Damiano Macedonio Lezione 4 24/10/2013 Original work Copyright Sara Migliorini, University of Verona Modifications Copyright Damiano Macedonio, University

Dettagli

Programmazione I (Classe 1)

Programmazione 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

Dettagli

Puntatori e array. Violetta Lonati

Puntatori e array. Violetta Lonati Puntatori e array Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Violetta Lonati Puntatori e array

Dettagli

Pag. 1. modello di esecuzione parallela

Pag. 1. modello di esecuzione parallela Il Sistema Operativo è un insieme di programmi (moduli software) che svolgono funzioni di servizio nel calcolatore. Costituisce la parte essenziale del cosiddetto software di sistema (o di base) in quanto

Dettagli

Funzioni matematiche (1) KP p. 112,573. Corso di Fondamenti di Programmazione canale E-O. Funzioni matematiche (2) Funzioni matematiche (3)

Funzioni matematiche (1) KP p. 112,573. Corso di Fondamenti di Programmazione canale E-O. Funzioni matematiche (2) Funzioni matematiche (3) Corso di Fondamenti di Programmazione canale E-O Tiziana Calamoneri Funzioni di Libreria KP, pp. 112-115, 471-474, 573-575, 589, 598-601 DD, pp. 144-153, 307-313, 563-565, 588-591 Funzioni matematiche

Dettagli