Cap 5 - Instruction Set Architecture Flashcards
Quali sono i punti fermi lato sw e lato hw che devono essere rispettati quando si parla di ISA?
SW: l’architettura deve definire strumenti e risorse per il programmatore.
HW: l’architettura deve essere implementata attraverso un sistema digitale opportunamente progettato, in modo che si arrivi a un dispositivo che rispetti i requisiti di performance, costi, consumi e dimensioni del computer programmabile.
Quale distinzione generale si può fare nella classificazione di un’ISA?
Due macro-categorie: RISC: Reduced Instruction Set Computers; CISC: Complex Instruction Set Computers.
Quale vincolo rendeva l’approccio CISC ottimale nella progettazione di un’architettura?
Il costo e le dimensioni della memoria, motivo per cui l’obiettivo era ottenere computer che ne richiedessero poca.
Qual è l’idea che sta dietro la progettazione di tipo CISC?
Mantenere basso l’instruction count (# istruzioni richieste per algoritmo), in modo da minimizzare l’occupazione di memoria. Per questo motivo l’ISA deve prevedere 2 tipi di istruzioni: operazioni semplici e operazioni complesse e strutturate.
Qual è l’aspetto negativo di una progettazione dell’ISA con approccio CISC?
Le istruzioni complesse hanno un impatto in termini di performance, con CPI che potrebbe essere alto per tali istruzioni e clock rate che è influenzato dalla complessità del sistema digitale, e di conseguenza hanno un impatto sui costi, per la realizzazione di un sistema digitale che raggiunga certi standard di performance.
Qual è l’obiettivo dell’approccio RISC alla progettazione di un’architettura?
Semplificare il processore, e quindi ridurre i costi complessivi per la realizzazione del computer.
Qual è l’idea che sta dietro alla progettazione di tipo RISC?
Le istruzioni eseguono solo operazioni elementari, e le operazioni complesse sono realizzate componendo operazioni elementari. Questo era possibile anche dal fatto che la memoria fosse diventata più economica e meno ingombrante.
Quali sono i possibili svantaggi/vantaggi di un’implementazione di tipo RISC di un’architettura?
RISC potrebbe risultare meno efficiente rispetto a CISC, con un instruction count inevitabilmente maggiore. Tuttavia, istruzioni elementari implicano la possibilità di abbassare CPI e anche semplificare la struttura del sistema digitale che deve implementare le istruzioni, con vantaggi su costi e consumi.
Come può essere caratterizzato l’ISA MIPS?
Microprocessor without Interlocked Pipeline Stages
- anni ‘80
- RISC
- 2 versioni: 32 bit, 64 bit
- progettato pensando ai sistemi embedded.
Come può essere caratterizzato l’ISA RISC V?
- consolidata attorno al 2015
- RISC
- royalty free + open source => non necessario pagare per realizzare processore su questa base
- ISA modulare
- principalmente adatto a sistemi embedded, ma può essere adattato a diversi contesti e applicazioni.
Come può essere caratterizzato l’ISA ARM?
Advanced RISC Machine
- anni ‘80
- ISA ibrido: nasce RISC ma utilizza anche soluzioni tipiche del CISC
- pensato per realizzare processori con performance elevate e consumi contenuti
- sistemi embedded / mobile.
Come può essere caratterizzato l’ISA Intel x86?
- sigla per ISA sviluppati da Intel
- storia che inizia nel 1978
- tutti processori Intel 32 bit sono basati su ISA della famiglia x86.
Che cosa definisce l’ISA in termini di dati?
L’ISA definisce i tipi di dato messi a disposizione del programmatore e la dimensione in byte di ogni tipo.
Qual è il compito del compilatore quando si parla di dati?
Il compilatore deve associare ad ogni tipo di dato definito dal linguaggio di programmazione ai tipi messi a disposizione dall’ISA.
Che cosa si intende per word?
E’ la dimensione in bit del tipo di riferimento per l’architettura. Un’architettura prevede istruzioni che operano su dati di tipo word e suoi sottomultipli.
Che cosa definisce l’ISA dal punto di vista del livello hw, conosciuta la word del sistema?
Definisce le risorse necessarie a supportare le operazioni su interi (ed eventualmente floating point). Quindi la ALU dovrà essere progettata in funzione della word del sistema, anche se caratteristiche come latenza e area occupata vengono definite dal livello hw.
Come può essere riassunta l’organizzazione dei dati all’interno del computer?
- RAM: elemento esterno alla CPU che ospita generalmente i dati e che detta i tempi per lo scambio di dati con il processore. Ha una capienza maggiore ma anche una latenza maggiore.
- Register File (RF): banco di registri locale interno al processore, composto da poche unità ma a latenza più bassa. E’ possibile spostarvici i dati dalla RAM per un accesso più rapido.
Il banco di registri può sostituire la memoria all’interno di un computer?
No, dal momento che non è possibile usare registri per memorizzare strutture con # elevato di dati (array, struct, liste dinamiche, etc…). Inoltre un processore può ospitare al massimo un centinaio di registri, e si avrebbe il problema di come ricavare spazio utile all’interno del processore.
Quali categorie di registri vengono definite dall’ISA?
- General purpose registers: registri a completa disposizione del programmatore.
- Special function registers: l’ISA definisce per loro compiti specifici, quindi devono essere usati in maniera consona dal programmatore. L’ISA può anche inibire al programmatore l’accesso a tali registri.
Quali regole sono definite dall’ISA per gestire da dove la ALU riceva i dati e dove possa scrivere il risultato?
- Register-memory: in ogni istruzione che coinvolga un’operazione aritmetico-logica gli input possono essere registri o locazioni di memoria e l’output anche.
- Load-Store: in ogni istruzione che coinvolga un’operazione aritmetico-logica gli input possono essere solo registri e gli output solo un registro.
Quali sono i vantaggi della politica Register-memory per la comunicazione ALU-RF/memoria in termini di performance?
Ci si aspetta un instruction count migliore (approccio CISC) e si ha una maggiore flessibilità nell’accesso ai dati, poiché si possono risparmiare spostamenti tra memoria e registri. Ottimo se il # di registri a disposizione è ridotto.
Quali sono i vantaggi della politica Load-Store per la comunicazione ALU-RF/memoria in termini di performance?
La latenza delle operazioni aritmetico logiche può essere migliore poiché la ALU accede direttamente ai registri; di contro, generalmente sono richiesti più registri, e ciò ha ricadute sul livello hw. Nel complesso permette di semplificare la struttura della CPU, e può essere più facile trovare un compromesso performance/consumi.
Come si possono caratterizzare RISC V e Intel x86 in termini di accesso ai registri/memoria da parte della ALU?
RISC V: - RISC - load-store - 32 registri general-purpose, altri 32 dedicati per unità FP.
Intel x86: - CISC - register-memory - 16 registri general-purpose, 8 per interi, 8 per FP - altri registri non visibili o con compiti dedicati.
In che modo il metodo di codifica di un’istruzione impatta negativamente sulla CPU?
Dopo il fetch, la fase di decode viene effettuata dalla MSF nella CPU per poter poi passare all’esecuzione, e scegliere un metodo di codifica complicato per le istruzioni può avere un impatto sulla complessità della MSF.
Quali fattori determinano struttura e lunghezza (in bit) delle istruzioni?
Ogni istruzione codifica al suo interno una certa quantità di informazioni: che tipo di operazione deve eseguire la CPU (somma, aggiornare PC, spostare un dato, etc…), modalità di accesso agli input necessari per completare l’operazione (dove si trova il dato, se è una costante, etc…), destinazione di eventuali output. La lunghezza dell’istruzione inoltre impatta sullo spazio occupato in memoria.
Qual è la differenza tra il formato di istruzioni RISC e CISC?
RISC: tutte le istruzioni sono codificate con lo stesso numero di bit (tipicamente 16 o 32). CISC: istruzioni a lunghezza variabile (istruzioni diverse => formati diversi).
Come avviene il fetch e il decode di un’istruzione in un’architettura RISC?
L’istruzione ha una lunghezza prefissata, quindi durante la fase di fetch la CPU preleva un numero di byte noto a priori dalla memoria, partendo dalla posizione del Program Counter. Il pacchetto di byte viene salvato nell’Instruction Register, e nella fase di decode una MSF si occupa di interpretare il pacchetto di byte.
Come avviene il fetch e il decode di un’istruzione in un’architettura CISC?
L’obiettivo è risparmiare occupazione in memoria, quindi ogni istruzione ha le sue caratteristiche specifiche e una certa lunghezza in byte, e per ogni byte si cerca di utilizzare il minor # di byte possibile. Ad ogni fetch viene prelevato un numero prefissato di byte, e una fase di predecoding si occupa di individuare le istruzioni all’interno di questi byte.
Quali sono possibili esempi di architetture a lunghezza fissa e variabile?
MIPS / RISC V / ARM - lunghezza fissa, 32 bit, con disponibilità di formati ‘compressed’ (16 bit).
x86 - lunghezza variabile, da un minimo di 1 byte a un max di 15, + prefisso opzionale (4 byte).
Che metodo di indirizzamento si utilizza per accedere ai registri?
Essendo generalmente un numero ridotto e dovendo garantire accessi a bassa latenza, è meglio utilizzare l’indirizzamento diretto, ossia ad ognuno viene assegnato un tag diretto (ex. 32 registri, 0 - 31) e il tag è codificato nell’istruzione con un certo numero di bit (ex. 5 bit).
Che metodo di indirizzamento si utilizza per accedere a una locazione di memoria?
Esistono diversi approcci a seconda del contesto e il numero di bit necessari per la rappresentazione in linguaggio macchina. Considerando 2ᴷ locazioni da indirizzare e N bit per indirizzare i registri: - Direct / Absolute: viene direttamente scritto l’indirizzo della locazione interessata, utilizzando K bit - Register indirect: viene codificato il tag del registro in cui è contenuto l’indirizzo della locazione di memoria, attraverso N bit.
Che cosa definisce l’ISA se parliamo di memoria?
Definisce le locazioni indirizzabili, locazioni da un byte indirizzabili individualmente. Indirizzi disponibili: da 0 a 2ᴷ-1 (se memoria ha 2ᴷ locazioni).
Se un dato è rappresentato con 2 o più byte di memoria, come viene gestito l’accesso al dato?
Evidentemente sono necessarie 2 o più locazioni, che dovranno essere contigue. Per capire a quale locazione bisogna accedere sono importanti i concetti di: endianness e allineamento.
Che cosa si intende per Big / Little Endian?
Si trattano di 2 convenzioni utilizzate per salvare in memoria dati la cui dimensione è di 2 o + byte. - Big Endian: la prima locazione utile contiene il primo byte partendo dal MSB - Little Endian: la prima locazione utile contiene il primo byte partendo dal LSB.
Che cosa si intende per Memory Alignment?
Si intende il meccanismo per cui il salvataggio di dati in memoria avviene partendo da un indirizzo di memoria i cui primi bit (partendo dal lsb) corrispondenti al # di bit necessari per codificare un numero pari alla dimensione del dato da salvare sono 0.
Perché è importante il Memory Alignment?
Poiché spesso la parte hw è specificamente organizzata per gestire dati allineati, difatti la latenza è più bassa se il dato è allineato in memoria.
Quali sono degli aspetti non coinvolti quando si va a progettare un’ISA?
- frequenza di clock: dipende da come verrà implementata l’architettura a livello hw
- dettagli implementativi su singoli moduli (ex. regola specifiche funzionali in termini di I/O della ALU, ma non deve imporre vincoli sulla realizzazione in hw della stessa)
- tecnologia: l’architettura deve essere indipendente da possibili evoluzioni a livello tecnologico.
Quali operazioni deve fornire l’ISA?
Ci sono 3 categorie sempre presenti: - operazioni aritmetico-logiche - trasferimenti da / per la memoria - funzioni di controllo (jump, branch, procedures).
Quali sono le caratteristiche dell’architettura RISC V?
- approccio RISC
- istruzioni a lunghezza fissa (32 bit)
- struttura delle istruzioni molto regolare
- architettura load - store (ALU interagisce solo con i registri)
- IS: RV32I Base Integer (operazioni su dati interi con word a 32 bit) => aggiunta standard extension for integer multiplication and division.
Come possiamo caratterizzare i registri disponibili nell’architettura RISC V?
- visibili al programmatore
- 32 registri a 32 bit => indirizzabili con 5 bit
- previsto ulteriore banco di registri (32) a 32 bit per operazioni floating point single precision.
What is the load-store architecture in RISC V?
The ALU interacts only with registers.
What is RV32I Base Integer?
It performs operations on 32-bit integer data and includes standard extensions for integer multiplication and division.
How many registers are available in RISC V architecture?
There are 32 registers, each 32 bits, addressable with 5 bits.
What additional registers are provided for floating-point operations?
An additional bank of 32 registers, each 32 bits, is provided for single precision floating point operations with a dedicated instruction set.
How are variables defined in RISC V architecture?
Variables are memory locations, corresponding to one or more memory locations depending on the variable type.
What types of variables are identified in RISC V?
There are two types: global variables (in a dedicated data memory area) and local variables (limited visibility within a function).
How are functions managed in RISC V architecture?
Functions are treated as subroutines with their own allocated memory space and local variables.
What happens during a function call in RISC V?
There are two actors: the caller (the routine calling the subroutine) and the callee (the executed subroutine).
What is a stack frame?
It is a memory area organized as a stack for subroutines to manage the callee/caller relationship.
What is the protocol after a subroutine call?
The callee allocates its memory area in the stack and deallocates it before returning control to the caller.
What do SP and FP stand for?
SP is the stack pointer, indicating the last occupied memory location of the stack, and FP is the frame pointer, defining the boundary of the stack portion occupied by a subroutine.
How many instruction formats does RV32I provide?
It provides 4 different formats for instruction encoding: R-type, I-type, S-type (which can become B-type), and U-type (which can become J-type).
What are the characteristics of R/I instruction encodings in RISC V?
They are designed for arithmetic/logical instructions, shifts, and comparisons.
How is the addition operation defined in RISC V?
add t3, t4, t5
REG[t3] <= REG[t4] + REG[t5]
How is logical/arithmetic shift defined in RISC V?
Logical shift: sll t3, t4, t5
REG[t3] <= REG[t4] «_space;( REG[t5] & 0x0000001F )
How are multiplication and division defined in RISC V?
mul t3, t4, t5
REG[t3] contains the lower 32 bits of the result.
What are immediate operations?
They allow specific instructions where one input is a constant encoded in the instruction.
What are comparison operations used for?
They are primarily used for managing conditional operations like if or while.
How are comparison operations defined in RISC V?
slt t3, t4, t5
REG[t3] = 1 if REG[t4] < REG[t5]
What does the load operation consist of?
It moves data from memory to a register.
How is the load operation performed?
lw t5, t3(offset)
REG[t5] <= MEM[ REG[t3] + sext( offset ) ]
How can a constant be loaded into a register?
Using the instruction: lui $t3, immediate
REG[t3] <= ( sext( immediate ) «_space;12 )
What is the store operation?
It transfers data from a register to memory.
How is the store operation performed?
sw t5, t3(offset)
MEM[ REG[t3] + sext( offset ) ] <= REG[t5]
What type of instruction is used for store operations?
S-type instructions are used, with the 12-bit constant for memory addressing encoded in two separate pieces.
What is an unconditional jump operation?
It is used primarily for subroutine calls via the instruction: jal (jump and link).
How is the jump operation performed?
jal ra, (offset)
It updates the PC and saves the return address.
What are branching operations in RISC V?
They are conditional jumps that occur only if a certain condition is met.
What is the structure of a branching instruction in RISC V?
beq t4, t5, offset
if ( REG[t4] == REG[t5] ) => branch taken => PC = PC + offset
What does it mean for a callee to be leaf or non-leaf?
A leaf callee does not call other subroutines, while a non-leaf callee does.
How are parameters and return values managed in RISC V subroutine calls?
RISC V reserves 8 registers (a0 - a7) for passing parameters and return values.
What does the callee do during a subroutine call?
It allocates the stack frame, saves the return address and frame pointer, and updates the frame pointer.
What are the policies for register usage in RISC V subroutine calls?
Registers t0 - t6 can be freely used by the callee, while registers s0 - s11 must be preserved.
How does stack allocation affect local variables in RISC V?
Local variables are stored in the stack frame and cease to exist when control is returned to the caller.
What categories of data can be identified based on allocation type?
Data can be static or dynamic (e.g., allocated with malloc/free in C, new/delete in C++).