Sei sulla pagina 1di 57

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 00000000000010001000100001000000
Il programmatore L’assemblatore traduce l’istruzione
scrive in una sequenza di bit
questa istruzione
(somma A a B)
Il Flusso completo

Molti compilatori
saltano questa fase
Prestazioni
Componente Perche’ influenza Dove e’ trattato?
HW/SW
Algoritmi Determina il numero di Altri corsi
istruzioni di alto livello e di
operazioni di IO
Linguaggi di Determina il numero di Cap. 2, 3
programmazione, istruzioni macchina per ogni
compilatori e istruzione di alto livello
architetture
Processore e Determinano quanto Cap. 4, 5 e 6
sistema di velocemente e’ possibile
memoria eseguire ciascuna istruzione

Sistema di I/O (HW Determina quanto Cap. 4, 5 e 6


e sistema velocemente possono essere
operative) eseguite le operazioni di I/O
Componenti del
Calcolatore
Le elaborazioni dei
dati sono effettuate
dal Processore (diviso in
una parte operativa e
una di controllo)

I dati vengono memorizza-


ti 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?

Tuttavia, se il sistema
Il throughput e’ molto carico,
almeno a diminuisco il tempo di
parita’ di processore 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

Interferenza
dovuta
Agli altri task Tempo di CPU
Tempo di Risposta Utente
Tempo di
esecuzione
della CPU 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


Istruzioni di ciascun tipo
Istruzione
Istr / A B C Sequenza A B C
CPI
Seq. 1 2 1 2
1 2 3 Seq. 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 Calcolatore A Calcolatore B

Numero Istruzioni 10 10^9 8 10^9


Frequenza di Clock 4Ghz 4 Ghz
CPI 1 1.1

•Quale dei due ha MIPS piu’ alto? MIPS: A


•E quale prestazioni migliori? Prestazioni: B