La struttura moderna degli elaboratori sono basati principalmente sull’architettura di Von Neuman, l’unica differenza è che gli elementi di questa architettura.
Struttura e funzione della CPU
La CPU si può dividere in tre parti principali:
- Una unitĂ di controllo che coordina i processi
- Registri che immagazzinano temporaneamente piccole quantitĂ di informazioni
- ALU che fa i calcoli ordinategli dalla CPU
Registri Principali
- Program Counter o Instruction Pointer
- Contiene un pointer all’istruzione da eseguire così lo prende dalla memoria
- Instruction Register
- Contiene l’istruzione da eseguire
- Memory Address Register
- Prende l’indirizzo del contenuto interessante dalla memoria
- Memory Data Register
- Prende il contenuto dalla memoria
- Program Status Word
- Raccoglie lo stato di esecuzione del programma, se fallisce se tutto ok oppure se ci sono errori
ALU
Aritmetic Logic Unit, è la componente che fa i calcoli. Per sapere cosa deve fare, è la Control Unit che collega certe vie dai registri all’ALU. A seconda del genere di architettura può collegarsi direttamente in memoria (CISC) oppure sempre passando per i registri (solitamente RISC)
Central Control Unit
Il processore che decide cosa fare, se chiedere qualche altro pezzo dalla memoria seguendo il processo FDE Fetch Decode, Execute, oppure Scrivere qualcosa in memoria e cose simili.

Filosofie Architetturali
Complex Instructions Set Computer and Reduced Instructions Set Computer definiscono delle filosofie di architettura degli elaboratori differenti.
CISC e microprogrammazione
Utilizza una interpretazione che credo sia cosa a cui il prof. ha riferito come microprogrammazione, ovvero una programmazione delle istruzioni a livello molto basso.
Questo livello di interpretazione rallentava la macchina, perchĂ© non era direttamente eseguito sull’hardware. Inoltre la tendenza ad accedere direttamente la memoria **rendeva questo modello a volte imprevedibile in termini di tempo
-
Esempio di microprogramma
Chiaro che se questo interamente fosse considerato una istruzione, ci sarebbe un alto bisogno di cicli di clock (diventarebbe in generale piĂą lento).
RISC e peculiaritĂ
Una delle peculiaritĂ principali delle architetture RISC è il numero ridotto di istruzioni necessarie (che però erano molto veloci perchĂ© girava direttamente sull’hardware).
Inoltre ha introdotto un sistema load store con cui affacciarsi alla memoria.

Alcuni confronti
La filosofia attuale è la RISC, però a causa della grande presenza di elaboratori CISC, si è preferito creare architetture ibride che comprendano entrambi: presenza di istruzioni complesse che vengano eseguite su istruzioni harware di RISC. → Minore ciclo di Clock e quindi maggiore velocità .
La differenza principale è che CISC possiede istruzioni complesse molte dei quali vanno ad accedere la memoria (la parte lenta del processo) invece la RISC possiede soltanto i comandi load and store per accedere alla memoria, il resto delle istruzioni opera all’interno del microprocessore.
VelocitĂ CPU
Clock e Data Path Cycle
Il significato di clock è spiegato molto meglio nella sezione dei Circuiti Sequenziali
Clock è tempo per l’istruzione piĂą corta, se fosse ancora piĂą corta è molto probabile che la CPU verrebbe indotta in errori molto comuni per cui il computer non funzionerebbe piĂą (un istruzione viene eseguita quando il precedente non è ancora finito).
Una Data Path Cycle è l’intero processo che comporta lettura dai registri, calcolo e registrazione del risultato
Aumentare la velocitĂ
Ci sono delle soluzioni per rendere la CPU piĂą veloce:
- Migliori reti elettriche (agli informatici non interessa)
- Overclocking (per un pò)
- Memoria cache (spesso in RISC)
- Multi-core
- Pipelining
- Parallelismo
- Esattamente come una linea di assemblaggio di fabbrica, possiamo definire alcune parti per processi specifici.
- Parallelismo
Parallelismo
Circa 3-4 volte piĂą veloce e poco costoso per crearlo, in quanto i pezzi sono efficienti, con pipeline di 5 sotto c’è bisogno di una sola ALU a differenza di 5 per avere funzionalitĂ simili.
Pipelining
Spesso alcune istruzioni sono ottimizzate in termini di tempo nel caso sia presente la pipeline o meno, per cui è interessante poter averlo a mente. Parallelismo livello istruzione
Esempio:
5 step.
- Carica l’istruzione
- Interpreta l’istruzione
- Fetch dei dati necessari
- Esecuzione dopo aver ricevuto i dati
- Scrittura del risultato.
Ogni singola istruzione passa ogni volta secondo questa pipeline, che lavorano in parallelo, velocizzando il CHIP.
Multicore - SIMD vs MIMD
Ci sono dei computer moderni che contengono molteplici CPU uguali a quanto descritti in 3.1.1
SIMD
Single instruction-stream multiple data-stream *Istruzioni a dati diversi: Tutte le CPU hanno lo stesso stream di dati (magari elaborazione immagini, un qualcosa di ripetitivo su stessa cosa)
Si guadagna in control unit, unica, fetch unica.
Esistono anche i processori vettoriali.

