Il Processore Flashcards
Si parli dell’organizzazione a singolo ciclo
Un’organizzazione a singolo ciclo è un’architettura del processore in cui ogni istruzione viene eseguita in un singolo ciclo di clock. In altre parole, l’intero ciclo di esecuzione di un’istruzione (che comprende il recupero, la decodifica, l’esecuzione, l’accesso alla memoria e la scrittura dei risultati) avviene in un solo ciclo di clock. Questo tipo di organizzazione è semplice e facile da implementare, ma ha alcune limitazioni che ne impediscono l’efficienza (prestazioni limitate e niente parallelismo)
Si parli dell’unità di controllo
L’unità di controllo (Control Unit, CU) è una componente fondamentale di un processore, il cui compito principale è quello di coordinare e gestire l’esecuzione delle istruzioni. Essa interpreta i segnali di controllo provenienti dalle istruzioni e li utilizza per dirigere il funzionamento delle altre unità del processore (come l’ALU, i registri, la memoria, ecc.).
Si descriva l’unità di controllo cablata
L’unità di controllo cablata (o hardwired control unit) è un tipo di unità di controllo in cui la logica di controllo è implementata tramite circuiti fissi (cablati) che operano in base agli opcodes delle istruzioni e agli stati del processore.
L’unità di controllo cablata è implementata tramite una rete di porte logiche (come porte AND, OR, NOT, XOR), multiplexer e altre strutture di controllo
Si descriva l’unità di controllo microprogrammata
L’unità di controllo microprogrammata (o microprogrammed control unit) è un tipo di unità di controllo che utilizza una memoria di microistruzioni per determinare i segnali di controllo necessari per l’esecuzione delle istruzioni.
In contrasto con l’unità di controllo cablata, che usa circuiti logici fissi per determinare i segnali di controllo, l’unità di controllo microprogrammata sfrutta una memoria (spesso una ROM o una RAM) per memorizzare un programma di microistruzioni. Questo approccio consente maggiore flessibilità e modificabilità rispetto a quello cablato, poiché la logica di controllo può essere facilmente modificata modificando le microistruzioni nella memoria.
Cosa determina la durata del ciclo di clock in una organizzazione a singolo ciclo? E in una organizzazione a pipeline?
In un’architettura a singolo ciclo (Single-Cycle Organization), tutte le operazioni (fetch, decode, execute, memory access, and write-back) di un’istruzione devono essere completate in un singolo ciclo di clock. La durata del ciclo di clock in una macchina a singolo ciclo è quindi determinata dalla fase più lenta, che potrebbe essere l’accesso alla memoria o l’esecuzione di un’operazione complessa nell’ALU.
In un’architettura a pipeline, le operazioni sono suddivise in più fasi e ogni fase può essere eseguita in parallelo su istruzioni diverse, riducendo il tempo necessario per completare ciascuna istruzione. Tuttavia, ogni fase della pipeline (come il fetch, decode, execute, memory access, e write-back) deve essere completata in un ciclo di clock separato. In questo caso, la durata del ciclo di clock è determinata dalla fase più lunga della pipeline, che è la fase critica.
Si parli dell’organizzazione a pipeline
L’organizzazione a pipeline è un approccio architetturale usato nei processori per migliorare l’efficienza e aumentare la velocità di esecuzione delle istruzioni. È un modello di esecuzione che divide l’esecuzione di un’istruzione in fasi separate, in modo che più istruzioni possano essere eseguite contemporaneamente in diverse fasi della pipeline. Tuttavia aumenta il rischio di Hazards
Si descrivano gli Hazard
Gli hazard dei dati si verificano quando un’istruzione dipende da un risultato che non è ancora stato calcolato da un’istruzione precedente. Questi hazard possono causare ritardi nella pipeline e compromettere le prestazioni di un processore. Ci sono tre principali tipi di hazard dei dati:
Un control hazard si verifica quando una decisione condizionale (ad esempio un branch) determina quale istruzione eseguire successivamente. Se il processore non è sicuro della direzione del branch (se il ramo è preso o non preso), potrebbe eseguire istruzioni sbagliate, che richiedono il rollback se la predizione era errata.
Come possono essere risolti gli Hazard dei dati
Cosa sono i Load-Use data hazard
Data Hazard: Soluzioni: forwarding (permettendo a un’istruzione di “inoltrare” il risultato di una scrittura nel registro direttamente alla successiva), stalli della pipeline (Questo inserisce un ciclo di clock vuoto, impedendo l’avanzamento delle istruzioni nella pipeline fino a quando il dato necessario non è disponibile.), Tecniche di Scheduling del Codice
Load-Use Hazard: Tipo di Data Hazard. Accade quando un’istruzione dipende da un dato caricato in memoria e il dato non è ancora disponibile.
Come possono essere risolti gli Hazard di controllo
Qual è la differenza tra predizione statica e dinamica dei branch
Inserimento di Bolle nella Pipeline (Pipeline Stalling)
Predizione del Branch (Branch Prediction)
Delay Slot
Tecniche di Predizione Avanzata
Buffer di predizione dinamici, tabella BHT (Branch History Table)
Predizione Statica:
Basata su regole predefinite, indipendenti dall’esecuzione corrente.
Vantaggi: Implementazione semplice.
Svantaggi: Poco precisa per codici con comportamento complesso o non uniforme.
Predizione Dinamica:
Basata sul comportamento passato del programma durante l’esecuzione.
Vantaggi: Maggiore accuratezza rispetto alla predizione statica.
Svantaggi: Complessità e consumo di risorse hardware.
Cos’è un diagramma a pipeline multiciclo.
Un diagramma a pipeline multiciclo rappresenta l’esecuzione di un’istruzione in un processore con una pipeline che utilizza più cicli di clock per completare un’istruzione. Questa è una delle architetture di esecuzione in un processore, dove l’istruzione non viene eseguita in un singolo ciclo di clock ma richiede diversi cicli per passare attraverso più stadi (fasi) della pipeline.
Come si può ottenere lo stallo della pipeline durante la decodifica di una istruzione
Lo stallo della pipeline durante la decodifica di un’istruzione si verifica quando una fase successiva della pipeline non può proseguire fino a quando una fase precedente non è completata. Questo accade quando ci sono dipendenze tra le istruzioni che richiedono un’operazione che non è ancora stata completata.
Si parli della predizione dinamica dei branch. Come può essere realizzata?
La predizione dinamica dei branch è una tecnica utilizzata nei processori moderni per migliorare le prestazioni delle pipeline, riducendo gli stalli causati dai branch condizionali. A differenza della predizione statica, che segue regole fisse, la predizione dinamica si basa sull’osservazione del comportamento passato dei branch durante l’esecuzione del programma.
Cosa sono le eccezioni e come vengono gestite.
Quali sono le tipiche eccezioni e interrupt
Come vengono gestite le eccezioni nel LEGv8
Come vengono gestile le eccezioni negli interrupt vettorizzati.
Le eccezioni sono eventi anomali che si verificano durante l’esecuzione di un programma, causando una deviazione dal normale flusso di controllo. Questi eventi possono essere dovuti a errori hardware, errori software o condizioni particolari che il sistema deve gestire in modo appropriato. Le eccezioni interrompono l’esecuzione di un programma e richiedono un trattamento speciale da parte del sistema, come il salvataggio dello stato corrente, l’esecuzione di una routine di gestione dell’errore e la restituzione al flusso normale o la terminazione dell’esecuzione.
Eccezioni di Hardware, Software, I/O, Sistema
Gli interrupts sono eventi asincroni che interrompono l’esecuzione di un programma per gestire eventi esterni o richieste hardware.
Gli interrupt vettorizzati sono un tipo di gestione degli interrupt in cui, al verificarsi di un interrupt, il processore utilizza un vettore di indirizzo per determinare quale routine specifica debba essere eseguita.
Si parli della speculazione
La speculazione è una tecnica utilizzata nei processori moderni per migliorare le prestazioni, in particolare nelle architetture ad alte prestazioni come quelle con pipeline. La speculazione consente al processore di eseguire operazioni in anticipo rispetto alla certezza che siano effettivamente necessarie, basandosi su previsioni o assunzioni su ciò che accadrà in seguito. Se la previsione si rivela corretta, si guadagna tempo prezioso; se si rivela errata, il lavoro speculativo viene annullato e il processore torna indietro per eseguire l’operazione correttamente.
Si parli dei processori multiple-issue statici
Definizione:
Nei processori multiple-issue statici, il compilatore analizza il codice durante la fase di compilazione e programma l’esecuzione parallela delle istruzioni.
Vantaggi:
Semplicità dell’hardware.
Minore complessità di gestione rispetto ai processori dinamici.
Svantaggi:
Dipendenza dalle capacità del compilatore.
Ridotta flessibilità nell’adattarsi a branch e dipendenze non previste.
Si parli dei processori multiple-issue dinamici
Definizione:
Nei processori multiple-issue dinamici, il processore stesso determina a runtime quali istruzioni possono essere emesse ed eseguite in parallelo, utilizzando tecniche di dynamic scheduling.
Vantaggi:
Massima flessibilità e utilizzo delle risorse hardware.
Migliore gestione dei branch e delle dipendenze dinamiche.
Adatto a carichi di lavoro con alto ILP e branch imprevedibili.
Svantaggi:
Complessità hardware significativamente maggiore.
Maggior consumo di energia e area del chip.
Si parli del loop-unrolling e della rinominazione dei registri
Il loop unrolling consiste nell’espandere il corpo del loop, ripetendo esplicitamente alcune delle sue iterazioni all’interno dello stesso ciclo.
Questo riduce il numero di salti condizionali e migliora l’efficienza esecutiva del codice, specialmente in processori che utilizzano pipeline o esecuzione parallela.
La rinominazione dei registri è una tecnica utilizzata per risolvere i conflitti di dipendenza tra istruzioni (hazard di dati) all’interno dei processori.
Si verifica quando più istruzioni tentano di utilizzare lo stesso registro fisico, causando dipendenze false:
Dato che i compilatori possono schedulare il codice evitando le dipendenza tra i dati, perché si utilizza il dynamic pipeline scheduling?
Nonostante i compilatori siano in grado di ridurre le dipendenze tra le istruzioni e ottimizzare il codice, il dynamic pipeline scheduling è indispensabile per sfruttare appieno le capacità del processore. Questo approccio garantisce flessibilità, ottimizzazioni runtime e massima efficienza nell’uso delle risorse hardware, gestendo situazioni non prevedibili durante la fase di compilazione.