Corso di Calcolatori Elettronici Introduzione Luigi Palopoli e Luca Abeni Descrizione del corso • Essenzialmente lezioni teoriche • In aggiunta, qualche “esercitazione” sugli aspetti del corso che lo consentono (aritmetica, reti logiche, linguaggio assembler) • 48 ore di didattica frontale • Gli argomenti trattati trovano un loro naturale complemento nel corso di Elettronica digitale (tenuto dal Prof. Passerone) Modalità di esame • Non sono previste per difficoltà organizzative prove intermedie, • L’esame si compone di una prova scritta composta da quesiti a risposta multipla • Durante il corso, esercizi su argomenti che incontrerete all’esame. Modalità di esame • 12 domande a risposta multipla ● 5 risposte per domanda • Per ottenere 18: ● 6 risposte corrette ● Nessuna risposta sbagliata • Per ottenere 30 e lode: ● 12 risposte corrette • Ogni risposta sbagliata toglie 1/5 dei punti dati da una risposta giusta Calcolatori • I calcolatori elettronici sono il prodotto di una tecnologia estremamente vitale • Produce il 10% del PiL degli Stati Uniti e pervade le nostre vite • ....e tutto cominciò da..... ENIAC • Nel1943 il dipartimento della difesa degli Stati Uniti commissionò una macchina per il calcolo delle traiettorie dei proiettili di artiglieria • Nel Febbraio 1946 l’Università della Pensylvania mise in funzione ENIAC Occupava una stanza di 9X30 Metri Consumava così tanta energia che alla prima accensione genero’ un blackout ENIAC Una profezia pessimistica “Mentre...L’ENIAC e’ dotato di 18000 valvole e pesa 30 tonnellate, i calcolatori del futuro potranno avere solo 1000 valvole e pesare solo una tonnellata e mezzo”, Popular mechanics 1949 La rivoluzione dei calcolatori • I calcolatori hanno creato la terza rivoluzione della nostra società portandoci nel mondo post industriale • Solo pochi anni fa le seguenti applicazioni erano considerate fantascienza Calcolatori negli automobili Telefoni cellulari Mappatura del genoma umana World Wide Web Motori di ricerca Calcolatore o calcolatori? • I calcolatori che operano nelle applicazioni che abbiamo introdotto condividono la stessa idea di base.... • Ma le soluzioni usate per ciascuna tipologia di applicazione possono essere piuttosto diverse • Per questo parliamo di vari tipi di calcolatori Vari tipi di calcolatori • PC (Desktop o Laptop) Buone prestazioni a costo ridotto Eseguono software di terze parti • Server Pensati per grandi carichi di lavoro ● ● poche applicazioni molto complesse (caclolatori scientifici) tantissime applicazioni molto semplici (web server) • Embedded Vasto spettro di applicazioni (mobile, automotive, avionica, play stations) Applicazioni spesso “dedicate”, operano in stretto contatto con l’hardware Requisiti non funzionali essenziali (consumi, rispetto di vincoli temporali, costo) Perché studiarli? • Prestazioni del software: importanti nel determinarne il successo ● Un programma che esegue più velocemente o che ha minori requisiti hardware ha maggiori probabilità di soddisfare le aspettative del cliente In passato, prestazioni dominate dalla disponibilità di memoria ● Oggi questo è un problema solo per le applicazioni embedded ● Prestazioni • Per scrivere un programma con buone prestazioni il programmatore moderno deve: comprendere la gerarchia di memoria fare l’uso piu’ efficiente del parallelismo • Più semplicemente: deve conoscere l’organizzazione del calcolatore come un calcolatore esegue i programmi come accede alla memoria ... Obbiettivi del corso • Alla fine del corso, sapremo: Quali sono le componenti di base che permettono a un calcolatore di operare? Come vengono tradotti i programmi in modo che il calcolatore possa eseguirli? Qual’e’ l’interfaccia HW/SW utilizzabile per far fare all’HW cio’ che richiede? Cosa influenza le prestazioni di un programma e come e' possibile migliorarle? Cosa puo’ fare il progettista HW per migliorare le prestazione e perche’ ricorre sempre di piu’ al multicore? Linguaggio Macchina • Il componente base di un calcolatore sono le porte logiche, che corrispondono a interruttori • Unita’ base di informazione: bit. Vale 1 se acceso e 0 se spento • Anche un’istruzione di linguaggio macchina deve dunque essere codificata come una sequenza di bit • Ad esempio 1000110010100000 Programmazione Assembly • Programmare tramite sequenze di bit e’ estremamente difficile • Linguaggio mnemonico (assembly) che viene tradotto in sequenze di bit da un traduttore (assembler) • Ad esempio..... add A, B Il programmatore scrive questa istruzione (somma A a B) 00000000000010001000100001000000 L’assemblatore traduce l’istruzione in una sequenza di bit Il Flusso completo Molti compilatori saltano questa fase Prestazioni Componente HW/SW Perche’ influenza Dove e’ trattato? Algoritmi Determina il numero di istruzioni di alto livello e di operazioni di IO Altri corsi Linguaggi di programmazione, compilatori e architetture Determina il numero di istruzioni macchina per ogni istruzione di alto livello Cap. 2, 3 Processore e sistema di memoria Determinano quanto velocemente e’ possibile eseguire ciascuna istruzione Cap. 4, 5 e 6 Sistema di I/O (HW e sistema operative) Determina quanto velocemente possono essere eseguite le operazioni di I/O Cap. 4, 5 e 6 Componenti del Calcolatore Le elaborazioni dei dati sono effettuate dal Processore (diviso in una parte operativa e una di controllo) I dati vengono memorizzati nelle unita’ di memoria I dispositivi di input (tastiera, mouse, ...) e quelli di output (video, stampanti, ...) Permettono di scambiare informazioni con l’esterno Dentro il PC La scheda madre e’ una piastra su cui sono montati i vari circuiti integrati (chip) La memoria volatile e’ costituita da vari banchi di (tipicamente) 8 chip di RAM dinamica La memoria permanente e’ costituita da hard-disk e CD/DVD ROM Il processore • Processore: parte attiva del calcolatore Datapath: esegue le operazioni aritmetiche sui dati Parte di controllo: indica al datapath, alla memoria, e alle componenti di IO cosa fare sulla base di quanto stabilito nel programma Interfacce HW/SW • Astrazioni: permettono di gestire un progetto di grande complessita’ nascondendo i dettagli • Dettagli del processore “nascosti” esportando come interfaccia l’insieme delle istruzioni macchina che il processore offre (Instruction Set Architecture) • Insieme all’interfaccia del sistema operativo, l’ISA costituisce l’interfaccia binaria delle applicazioni ● (Application Binary Interface) • Una volta definita una ABI, lo sviluppatore e’ svincolato da come queste cose sono implementate. La memoria • La memoria si distingue in due tipi: volatile (dominata dalle DRAM) non volatile (esempio: dischi rigidi) • Memoria volatile: usata per memorizzare dati e programmi mentre questi vengono eseguiti. Per questo motivo viene detta memoria principale Allo spegnimento i dati vengono persi • Memoria non volatile (o persistente): usata per memorizzare dati e programmi tra esecuzioni diverse. Vista la quantita’ enorme di dati memorizzati si parla di memoria di massa Memorie di massa • Attualmente abbiamo essenzialmente tre tipi di memorie di massa Memorie Flash Dischi rigidi CD/DVD • Memorie Flash: molto simili a memorie RAM. Dati memorizzati intrappolando una carica elettrica. Il fenomeno fisico usato dalle Flash consente alla carica di essere intrappolata in maniera permanente Valutare le Prestazioni • La complessita’ di un moderno calcolatore rende la valutazione delle prestazioni tutt’altro che banale • Quando si parla di prestazioni, e’ importante capire: Di quali prestazioni parliamo Come si misurano Definizione di Prestazioni Consideriamo i seguenti aereoplani • Supponiamo che la metrica di interesse sia la velocita’. Definizione di Prestazioni • Cosa intendiamo per velocita’? • Possibili definizioni: • Trasportare un singolo passegero da un luogo a un altro nel minor tempo possibile (Vincitore Concorde) Trasportare 450 passegeri nel minor tempo possibile (Vincitore Boeing 747) Definizione di Prestazioni • Analogamente per un calcolatore desktop possiamo avere due tipi di prestazioni. Per il singolo utente interessa sapere quanto e’ il tempo medio di risposta (tempo che intercorre tra avvio e terminazione di un task) Per il gestore di un centro di calcolo, interessa di piu’ il throughput, cioe’ quanti task sono in grado di completare nell’unita’ di tempo Esempio • Se scelgo un processore piu’ veloce miglioro il throughput o il tempo di risposta? Entrambi •Se uso un multiprocessore miglioro il throughput o il tempo di risposta? Il throughput almeno a parita’ di processore Tuttavia, se il sistema e’ molto carico, diminuisco il tempo di attesa, e quindi il tempo di risposta Tempo di Esecuzione • In questo corso, definiremo le prestazioni sopratutto in termini di tempo di esecuzione • Per un calcolatore X •Quindi, dati due calcolatori diremo: Tempo di Esecuzione Analogamente diremo che il calcolatore X e’ n volte superiore (piu’ veloce) del calcolatore Y se e solo se: Ma cosa si intende per tempo di esecuzione? Il tempo di esecuzione di un programma e’ il suo tempo di risposta: cioe’ quanto tempo occorre per il completamento di un task (mettendo insieme esecuzione, IO, latenze di sistema operativo, ecc. ) Tempo di Esecuzione • In una macchina multiprogrammata il tempo di risposta dipende anche dagli altri task attivi e dalle loro priorita’ • Il tempo di esecuzione della CPU tiene conto solo del tempo effettivamente speso per il task • Tale tempo e’ in parte dedicato al programma utente e in parte al sistema operativo Tempo di Risposta Interferenza dovuta Agli altri task Tempo di esecuzione della CPU Tempo di CPU Utente Tempo di CPU Sistema Capire le Prestazini • Moderni processori: costruiti usando un segnale periodico che ne sincronizza le operazioni • Il ciclo di clock: intervallo di tempo che intercorre tra due colpi di clock ● Misurato in secondi (o in frazioni di secondo) ● Frequenza misurata in Hertz • Esempio: un clock che va a un Gigahertz (10^9 Hertz) equivale a un periodo di clock pari a 10^-9 secondi (un miliardesimo di secondo) Calcolo del Tempo di CPU • Il tempo di calcolo di un programma puo’ essere espresso nella seguente maniera Esempio Il nostro programma esegue in 10s sul calcolatore A che e’ dotato di un clock che funziona a 2GhZ. Un progettista vuole proporci una nuova architettura che puo’ operare a frequenze significativamente piu’ alte. Propone una modifica al processore che porterebbe ad aumentare di un fattore 1.2 i cicli macchina necessari a eseguire le varie istruzioni. A che frequenza dovrebbe operare la macchina per portare il nostro programma a eseguire in 6s? Esempio • Calcolo dei cicli di clock sul computer A • Calcolo della frequenza di clock necessaria Numero di cicli • Il numero di cicli richiesto da un programma e’ influenzato dal numero di istruzioni che compongono il programma • Tale numero viene moltiplicato per il numero di cicli medio richiesto da ciascuna istruzione •Il numero medio di cicli per istruzione viene denotato da CPI Esempio Siano date due diverse implementazioni della stessa ISA. La prima (A) ha un ciclo di clock di 250ps, la seconda (B) di 500ps. Nel programma di riferimento che ha numero di istruzioni I il CPI e’ pari a 2.0 per A e a 1.2 per B. Quale delle due architetture esegue piu’ rapidamente il nostro programma? Esempio • Architettura A • Architettura B Esempio • Da questo concludiamo Equazione Classica • Siamo ora in grado di scrivere l’equazione classica delle prestazioni Esempio di Uso • Un progettista di compilatori deve scegliere tra due sequenze di codice per implementare un certo tipo di programma CPI per tipo di Istruzione Istr / CPI A 1 B 2 Istruzioni di ciascun tipo C 3 Sequenza A B C Seq. 1 Seq. 2 2 1 2 4 1 1 Soluzione • Possiamo calcolare il numero di cicli richieste da ciascuna sequenza usando la formula: •Quindi conviene l’architettura 2 Tirando un po’ di somme... • Modo migliore per valutare le prestazioni di una computer: misurare il tempo necessario per l’esecuzione di un programma • Tale tempo e’ il risultato di tre fattori: Numero istruzioni CPI Frequenza di clock Componenti delle prestazioni • Nessuna delle tre componenti puo’ essere trascurata Non ha nessun senso dire che un processore e’ piu’ veloce di un altro perche’ ha un clockrate piu’ alto • Ha dunque senso cercare di capire come i diversi componenti e gli strumenti usati nello sviluppo abbiano impatto sulle prestazioni (in particolare su ciascuna dei tre fattori) Algoritmo • L’algoritmo adottato certamente influenza il numero di istruzioni ed eventualmente il CPI • Perche’? Un algoritmo piu’ efficiente puo’ essere strutturato in modo da risparmiare istruzioni Un algoritmo ben pensato (per una particolare architettura) andra’ ad usare le istruzioni pi’ efficienti (quelle con un basso CPI) Linguaggio di programmazione • Il linguaggio di programmazione influenza il numero di istruzioni e il CPI • Perche’? I costrutti ad alto livello vengono tradotti in sequenze di istruzioni macchina Un linguaggio con molte chiamate indirette (es. Java) ha in generale un valore di CPI piu’ alto Compilatore • Il compilatore sicuramente influenza sia il numero di istruzioni che il CPI • Perche’? Un compilatore piu’ o meno efficiente genera un numero di istruzioni macchina diverso per ogni istruzione Un compilatore ottimizzante puo’ tenere conto di una serie di effetti piuttosto complessi per ridurre il CPI ISA • Architettura del set di istruzioni (ISA): ”interfaccia” macchina / software • Ha impatto sul numero di istruzioni, sulla frequenza di clock e sul CPI Numero di istruzioni: l’ISA puo’ fornire istruzioni di alto o basso livello (quindi piu’ o meno istruzioni per eseguire un’operazione) CPI: il modo in cui un’ISA e’ progettata influenza il numero di cicli per eseguire ciascuna istruzione Un’ISA ben disegnata permette di avere frequenze piu’ spinte La barriera dell'energia • Processore: costituito di moltissimi interruttori che dissipano energia quando sono in fase di conduzione (commutazioni tra zero e uno) • Limite alla capacita’ di estrarre la potenza prodotta tramite ventole o radiatori (diciamo intorno ai 100W) • Superato questo limite la refigerazione diventa molto costosa e non e’ attuabile in un normale desktop (per non parlare del laptop) • La potenza e’ data da: La barriera dell’energia • Frequenza di commutazione: legata alla frequenza di clock ... • Negli scorsi anni, piccolo miracolo: aumentare in 20 anni la frequenza di 1000 volte a spese di un aumento di consumi di un fattore 30 Come hanno fatto? • “Trucco”: abbassare la tensione di alimentazione che agisce in maniera quadratica • In venti anni, da tensioni di alimentazione di 5V ai circa 1.2V attuali • Questo ha permesso di incrementare la frequenza con impatti limitati sui consumi • Sfortunatamente non ci si puo’ spingere oltre lungo questa direzione perche’ se si abbassa la tensione sotto il Volt ci sono dei fenomeni di scarica in condizioni statiche che aumentano la dissipazione anche lontani dalle fasi di commutazione Una nuova strada • Impossibilita’ di riuscire a drenare una grossa quantita’ di calore: saturazione delle prestazioni del processore • Nuova strada: aumentare il parallelismo (architetture multicore) • Difficolta’ al programmatore: correttezza: e’ molto piu’ difficiule fare un programma che operi in maniera sequnziale rispetto a uno che opera in maniera “parallela” Effficienza:occore che il carico di lavoro sulle CPU si mantenga bilanciato Pitfall 1 • Errori nell’analisi delle performance • Primo errore: “Aumentando le prestazioni di un componente si riesce ad ottenere un aumento corrispondente delle prestazioni” Consideriamo un programma che impiega 80s per operazioni di moltiplicazione e 20s in altre operazioni Di quanto si deve migliorare la moltiplicazione per ridurre a 1/5 il tempo di calcolo? Non si PUO’. Dovremmo scendere sotto i 20s ma 20s sono dovuti ad altre operazioni Pitfall 2 • Errore “non tenere conto di tutti i termini dell’equazione delle prestazioni” • Spesso viene usato il MIPS (Mega Instructions Per Second) per valutare le prestazioni •Conclusione: un calcolatore e’ piu’ veloce di un altro perche’ esegue piu’ istruzioni al secondo. Pitfall 2 • SBAGLIATO! • MIPS non tiene conto della complessita’ delle istruzioni Puo’ darsi che un’architettura esegua piu’ istruzioni al secondo di un’altra ma che queste ultime siano piu’ potenti Il MIPS varia molto con il programma Il CPI puo’ variare anche di un Ordine di grandezza per i vari benchmark. Cosi’ il MIPS Pitfall 2 (Esempio) • Consideriamo i seguenti calcolatori che eseguono lo stesso programma Misura Numero Istruzioni Frequenza di Clock CPI Calcolatore A Calcolatore B 10 10^9 4Ghz 1 •Quale dei due ha MIPS piu’ alto? •E quale prestazioni migliori? 8 10^9 4 Ghz 1.1 MIPS: A Prestazioni: B