Di solito questo genere di architettura sono utili per istruzioni uguali a dati diversi come l’elaborazione di un immagine
MIMD
La differenza dal precedente è che l’istruction stream è multiplo, ma un pò piĂą costoso perchĂ© ci sono molte CPU complete.
Avere troppe CPU su una memoria condivisa non andrebbe bene, perché si dovrebbero aspettare. Meglio avere una rete fra CPU per cose grosse.

Cioè se collegassi troppe CPU, probabilmente l’unico bus andrebbe in stallo perchĂ© tutti cercherebbero ad accedere alla stessa memoria, e le CPU dovrebbero attendersi fra di loro, cosa non buona per la performance.
Rete di Computer
Una soluzione che si solito viene utilizzata dalle grandi aziende o comunque chi possiede le risorse è la costruzione di grandi reti di calcolatori che possano operare all’unisono, o comunque con certo criterio. Dovrebbero essere un sacco di CPU separate che comunicano con un computer centrale che agisce come da UnitĂ di Controllo.
Di solito Multi-core e reti di computer sono conosiderati parallelismo a livello processore
Le redi di computer sono solitamente facili da costruire ma difficile da programmare, mentre invece un multicore è difficile da costruire ma facile da programmare.
Invece il pipelining è considerato un parallelismo a livello istruzione.
Prefetch-istruzioni
Questa cosa è molto simile al prefetch della Memoria cache.
Instruction Fetch Unit sono elementi di Hardware che caricano l’istruzione successiva nel momento in cui la presente è in esecuzione.
Questo avviene perchĂ© il caricamento dell’istruzione è spesso molto lenta.
Questa instruction cache prefecht può essere implementata a due livelli, Hardware o software.

Pipeline (e salti)

Esempio di pipeline
L’esempio fatto qui è giĂ considerabile come un primo passo di Pipeline, in cui molteplici passi possono essere fatti allo stesso momento dentro la CPU.
Solamente la prima esecuzione servono 5-7 clock (a differenza delle parti), quindi basta un ciclo di clock per la fase piĂą lunga per essere sicuri, ecco che riusciamo a completare l’istruzione in modo molto piĂą veloce.
Se una singola istruzione dovrebbe fare tutto, saremmo costretti a tenere un clock molto elevato e il computer nel complesso sarebbe molto lento.
Salti
Se faccio un salto allora c’è un buco nel pipeline, ossia cose nel pipeline che non eseguono (perchĂ© devo saltare), cioè fetch e decode di certe istruzioni non mi devono servire.
(ho decodato una istruzione) ma nel frattempo ho giĂ caricato 4 e 5 che non mi servono!
Questo è un aspetto principale per processori superscalari, vedi Adv.
Predizione di salti
Possiamo utilizzare certe euristiche (ragionamenti caso per caso) per predire alcuni salti.
Salti all’indietro
Si possono prevedere per cicli while e for dei salti all’indietro.
Per salti incondizionati si può mettere una instruzione NOP in modo che faccia salti incondizionati senza sprecare istruzioni.
-
Esempio data race (read after write)
AX = 0
BX = 0
DX = 0
AX = DX + 1
BX = AX - 1
- fetch a
- decode a, fetch b
- leggo DX (a) , decode b
- DX + 1 (a), leggo AX (b) MA STO LEGGENDO TROPPO PRESTO!
Quindi devo chiudere AX ed aspettare che AX venga scritto
A volte, tipico dei processori CISC, si tende a eseguire minicomandi in ordine diverso perché ritenuti più efficienti, quindi si mischia un pò, proprio come intendi per combinatorio e la fai.
Entra cisc ma esegue risc.
Esiste una BPUÂ (Branch Prediction Unit), che cerca di predire l’esito di un salto, come spiegato in questa pagina di wiki e una BTP (Branch Target Predictor) che controlla le istruzioni nel ramo di arrivo (qui). Questi sono le componenti principali che determinano la predizione dei salti.
In alternativa si mettono dei NOP. o di arrivo (qui). Questi sono le componenti principali che determinano la predizione dei salti.
In alternativa si mettono dei NOP.