Trasformazioni del codice sorgente. Programmazione di qualità per sistemi embedded
|
|
- Gerardina Spano
- 8 anni fa
- Visualizzazioni
Transcript
1 Trasformazioni del codice sorgente Programmazione di qualità per sistemi embedded
2 Trasformazioni sui cicli I cicli sono i migliori candidati per le ottimizzazione Sono eseguiti molte volte Sono porzioni di codice relativamente piccole e localizzate Le principali trasformazioni sui cicli sono le seguenti Loop urolling Induction variables Loop unswitch Loop fusion Loop interchange Loop tiling Loop peeling While-do / do-while Zero output condition Software pipelining
3 Loop urolling Trasformazione Replica il codice del corpo di un ciclo per un certo numero di volte Obiettivo Aumentare la dimensone del/dei blocchi base che costituiscono il corpo del ciclo al fine di permettere al compilatore di eseguire ottimizzazioni con maggiore efficienza Note Unrolling completo Possibile solo se i limiti di iterazione sono noti a compile time Unrolling di un fattore N Sempre possibile Poco conveniente quando il numero minimo e medio di iterazioni di un cilco è minore di N La trasformazione in sé è semplice In cascata è bene ricorrere alla propagazione delle costanti e all analisi delle variabili di induzione
4 Loop urolling Si consideri un ciclo K iterazioni N fattore di unrolling Struttura del codice traformato Prologo Gestisce i casi in cui K<N Corpo Esegue il ciclo (K/N) volte Il corpo del ciclo è ottenuto replicando il copo originale N volte Richiede l espansione dello statement di incremento di un ciclo for Epilogo Gestisce le ultime (K mod N) iterazioni Alcuni compilatori Dispongono di opportune direttive per ottimizzare la gestione del prologo e dell epilogo
5 Loop urolling - Esempio Codice originale Codice trasformato /* K is known to be 4 */ /* Full unrolling */ for( i = 1; i < K; i++ ) { y[i] = y[i-1] + x[i]; Codice originale /* K is known to be greather than 2 */ for( i = 1; i < K; i++ ) { y[i] = y[i-1] + x[i]; y[1] = y[0] + x[1]; y[2] = y[1] + x[2]; y[3] = y[2] + x[3]; y[4] = y[3] + x[4]; Codice trasformato /* Unrolling with N=2 */ for( i = 1; i < K; i += 2 ) { y[i] = y[i-1] + x[i]; y[i+1] = y[i] + x[i+1]; if( K % 2 == 0 ) { y[k-1] = y[k-2] + x[k-1]; Codice originale /* K is known to be 4 */ t = 0; for( j = 0; j < K; j++ ) { t = t + x[k-j-1] * (j+1); Codice trasformato /* Full unrolling */ t = 0; j = 0; t = t + x[4-j-1] * (j+1); j++; t = t + x[4-j-1] * (j+1); j++; t = t + x[4-j-1] * (j+1); j++; t = t + x[4-j-1] * (j+1);
6 Induction variables Trasformazione Individuare variabili che sono funzioni dell indice del ciclo Sostituisce tali variabili con espressioni più semplici Obiettivo Calcolare le variabili induttive in modo più semplice Migliorare un ciclo dopo l unrollig Note In genere i compilatori Identificano solo dipendenze lineari Identificano solo dipendenze da una variabile indice e trascurano i cicli annidati Considerano solamente variabili induttive scalari
7 Induction variables - Esempio Codice originale for( i = 0; i < K; i++ ) { y[i] = y[i] + x[2*i]; Codice trasformato j = 0; for( i = 0; i < K; i++ ) { y[i] = y[i] + x[j]; j+=2; Codice originale for( i = 0; i < K; i++ ) { y[i] = y[i] + x[k-i]; Codice trasformato j = K; for( i = 0; i < K; i++ ) { y[i] = y[i] + x[j]; j--; Codice originale for( r = 0; r < ROW; r++ ) { for( c = 0; c < COL; c++ ) { t = t + x[ r * COL + c ]; Codice trasformato i=0 for( r = 0; r < ROW; r++ ) { for( c = 0; c < COL; c++ ) { i++; t = t + x[i];
8 Loop unswitch Trasformazione Sposta condizioni invarianti fuori dal ciclo Obiettivo Evitare di ripetere test inutili Diminuire il numero di salti necessari Minimizzare gli errori di branch prediction Note In genere i compilatori eseguono il loop unswitch A patto di poter determinare che una data operazione è invariante Se vi sono chiamate di funzione coinvolte Raramente il compilatore interviene
9 Loop unswitch - Esempio Codice originale for( i = 0; i < K; i++ ) { if( N > 0 ) { y[i] = y[i] + x[k-i]; else { y[i] = y[i] * x[i]; Codice trasformato if( N > 0 ) { for( i = 0; i < K; i++ ) { y[i] = y[i] + x[k-i]; else { for( i = 0; i < K; i++ ) { y[i] = y[i] * x[i];
10 Loop fusion Trasformazione Fonde il corpo di due cicli Obiettivo Minimizzare gli accessi alla memoria e ridurre i cache miss Quando i cicli operano su strutture dati comuni Diminuire il numero di salti necessari Minimizzare gli errori di branch prediction Diminuire il numero di istruzioni di controllo A volte le condizioni di uscita dal ciclo possono essere complesse Note In genere i compilatori eseguono la loop fusion Quando i cicli sono vicini Quando i limiti di iterazione sono identici Quando la direzione di iterazione è identica (incremento, decremento)
11 Loop fusion - Esempio Codice originale for( i = 0; i < 100; i++ ) a[i] = 1; for( i = 0; i < 100; i++ ) b[i] = 2; Codice trasformato for( i = 0; i < 100; i++ ) { a[i] = 1; b[i] = 2; Codice originale for( i = 0; i < 100; i++ ) a[i] = 1; for( i = 99; i >= 0; i-- ) b[i] = b[i-1]; Codice trasformato for( i = 99; i >= 0; i++ ) { a[i] = 1; b[i] = b[i-1]; Codice originale for( i = 0; i < 100; i++ ) { a[i] = a[i] * b[i]; for( i = 0; i < 100; i++ ) c[i] = a[i] + d[i]; Codice trasformato for( i = 0; i < 100; i++ ) { a[i] = a[i] * b[i]; c[i] = a[i] + d[i];
12 Loop interchange Trasformazione Scambia l ordine di due (o più) cicli annidati Obiettivo Ottimizzare gli accessi alla memoria per ridurre i cache miss Modifica il pattern di accesso ai dati in modo da renderlo consistente con la loro organizzazione in memoria Note In genere i compilatori non eseguono il loop interchange Difficle da individuare Se il corpo del ciclo non è più che semplice, la trasformazione potrebbe essere soggetta a molte condizioni e vincoli Applicazione tipica Accedere ad un array in row-major o column-major order a seconda del modello di memorizzazione adottato dal linguaggio C: row-major FORTRAN: colum-major
13 Loop interchange - Esempio Codice originale for( c = 0; c < 100; c++ ) for( r = 0; r < 20; r++ ) a[r][c] = r+c; Codice trasformato for( r = 0; r < 20; r++ ) for( c = 0; c < 100; c++ ) a[r][c] = r+c; probabile cache hit probabili cache miss
14 Loop interchange - Esempio In alcuni casi la trasformazione peggiora le prestazioni Il pattern di accesso ad altri array riduce la località Nell esempio che segue Codice originale L accesso alla matrice a è in column-major order e quindi poco efficiente (nel caso pessimo si ha un miss ad ogni ciclo) L accesso ai vettori x ed y ha una forte località temporale (due load ed una store per ogni esecuzione del ciclo più esterno) Codice trasformato L accesso alla matrice a è in row-major order (pochi miss) L accesso ai vettori x ed y non presenta località temporale (due load ed una store per ogni esecuzione del ciclo più interno!) Codice originale for( c = 0; c < 300; c++ ) for( r = 0; r < 300; r++ ) x[r] = x[r] + y[r] + a[r][c]; Codice trasformato for( r = 0; r < 20; r++ ) for( c = 0; c < 100; c++ ) x[r] = x[r] + y[r] + a[r][c];
15 Loop tiling Trasformazione Suddivide l accesso ad una matrice in più accessi a sottoblocchi Obiettivo Ottimizzare gli accessi alla memoria per ridurre i cache miss Modifica il pattern di accesso ai dati Ha lo scopo di aumentare la località spaziale dei dati Note Alcuni compilatori eseguono casi semplificati di tiling Difficle da implementare Fortemente vincolato dalle dipendenze dai dati È un caso particolare della più generale trasformzione che prevede una scomposizione generica dell accesso a matrici In generale il loop tiling consente ulteriori miglioramenti Della località, mediante loop interchange Nellàindividuaizone di espressioni costanti e variabili induttive
16 Loop tiling - Esempio Codice originale for (i = 0; i < 100; i++) { c[i] = 0; for (j = 0; j < 100; j++) { c[i] = c[i] + a[i][j] * b[j]; Codice trasformato for (i = 0; i < 100; i += 4) { c[i] = 0; for (j = 0; j < 100; j += 4) { for (x = i; x < i + 4; x++) { for (y = j; y < j + 4; y++) { c[x] = c[x] + a[x][y] * b[y];
17 Loop peeling Trasformazione Estrae da un ciclo alcune iterazoni particolari in modo da ridurre o eliminare dipendenze dai dati e da identificare variabili induttive In genere la prima e l ultima iterazione Obiettivo Migliorare lo sfruttamento della pipeline Le dipendenze dai dati possono causare stalli Note Alcuni compilatori eseguono casi semplificati di peeling Difficle da identificare Prima/ultima iterazione Richiede altre trasformazioni a valle Identificazione di variabili induttive Propagazione delle espressioni costanti Loop unswitch
18 Loop tiling - Esempio Codice originale k = 10 for (i = 0; i < 10; i++) { a[i] = b[i] + c[k]; k = i; Codice trasformato a[0] = b[0] + c[10]; for (i = 1; i < 10; i++) { a[i] = b[i] + c[i-1];
19 While-do / do-while Trasformazione Cambia un ciclo a condizione iniziale in uno a condizione finale Richiede una condizione aggiuntiva iniziale Obiettivo Minimizzare il numero di salti Politiche di branch prediction e patter di traduzione possono influenzare questa trasformazione Note In genere i compilatori eseguono questa trasformazione È piuttosto semplice da realizzare
20 Loop tiling - Esempio Codice originale while( a > 0 ) { /* Loop body */ a--; Codice trasformato if( a > 0 ) { do { /* Loop body */ a--; while( a > 0 ); Considerando una possibile traduzione assembly Nel codice originale, ad ogni iterazione si eseguono Un salto condizionale (not taken) Un salto incondizionato Nel codice trasformato, ad ogni iterazione si esegue Un salto condizionale (taken) LOOP: CMP A, 0 BLE EXIT /* loop body translation */ DEC A BRA LOOP EXIT: NOP CMP A, 0 BLE EXIT LOOP: /* loop body traslation */ DEC A CMP A, 0 BGT LOOP: EXIT: NOP
21 Zero output condition Trasformazione Nodifica la condizione di uscita da un ciclo in modo che comporti un confronto con la costante zero Obiettivo Sfruttare Il valore lasciato nel registro di stato dalle operaizoni aritmetiche Esecuzione speculativa Note In genere i compilatori eseguono questa trasformazione È piuttosto semplice da realizzare
22 Software pipelining Trasformazione Replica in corpo di un ciclo più volte e riorganizza le operazioni Spesso richiede un prologo ed un epilogo Obiettivo Ridurre le dipendenze dai dati Minimizzare il numero di salti Note Alcuni compilatori eseguono questa trasformazione È molto complessa da identificare e da realizzare Porta notavoli benefici Può essere sfruttata in modo particolarmente conveniente Su architetture superscalari Su architetture VLIW
23 Software pipelining - Esempio La trasformazione è piuttosto complessa Consideriamo un esempio in pseudocodice Si consideri il sguente codice for( i=0; i < N; i++ ) { A(i); B(i); C(i); // Load // Compute // Store In cui A(i), B(i), C(i) sono tre operazioni sul dato i Ogni operazione dipenden dalla precedente B dipende da A C dipende da B Operazioni su dati diversi sono indipendenti A(i+1) non dipende da A(i), e così per le altre operazioni
24 Software pipelining - Esempio La normale esecuzione del ciclo è la seguente A(0) B(0) C(0) A(1) B(1) C(1) A(2) B(2) C(2) A(3) B(3) C(3)... Se ogni istruzione Richiede un ciclo di clock per essere eseguita senza interlock Richiede tre cicli di clock per essere eseguita con interlock Ogni iterazione del ciclo consta di tre istruzioni Ogni iteraizone richiede = 7 cicli di clock 1 ciclo per A Non dipende dall operaizone C al ciclo precedente) 3 cicli per B e C Dipendono dall operazione precedente Il tempo medio per operazione è 7 / 3 = 2.33 cicli
25 Software pipelining - Esempio Riorganizzando l esecuzione del ciclo come segue A(0) A(1) A(2) B(0) B(1) B(2) C(0) C(1) C(2) A(3) A(4) A(5)... Ogni iterazione del ciclo costa di 9 istruzioni Tre A, tre B e tre C Ogni iterazione richiede = 9 cicli 1 ciclo per ogni istruzione A Non dipende dall operaizone C al ciclo precedente) 1 ciclo per ogni istruzione B La dipendenza da A non causa stalli poiché le bolle sono sostituite dalle due operazioni A su elementi indipendenti 1 ciclo per ogni istruzione C Per la stessa ragione Il tempo medio per operazione è 9 / 9 = 1 ciclo
26 Software pipelining - Esempio Riorganizzando l esecuzione del ciclo come mostrato Si eliminano le dipendenze dai dati Si riempiono le bolle della pipeline con operazioni utili for( i=0; i < (N-2)/3; i=i+3 ) { A(i); A(i+1); A(i+2); B(i); B(i+1); B(i+2); C(i); C(i+1); C(i+2);
27 Trasformazioni sulle espressioni Migliorano l efficienza di calcolo delle espressioni Richiedono analisi di tipo data-flow Le principali trasformazioni sono Strength reduction Common subexpression elimination Constant folding Constant propagation Copy propagation Induction variables Già vista nella trattazione dei cicli Dead store elimination
28 Strength reduction Trasformazione Sostituisce operazioni complesse con operazioni più semplici Fortemente legata all architettura target Obiettivo Ridurre il tempo di esecuzione complessivo Non necessariamente il tempo di calcolo Note I compilatori eseguono questa trasformazione A livello di generaizone del codice target Si applica pressoché unicamente ad operazioni tra interi Esempi X * 2 diviene X+X oppure X<<1 X * 3 diviene X+X+X oppure X<<1 + X oppure X<<2 X...
29 Common subexpression elimination Trasformazione Individua sottoespressioni comuni a più espressioni Introduce variabili temporanee Obiettivo Minimizzare il numero di istruzioni per il caloclo di espressioni Le sottoespressioni comuni vengono valutate una sola volta e usate più volte Note I compilatori eseguono questa trasformazione Richiede tecniche di analisi data-flow standard
30 Common subexpression elimination - Esempio È necessario garantire che i valori delle variabili coinvolte nella sottoespressione non cambino tra i suoi diversi usi Si considerino i seguenti esempi Nell esempio a sinistra d ed e rimangono costanti fra i due usi Nell esempio a destra e cambia: il riuso dell espressione costituisce un errore semantico. X = b + c + 3 * ( d + e ); b++; Y = f + b * ( d + e ); X = b + c + 3 * ( d + e ); e++; Y = f + b * ( d + e ); t = d + e X = b + c + 3 * t; b++; Y = f + b * t; t = d + e X = b + c + 3 * t; e++; Y = f + b * t; // ERROR!!
31 Constant folding Trasformazione Calcola espressioni costanti a compile time Obiettivo Minimizzare il numero di istruzioni a run-time per il calcolo di espressioni che coinvolgono porzioni costanti Note I compilatori eseguono questa trasformazione Molto semplice da implementare Viene eseguita a valle del preprocessore Cosa è considerato costante? Valori numerici letterali Puntatori a stringhe globali inizializzate Variabili dichiarate const Valori enumerati Funzioni costanti (solo C++0x)
32 Constant propagation Trasformazione Sostituisce i valori costanti nelle espressioni Obiettivo Minimizzare il numero di istruzioni per il calcolo di espressioni Le costanti complesse vengono calcolate una sola volta a compile time Note I compilatori eseguono questa trasformazione
33 Constant propagation Trasformazione Sostituisce le occorrenze di variabili oggetto di assegnamento diretto con il riferimento all oggetto asseganto Obiettivo Minimizzare il numero di operaizoni copia/trasferiento Note I compilatori eseguono questa trasformazione Esempio Codice originale x = y; z = a[i] + y; W = b[j] * x; Codice trasformato z = a[i] + y; W = b[j] * y;
34 Dead store elimination Trasformazione Elimina un asseganmento ad una variabile non usata in seguito Obiettivo Evitare inutili accessi in memoria Note I compilatori eseguono questa trasformazione Si tratta di un caso particolare di dead-code elimination
35 Trasformazioni varie Alcune importanti trasformazioni sono Inlining Tail recursion elimination Conditional expression reordering Function special cases
36 Inlining Trasformazione Replica il codice di una funzione in ogni punto in cui è usata Obiettivo Evitare l overhead di chiamata Salti Note Costruzione e distruzione dello stack I compilatori eseguono questa trasformazione Automaticamente o sotto il controllo dell utente È indispensabile valutare il compromesso tra Efficienza del codice Dimensione del codice Migliori candidati sono le funzioni Di piccole dimensioni Eseguite molto spesso Chaimate da pochi punti del codice
37 Tail recursion elimination Trasformazione Elimina la ricorsione in coda e la trasforma in un ciclo Obiettivo Evitare l overhead di chiamata Costruzione e distruzione dello stack Salti Ridurre l uso dello stack Note Non viene mai eseguita dai compilatori In genere Comporta la ridefinizione dell algoritmo Può essere eseguita in modo standard
38 Tail recursion elimination - Esempio Una funzione è ricorsiva in coda se la chiamata a sé stessa è l ultima operazione eseguita Esempio: Fattoriale non ricorsivo in coda int fact( int n ) { if( n == 0 ) return 1; return n * fact(n - 1); Esempio: Fattoriale ricorsivo in coda int fact_tr( int n, int a ) { if( n == 0 ) return a; return fact_tr(n 1, n * a); int fact( int n ) { fact_tr( n, 1 );
39 Tail recursion elimination - Esempio Ora che si ha ricorsione in coda si può procedere Si eseguono le operazioni sugli argomenti della chiamata ricorsiva secondo quanto previsto dalla chiamata originale int fact_tr( int n, int a ) { if( n == 0 ) return a; a = a * n; n = n - 1; return fact_tr(n, a); Si sostituisce la chiamata con un salto all inizio della funzione int fact_tr( int n, int a ) { beginning: if( n == 0 ) return a; a = a * n; n = n - 1; goto beginning;
40 Conditional expression reordering Trasformazione Modifica l ordine di valutaizone di una condizione logica composta Obiettivo Sfruttare le shortcut evaluations del compilatore Note Sii basa sulla conoscenza delle probabilità che una condizione ha di essere vera o falsa Esempio Se C1 è vera 99 volte su 100, mentre C2 solo 50 volte su 100 (C1 C2) è più efficiente di (C2 C1) (C2 && C1) è più efficiente di (C1 && C2) In generale si pone più a sinistra la condizione Più probabilmente vera per espressioni in OR (1 è il valore forzante dell OR) Più probabilmente false per espressioni in AND (0 è il valore forzante dell AND)
41 Function special cases Trasformazione Elimina la chaiamta ad una funzione in casi speciali Obiettivo Evitare l overhead di chiamata quando il risultato di una funzione è semplice e noto a priori Note Si applica in generale a funzioni matematiche Non è mai applicata dai compilatori poiché richiede la comprensione della semantica della funzione chiamata Esempio Codice originale #include <math.h> x = sin( alpha ); Codice trasformato #include <math.h> x = (alpha == 0.0)? 0.0 : sin( alpha );
Compilatori e Livelli di Compilazione
Compilatori e Livelli di Compilazione Il compilatore Il programmatore ha a disposizione un ampia scelta di compilatori sviluppati per diversi sistemi operativi quali Linux/Unix, Windows, Macintosh. Oltre
Compilatori e Livelli di Compilazione
Compilatori e Livelli di Compilazione Introduction to Fortran 90 Paolo Ramieri, CINECA Aprile 2014 Il compilatore Il programmatore ha a disposizione un ampia scelta di compilatori sviluppati per diversi
Esercitazione su Instruction Level Parallelism
Esercitazione su Instruction Level Parallelism Salvatore Orlando Arch. Elab. - S. Orlando 1 Pipeline con e senza forwarding Si considerino due processori MIPS (processore A e B) entrambi con pipeline a
PREFAZIONE... IX Lo scopo di questo libro... ix La metodologia di insegnamento... ix Panoramica sul libro... xiii
Sommario PREFAZIONE... IX Lo scopo di questo libro... ix La metodologia di insegnamento... ix Panoramica sul libro... xiii CAPITOLO 1: INTRODUZIONE AI COMPUTER, A INTERNET E AL WEB... 1 1.1 Introduzione...
Sommario PREFAZIONE...XI CAPITOLO 1: INTRODUZIONE AI COMPUTER, A INTERNET E AL WEB... 1 CAPITOLO 2: INTRODUZIONE ALLA PROGRAMMAZIONE IN C...
Sommario PREFAZIONE...XI Aggiornamenti e novità... xi Lo scopo di questo libro... xii Diagramma delle dipendenze... xii La metodologia di insegnamento... xiii Panoramica sul libro... xvi Ringraziamenti...
Indice PARTE A. Prefazione Gli Autori Ringraziamenti dell Editore La storia del C. Capitolo 1 Computer 1. Capitolo 2 Sistemi operativi 21 XVII XXIX
Indice Prefazione Gli Autori Ringraziamenti dell Editore La storia del C XVII XXIX XXXI XXXIII PARTE A Capitolo 1 Computer 1 1.1 Hardware e software 2 1.2 Processore 3 1.3 Memorie 5 1.4 Periferiche di
Cos è un algoritmo. Si dice algoritmo la descrizione di un metodo di soluzione di un problema che sia
Programmazione Un programma descrive al computer, in estremo dettaglio, la sequenza di passi necessari a svolgere un particolare compito L attività di progettare e realizzare un programma è detta programmazione
Esercitazione su Instruction Level Parallelism Salvatore Orlando
Esercitazione su Instruction Level Parallelism Salvatore Orlando Arch. Elab. - S. Orlando 1 Pipeline con e senza forwarding Si considerino due processori MIPS (processore A e B) entrambi con pipeline a
Problema: stampa degli interi compresi tra n e m
Costrutti imperativi Problema: stampa degli interi compresi tra n e m http://caml.inria.fr/pub/docs/manual-ocaml/libref/pervasives.html Output functions on standard output val print_string: string -> unit
LA RICORSIONE LA RICORSIONE
LA RICORSIONE Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa La ricorsione consiste nella possibilità di definire una funzione in termini
Università degli Studi di Ferrara
Università degli Studi di Ferrara Corso di Laurea in Matematica - A.A. 2018 2019 Programmazione Lezione 19 Controllo di Flusso in MATLAB Docente: Michele Ferrari - michele.ferrari@unife.it Nelle lezioni
Compilatori e Livelli di Compilazione
Compilatori e Livelli di Compilazione Introduction to modern Fortran Maurizio Cremonesi, CINECA Maggio 2016 compilatore Uncompilatoreè unprogrammache traduce una serie diistruzioniscritte in un determinato
Operativamente, risolvere un problema con un approccio ricorsivo comporta
! Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa!! La ricorsione consiste nella possibilità di definire una funzione in termini di se
Esempio: il fattoriale di un numero fact(n) = n! n!: Z! N n! vale 1 se n " 0 n! vale n*(n-1)! se n > 0. Codifica:
! Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa!! La ricorsione consiste nella possibilità di definire una funzione in termini di se
Compilatori e Livelli di Compilazione
Compilatori e Livelli di Compilazione Paolo Ramieri, CINECA Febbraio 2014 Introduzione Le componenti hardware dei moderni calcolatori, dalle semplici workstation ai più potenti cluster e supercomputer
Indice. Prefazione. 3 Oggetti e Java 53
Prefazione xv 1 Architettura dei calcolatori 1 1.1 Calcolatori e applicazioni 1 1.1.1 Alcuni esempi di applicazioni 3 1.1.2 Applicazioni e interfacce 4 1.2 Architettura dei calcolatori 7 1.2.1 Hardware
INFORMATICA A. Titolo presentazione sottotitolo. Laboratorio n 6 Dott. Michele Zanella Ing. Gian Enrico Conti
INFORMATICA A Titolo presentazione sottotitolo A.A. 2018-19 Milano, XX mese 20XX Laboratorio n 6 Dott. Michele Zanella Ing. Gian Enrico Conti Ricorsione La ricorsione è un approccio per la risoluzione
Fondamenti di Informatica A. A. 2018/19
Fondamenti di Informatica Prof. Marco Lombardi A. A. 2018/19 AlgoBuild: Strutture Iterative e Selettive OUTLINE Blocco condizionale (Struttura selettiva IF - IF/ELSE) Esempi Cicli a condizione iniziale
Introduzione alla programmazione
Introduzione alla programmazione Risolvere un problema Per risolvere un problema si procede innanzitutto all individuazione Delle informazioni, dei dati noti Dei risultati desiderati Il secondo passo consiste
Prof. Pagani Corrado LINGUAGGIO C: SELEZIONE E CICLI
Prof. Pagani Corrado LINGUAGGIO C: SELEZIONE E CICLI IF Ogni linguaggio di programmazione presenta almeno una struttura di controllo decisionale. La sintassi del linguaggio C è la seguente. if ()
n n 1 n = > Il calcolo del fattoriale La funzione fattoriale, molto usata nel calcolo combinatorio, è così definita
Il calcolo del fattoriale La funzione fattoriale, molto usata nel calcolo combinatorio, è così definita n! = 1 n( n 1)! se se n n = > 0 0 dove n è un numero intero non negativo Il calcolo del fattoriale
Le etichette nei programmi. Istruzioni di branch: beq. Istruzioni di branch: bne. Istruzioni di jump: j
L insieme delle istruzioni (2) Architetture dei Calcolatori (lettere A-I) Istruzioni per operazioni logiche: shift Shift (traslazione) dei bit di una parola a destra o sinistra sll (shift left logical):
Instruction Level Parallelism Andrea Gasparetto
Tutorato di architettura degli elaboratori Instruction Level Parallelism Andrea Gasparetto andrea.gasparetto@unive.it IF: Instruction Fetch (memoria istruzioni) ID: Instruction decode e lettura registri
PROGRAMMAZIONE STRUTTURATA
PROGRAMMAZIONE STRUTTURATA Programmazione strutturata 2 La programmazione strutturata nasce come proposta per regolamentare e standardizzare le metodologie di programmazione (Dijkstra, 1965) Obiettivo:
Linguaggio C - le strutture di controllo: sequenza, selezione, iterazione
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C - le strutture di controllo: sequenza, selezione, iterazione
Informatica (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
Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prova in itinere del 24 Gennaio 2011 COGNOME E NOME RIGA COLONNA MATRICOLA
Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prova in itinere del 24 Gennaio 2011 COGNOME E NOME RIGA COLONNA MATRICOLA Spazio riservato ai docenti Il presente plico contiene 3
Fondamenti 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
Lezione 5 e 6. Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza. Valentina Ciriani ( ) Laboratorio di programmazione
Lezione 5 e 6 - Concetto di blocco - Controllo del flusso di un programma - Costrutti per la scelta if e switch - Costrutti while e for - Operatori in C Fabio Scotti (2004-2009) Laboratorio di programmazione
Il principio di induzione. La Ricorsione. Il fattoriale: iterativo. Il fattoriale: ricorsivo. P (0) P (n) P (n + 1) per ogni n
Università Roma La Sapienza Corsi di Laurea Informatica/Tecnologie Informatiche La Ricorsione Prof. Stefano Guerrini guerrini@di.uniroma1.it Programmazione II (can. P-Z) A.A. 2005-06 Il principio di induzione
Compilatori e Livelli di Ottimizzazione
Compilatori e Livelli di Ottimizzazione Introduction to modern Fortran Paride Dagna, CINECA Maggio 2017 compilatore Un compilatore è un programma che traduce una serie di istruzioni scritte in un determinato
Architettura degli Elaboratori
Architettura degli Elaboratori a.a. 2012/13 - primo appello, 3 giugno 2013 Riportare nome, cognome, numero di matricola e corso A/B Domanda 1 In una semplice architettura di CPU pipeline scalare, i registri
Unità Didattica 2 Linguaggio C. Espressioni, Operatori e Strutture linguistiche per il controllo del flusso
Unità Didattica 2 Linguaggio C Espressioni, Operatori e Strutture linguistiche per il controllo del flusso 1 Espressioni e assegnazioni Le espressioni sono definite dalla grammatica: espressione = variabile
Il primo programma C++
Il primo programma C++ Un programma in qualsiasi linguaggio evoluto è una sequenza di istruzioni che la CPU dopo opportune conversioni esegue. La sintassi dei linguaggi di programmazione è molto piu rigida
Operativamente, risolvere un problema con un approccio ricorsivo comporta
LA RICORSIONE Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa La ricorsione consiste nella possibilità di definire una funzione in termini
L'architettura del processore MIPS
L'architettura del processore MIPS Piano della lezione Ripasso di formati istruzione e registri MIPS Passi di esecuzione delle istruzioni: Formato R (istruzioni aritmetico-logiche) Istruzioni di caricamento
Assegnazione di una variabile
Assegnazione di una variabile Per scrivere un valore dentro una variabile si usa l operatore di assegnazione, che è rappresentato dal simbolo =. Quindi, se scrivo int a; a = 12; assegno alla variabile
Istruzioni di trasferimento dati
Istruzioni di trasferimento dati Leggere dalla memoria su registro: lw (load word) Scrivere da registro alla memoria: sw (store word) Esempio: Codice C: A[8] += h A è un array di numeri interi Codice Assembler:
LA RICORSIONE LA RICORSIONE LA RICORSIONE: ESEMPIO LA RICORSIONE: ESEMPIO LA RICORSIONE: ESEMPIO LA RICORSIONE: ESEMPIO
LA RICORSIONE Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa La ricorsione consiste nella possibilità di definire una funzione in termini
Fetch Decode Execute Program Counter controllare esegue prossima
Stored Program Istruzioni sono stringhe di bit Programmi: sequenze di istruzioni Programmi (come i dati) memorizzati in memoria La CPU legge le istruzioni dalla memoria (come i dati) Ciclo macchina (ciclo
Criteri da tenere a mente
2 Alcune considerazioni sul progetto di soluzioni software Criteri da tenere a mente Lo stile di programmazione è importante leggibilità (commenti / nomi significativi di variabili / indentazioni /...)
Domanda 2 Si dica se le seguenti affermazioni sono vere o false, dandone opportuna e sintetica motivazione:
AE A.A. 2018-2019 2 a prova di verifica intermedia Riportare nella prima facciata in alto a destra di ciascuno dei fogli consegnati Nome, Cognome, numero di matricola e corso di appartenenza (A o B). I
Fondamenti 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
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
UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Matlab: esempi ed esercizi
UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA Matlab: esempi ed esercizi Sommario e obiettivi Sommario Esempi di implementazioni Matlab di semplici algoritmi Analisi di codici Matlab Obiettivi
contiene il valore e nel range [l, u]. Funziona correttamente solo se 0 l e u a.
Linear search @pre @post bool LinearSearch(int [] a, int l, int u, int e) { for @ (int i := l;i u;i := i+1){ if (a[i] = e) return true; return false; LinearSearch ricerca il valore e all interno del range
Elementi di Informatica A. A. 2016/2017
Elementi di Informatica A. A. 2016/2017 Ing. Nicola Amatucci Università degli studi di Napoli Federico II Scuola Politecnica e Delle Scienze di Base nicola.amatucci@unina.it Programmazione C++ Parte 1
Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa
LA RICORSIONE Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa La ricorsione consiste nella possibilità di definire una funzione in termini
Silvia Rossi. Cenni sulla complessità. Informatica. Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Programmazione I
Silvia Rossi Cenni sulla complessità 23 Lezione n. Parole chiave: Corso di Laurea: Informatica Insegnamento: Programmazione I Email Docente: srossi@na.infn.it A.A. 2009-2010 Abbiamo visto che dato un problema
Introduzione al Linguaggio C
Introduzione al Linguaggio C Controllo di Flusso Daniele Pighin March 2009 Daniele Pighin Introduzione al Linguaggio C 1/19 Outline Introduzione Branching: if Il ciclo while Il ciclo for break e continue
Aumentare il parallelismo a livello di istruzione (2)
Aumentare il parallelismo a livello di istruzione (2) Architetture Avanzate dei Calcolatori Valeria Cardellini Processori multiple-issue issue Nei processori multiple-issue vengono lanciate più istruzioni
Addendum: istruzioni linguaggio macchina. Università di Bergamo - corso di Calcolatori Elettronici 1
Addendum: istruzioni linguaggio macchina Università di Bergamo - corso di Calcolatori Elettronici 1 Control Loop C code: L1: g = g + A[i]; i = i + j; if (i!= h) goto L1; MIPS code: L1: add $t1, $s3, $s3
LA RICORSIONE! Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa
LA RICORSIONE! Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa La ricorsione consiste nella possibilità di definire una funzione in termini
Le basi del linguaggio Java
Le basi del linguaggio Java Compilazione e interpretazione Quando si compila il codice sorgente scritto in Java, il compilatore genera il codice compilato, chiamato bytecode. È un codice generato per una
LA RICORSIONE. Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa
LA RICORSIONE Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa La ricorsione consiste nella possibilità di definire una funzione in termini
Iterazione determinata e indeterminata
Iterazione determinata e indeterminata Le istruzioni iterative permettono di ripetere determinate azioni più volte: un numero di volte fissato = iterazione determinata, Esempio: fai un giro del parco di
liceo B. Russell PROGRAMMAZIONE INDIRIZZO: SCIENTIFICO SCIENZE APPLICATE BIENNIO: SECONDA DISCIPLINA: INFORMATICA
INDIRIZZO: SCIENTIFICO SCIENZE APPLICATE PROGRAMMAZIONE BIENNIO: SECONDA DISCIPLINA: INFORMATICA PIANO DI LAVORO DEL DOCENTE / RELAZIONE FINALE Anno scolastico 2014/2015 DOCENTE Prof. PAOLO ARMANI CLASSE:
Istruzioni. Istruzioni semplici Istruzioni di controllo. Fondamenti di Informatica e laboratorio Istruzioni e Controllo del flusso
Istruzioni Istruzioni Le istruzioni esprimono azioni che, una volta eseguite, comportano una modifica permanente dello stato interno del programma o del mondo circostante Le strutture di controllo permettono
Fondamenti di Informatica
Fondamenti di Informatica AlgoBuild: Strutture iterative e selettive Prof. Christian Esposito Corso di Laurea in Ingegneria Meccanica e Gestionale (Classe I) A.A. 2016/17 AlgoBuild: Strutture iterative
Architettura degli Elaboratori Appello del 21 febbraio Domanda 1 (tutti)
Architettura degli Elaboratori Appello del 21 febbraio 2011 Riportare su tutti i fogli consegnati nome, cognome, numero di matricola, corso di appartenenza, e la sigla NEW (per nuovo ordinamento), oppure
Analisi e Programmazione
Algoritmi 1 Analisi e Programmazione I Calcolatori Elettronici si differenziano da altri tipi di macchine per il fatto che possono essere predisposti alla risoluzione di problemi di diversa natura. A tale
Istruzioni di controllo del flusso
Istruzioni di controllo del flusso Il flusso di esecuzione è normalmente sequenziale Le istruzioni di controllo cambiano la prossima istruzione da eseguire Istruzioni di salto condizionato branch if equal
Istruzioni di Controllo
Istruzioni di Controllo Programmazione strutturata Ricordiamo i concetti chiave: concatenazione o composizione BLOCCO istruzione condizionale SELEZIONE ramifica il flusso di controllo in base al valore
Corso di Informatica
Corso di Informatica Modulo T1 2-Iterazione 1 Prerequisiti Salto condizionato Salto incondizionato Espressione logica 2 1 Introduzione In alcuni casi si presenta la necessità di eseguire un ciclo, ossia
Fondamenti di Informatica
Fondamenti di Informatica AlgoBuild: Strutture selettive, iterative ed array Prof. Arcangelo Castiglione A.A. 2016/17 AlgoBuild : Strutture iterative e selettive OUTLINE Struttura selettiva Esempi Struttura
Il Linguaggio Assembly: Controllo del flusso: istruzioni e costrutti
Il Linguaggio Assembly: Controllo del flusso: istruzioni e costrutti Prof. Alberto Borghese Ing. Iuri Frosio Dipartimento di Scienze dell Informazione borghese,frosio@dsi.unimi.it Università degli Studi
del Linguaggio C Istruzioni di iterazione
Istruzioni i Iterative ti del Linguaggio C Istruzioni di iterazione Le istruzioni di iterazione forniscono strutture di controllo che esprimono la necessità di ripetere una certa istruzione durante il
1) Un calcolatore con processore R3000 avente frequenza di clock pari a 2GHz esegue il seguente programma:
(versione riveduta da errori di stampa) MATRICOLA COGNOME NOME 1) Un calcolatore con processore R3000 avente frequenza di clock pari a 2GHz esegue il seguente programma:.text addi $12,$0,2 addi $10,$0,288
Si possono applicare solo a variabili (di tipi interi, floating o puntatori), ma non a espressioni generiche (anche se di questi tipi).
Operatori di incremento e decremento: ++ e -- ++ e -- sono operatori unari con la stessa priorità del meno unario e associatività da destra a sinistra. Si possono applicare solo a variabili (di tipi interi,
Introduzione al MATLAB c Parte 2
Introduzione al MATLAB c Parte 2 Lucia Gastaldi Dipartimento di Matematica, http://dm.ing.unibs.it/gastaldi/ 24 settembre 2007 Outline 1 M-file di tipo Script e Function Script Function 2 Elementi di programmazione
Indice. costrutti decisionali I cicli
Sintassi II Parte Indice Durante l'esecuzione di un codice, un programma può ripetere segmenti di codice, o di prendere decisioni e biforcarsi. A tal fine, il C fornisce istruzioni per il controllo di
Introduzione alla Programmazione e Applicazioni per la Finanza M2 (Prodotti Derivati) Lezione 10
Introduzione alla Programmazione e Applicazioni per la Finanza M2 (Prodotti Derivati) Lezione 10 Anno accademico 2006-07 Titolare corso: Prof. Costanza Torricelli Docente: Dott.ssa Marianna Brunetti La
Tela (Teaching Language)
Tela (Teaching Language) Paradigma imperativo Dichiarazioni di variabili, costanti, moduli Programma strutturato in moduli innestati Scope statico Passaggio dei parametri per valore Corpo del modulo =
Calcolo Numerico A.A Lab n
Calcolo Numerico A.A. 2014-2015 Lab n. 3 29-10-2014 Elementi di programmazione Programmare in MATLAB Alcune strutture di programmazione elementari Operatori relazionali: =, ==, = Operatori logici:
Un quadro della situazione. Lezione 15 Il Set di Istruzioni (3) Dove siamo nel corso. Organizzazione della lezione. Cosa abbiamo fatto
Un quadro della situazione Lezione 15 Il Set di Istruzioni (3) Vittorio Scarano Architettura Corso di Laurea in Informatica Università degli Studi di Salerno Input/Output Sistema di Interconnessione Registri
CALCOLATORI ELETTRONICI 25 giugno 2018
CALCOLATORI ELETTRONICI 25 giugno 2018 NOME: COGNOME: MATR: Scrivere chiaramente in caratteri maiuscoli a stampa 1. Si implementi per mezzo di porte logiche OR, AND, NOT la funzione combinatoria (a 3 ingressi
Prefazione Unit`a di misura xiii La memoria cache
Indice Prefazione Unità di misura xi xiii 1 La memoria cache 1 1.1 Tempo di accesso........................... 1 1.1.1 Funzionamento........................ 2 1.2 Organizzazione............................
Programmazione Strutturata
Programmazione Strutturata Problema: Spaghetti Code è un termine dispregiativo per quei programmi per computer che abbiano una struttura di controllo del flusso complessa e/o incomprensibile Ad esempio,
PROGRAMMA = ALGORITMO
Corso di Laurea Scienze Prof. San. Tec., Area Tecnico-Assistenziale SISTEMI DI ELABORAZIONE DELLE INFORMAZIONI Anno Accademico 2005-2006 Prof. Fausto Passariello Corso Integrato Metodologia della Ricerca
Programmare con MatLab IV
Programmare con MatLab IV IV_Matlab Carla Guerrini 1 Programmazione Matlab MATLAB non è un vero e proprio linguaggio di programmazione, ma permette comunque di realizzare programmi utilizzando le classiche
Strutture di controllo in C++
Strutture di controllo in C++ Fondamenti di Informatica R. Basili a.a. 2006-2007 Il controllo: selezione Spesso la sequenza delle istruzioni non e prevedibile a priori ma dipende strettamente dalle configurazioni
Laboratorio di Python
Problem solving, Ricorsione, 14 marzo 2014 Sommario 1 2 3 4 Sintassi ed Esempi Esercizi Lunedì il numero di studenti che avevano consegnato gli esercizi era 13. Martedì il numero di esercizi ricevuti,
Laboratorio di Python
Problem solving, Ricorsione, Università di Bologna 13 e 15 marzo 2013 Sommario 1 2 3 4 Errore di semantica Esercizio def vocali(s): voc='' for c in s: if c in 'aeiou': voc=voc+c return voc Cerchiamo di
Architettura degli Elaboratori
Architettura degli Elaboratori Appello del 8 giugno 2011 e seconda prova di verifica intermedia Domanda 1 (tutti) Una unità di elaborazione U, comunicante con una unità di ingresso e una di uscita, è descritta
Linguaggio C++ 5. Strutture cicliche
2009-2010 Ingegneria Aerospaziale Prof. A. Palomba - Elementi di Informatica (E-Z) Linguaggio C++ 5 Strutture cicliche Linguaggio C++ 5 1 Strutture cicliche Utilizzate per ripetere un certo numero di volte
Di cosa parliamo oggi?
Di cosa parliamo oggi? Oggi parliamo di Analisi di Algoritmi Analisi di Algoritmi = valutazione delle risorse usate da algoritmi per risolvere un dato problema Risorse = Tempo impiegato dall algoritmo
ISTRUZIONI DI ITERAZIONE
CHAPTER 6 CICLI 1 ISTRUZIONI DI ITERAZIONE Le istruzioni di iterazione sono usate per realizzare I cicli. Un ciclo è una istruzione il cui compito è di eseguire ripetutamente qualche altra istruzione (il
Operatori in Java. Il Costrutto Condizionale if
Operatori in Java Operatore Tipo Semantica > binario maggiore >= binario maggiore o uguale < binario minore
Calcolare lo Span di un array di numeri
Calcolare lo Span di un array di numeri Altro esempio di come usare una pila come struttura dati ausiliaria per un algoritmo: Dato un array X, lo span S[i] di X[i] è il massimo numero di elementi consecutivi
Cast implicito. Il cast è fatto automaticamente quando un tipo più basso viene assegnato ad un tipo più alto. byte short int long float double
Il cast Cast implicito Il cast è fatto automaticamente quando un tipo più basso viene assegnato ad un tipo più alto Per esempio: byte short int long float double int x = 10; float f; f = x; Il valore di
Università degli Studi di Ferrara
Università degli Studi di Ferrara Corso di Laurea in Matematica - A.A. 2018-2019 Programmazione Lezione 5 Controllo di Flusso Docente: Michele Ferrari - michele.ferrari@unife.it Informazioni Inizio tutorato
Architettura del processore e esecuzione delle istruzioni
Architettura del processore e esecuzione delle istruzioni Prof. CAPEZIO Francesco Quest'opera è soggetta alla licenza Creative Commons Attribuzione Non Commerciale Introduzione Il compito di un processore
Octave. Luca Abeni. Informatica Luca Abeni 1 / 21
Luca Abeni Informatica Luca Abeni 1 / 21 Linguaggi di Programmazione di Alto Livello Parole chiave: possibilmente con significato in inglese Ma agli informatici piacciono molto contrazioni e acronimi...
Algebra di Boole: Concetti di base. E un algebra basata su tre operazioni logiche
Fondamenti di Informatica Algebra di Boole: Concetti di base Fondamenti di Informatica - D. Talia - UNICAL Algebra di Boole E un algebra basata su tre operazioni logiche OR AND NOT Ed operandi che possono
COMPLESSITÀ COMPUTAZIONALE. Fondamenti di Informatica A - Massimo Bertozzi
COMPLESSITÀ COMPUTAZIONALE Tipi di complessità Consideriamo l'analisi della complessità di un programma da due punti di vista: spazio tempo Complessità Spaziale Lo spazio utilizzato da un programma può
Architettura degli Elaboratori
Architettura degli Elaboratori Anno Accademico 2014-2015- Seconda prova di verifica intermedia (Risultati e calendario degli orali saranno pubblicati sulla pagina web del corso appena disponibili) Si consideri
Introduzione alla programmazione in C
Introduzione alla programmazione in C Testi Consigliati: A. Kelley & I. Pohl C didattica e programmazione B.W. Kernighan & D. M. Ritchie Linguaggio C P. Tosoratti Introduzione all informatica Materiale