Calcolatori Elettronici

Documenti analoghi
CPU a ciclo multiplo

L'architettura del processore MIPS

CPU a ciclo multiplo

CALCOLATORI ELETTRONICI 29 giugno 2010

Realizzazione a cicli di clock multipli

Architettura degli Elaboratori Lez. 8 CPU MIPS a 1 colpo di clock. Prof. Andrea Sterbini

CALCOLATORI ELETTRONICI 29 giugno 2011

L unità di controllo di CPU a singolo ciclo

Richiami sull architettura del processore MIPS a 32 bit

CALCOLATORI ELETTRONICI 15 aprile 2014

Richiami sull architettura del processore MIPS a 32 bit

CALCOLATORI ELETTRONICI 31 marzo 2015

Il Processore: l Unità di Controllo Principale Barbara Masucci

Calcolatori Elettronici A a.a. 2008/2009

Il processore: unità di elaborazione

Processore. Memoria I/O. Control (Parte di controllo) Datapath (Parte operativa)

Progettazione dell unità di elaborazioni dati e prestazioni. Il processore: unità di elaborazione. I passi per progettare un processore

Processore. Memoria I/O. Control (Parte di controllo) Datapath (Parte operativa)

Controllo con macchina a stati finiti

Calcolatori Elettronici B a.a. 2007/2008

CALCOLATORI ELETTRONICI 15 luglio 2014

Architettura dei calcolatori e sistemi operativi. Il processore Capitolo 4 P&H

CPU pipeline hazards

Implementazione semplificata

Instruction Level Parallelism Andrea Gasparetto

Progetto CPU (ciclo singolo) Salvatore Orlando

Il set istruzioni di MIPS Modalità di indirizzamento. Proff. A. Borghese, F. Pedersini

Processore: Datapath & Control. Progetto CPU (ciclo singolo) Rivediamo i formati delle istruzioni. ISA di un MIPS-lite

Architettura degli Elaboratori B Introduzione al corso

L unità di controllo di CPU multi-ciclo

Arch. Elab. - S. Orlando 2. unità funzionali possono essere usate più volte per eseguire la stessa

Problemi con progetto a singolo ciclo. Progetto CPU (multiciclo) Esempio di riduzione del ciclo di clock. Datapath multiciclo

Progetto CPU (multiciclo) Salvatore Orlando

Calcolo durata ciclo. Prestazioni Singolo Ciclo. Prestazioni singolo ciclo. Durata Ciclo Variabile

Elementi di informatica

CPU a singolo ciclo: l unità di controllo, istruzioni tipo J

Progetto CPU (multiciclo)

Architettura degli Elaboratori. Classe 3 Prof.ssa Anselmo. Appello del 18 Febbraio Attenzione:

Le etichette nei programmi. Istruzioni di branch: beq. Istruzioni di branch: bne. Istruzioni di jump: j

Architettura di tipo registro-registro (load/store)

Istruzioni di trasferimento dati

La CPU a singolo ciclo

Il processore: unità di controllo

Problemi del ciclo singolo

1. Si effettui la divisione di 7/5 utilizzando un efficiente algoritmo e illustrando la corrispondente architettura hardware.

Architettura degli Elaboratori

Il linguaggio macchina

Elementi base per la realizzazione dell unità di calcolo

Architettura degli Elaboratori. Classe 3 Prof.ssa Anselmo. Appello del 19 Febbraio Attenzione:

Linguaggio macchina. Architettura degli Elaboratori e delle Reti. Il linguaggio macchina. Lezione 16. Proff. A. Borghese, F.

Lezione 20. Assembly MIPS: Il set istruzioni, strutture di controllo in Assembly

Un altro tipo di indirizzamento. L insieme delle istruzioni (3) Istruz. di somma e scelta con operando (2) Istruzioni di somma e scelta con operando

L unità di elaborazione e di controllo

Linguaggio assembler e linguaggio macchina (caso di studio: processore MIPS)

Tutorato Architettura degli elaboratori

Calcolatori Elettronici

Il pipelining: tecniche di base

Riassunto. Riassunto. Ciclo fetch&execute. Concetto di programma memorizzato. Istruzioni aritmetiche add, sub, mult, div

Controllo a ciclo singolo

ISA (Instruction Set Architecture) della CPU MIPS

Calcolatori Elettronici A a.a. 2008/2009

Corso di Alfabetizzazione Informatica 2001/2002. La CPU. F. Tortorella Università degli Studi. di Cassino

SOLUZIONI DELLA PROVA SCRITTA DEL CORSO DI. NUOVO E VECCHIO ORDINAMENTO DIDATTICO 13 Luglio 2004

Capitolo 5 Elementi architetturali di base

Il processore. Istituzionii di Informatica -- Rossano Gaeta

Esercitazione su Instruction Level Parallelism Salvatore Orlando

Università degli Studi di Cassino

Sistemi e reti CPU Concetti di base

Capitolo 5 Struttura di base del processore

Esame di Architetture Canale AL Prof. Sterbini 8/7/13 Compito A

Il pipelining: tecniche di base

Corso di Calcolatori Elettronici MIPS: Istruzioni di confronto Istruzioni di controllo Formato delle istruzioni in L.M.

Il linguaggio del calcolatore: linguaggio macchina e linguaggio assembly

Esame di Architetture Canale MZ Prof. Sterbini 8/6/15

Linguaggio Assembly e linguaggio macchina

Architettura (10/9/2003) Pag. 1/6. Cognome e Nome (in stampatello):

Cicli di clock e istruzioni

Esercitazione sulle CPU pipeline

Esercitazione su Instruction Level Parallelism

ARCHITETTURE AVANZATE DEI CALCOLATORI, A.A. 2007/08 Soluzione esercizi sul pipelining

ISA e linguaggio macchina

(c) INTRODUZIONE ALLE ARCHITETTURE DI PROCESSORI (II)

Componenti di un processore

Istruzioni assembler Istruzione N Registri

Corso di Fondamenti di Informatica Elementi di Architettura

Blocchi di più parole

Architettura degli elaboratori - CPU multiciclo A.A. 2016/17. Architettura degli elaboratori

Il Ciclo Fetch-Decode-Execute. C Nyssen/Aberdeen College 2003

Esercizio n. 7 - Microcodice

Sommario FONDAMENTI DI INFORMATICA. Architettura di Von Neumann. Algoritmi e programmi ESERCITAZIONE PYTHON ARCHITETTURA DEI CALCOLATORI

Architettura hardware

Linguaggio Assembly e linguaggio macchina

Gli attori principali di un architettura

Elementi di informatica

Architettura dei computer

Architettura degli elaboratori Tema d esame del 20/01/2016

Lezione 20. Assembly MIPS: Il set istruzioni, strutture di controllo in Assembly

Linguaggio Assembly e linguaggio macchina

Corso di Laurea in Informatica Architetture degli Elaboratori

Data-path. ad un solo bus interno. Struttura del processore. L unità di elaborazione

Transcript:

Calcolatori Elettronici CPU multiciclo: esercizi Massimiliano Giacomin 1

Prima tipologia di esercizi: valutazione delle prestazioni 2

Specchio riassuntivo su prestazioni e CPI 0) In generale: T esecuzione = #istruzioni * CPI * T clock 1) Per i processori a singolo ciclo CPI = 1 T clock = max{t a + T k } al variare delle istruzioni T esecuzione = #istruzioni * T clock 2) Calcolo CPI e prestazioni nei sistemi multi-ciclo CPI = f 1 *CPI 1 + f 2 *CPI 2 + + f n *CPI n f 1,, f n : frequenze relative istruzioni (carico di lavoro) T clock = max{t 1,,T m } [operaz. atomiche eseguite in un ciclo di clock] 3) Confronto di prestazioni tra processori con stesso ISA [su prog. determinato] T 1 esecuzione T 2 esecuzione = CPI1 *T1 clock CPI 2 *T 2 clock 3

Esercizio 1 Si ipotizzi un carico di lavoro che preveda: lw: 31% sw: 21% Tipo-R: 22% beq: 5% j: 7% somma virgola mob: 7% moltipl. Virgola mob: 7% Eseguite secondo le fasi viste Come Tipo-R ma ALU richiede 4 operazioni in sequenza anziché 1 Come Tipo-R ma 8 operazioni ALU Si supponga che le operazioni atomiche che coinvolgono le unità funzionali principali (di cui si tiene conto per il calcolo dei tempi) richiedano: Unità di memoria (lettura e scrittura): 2 ns Register File (lettura e scrittura): 1 ns Operazione-ALU: 2 ns Confrontare le prestazioni di una implementazione a ciclo singolo vs. multi-ciclo (vincolo di non mettere in serie due operazioni atomiche) vs. multi-ciclo in cui sono effettuate in serie (nello stesso ciclo): - operazione ALU per produrre un valore + scrittura del valore nel Register File - lettura dalla memoria di un valore + 4

Calcolo delle prestazioni nel caso a singolo ciclo (macchina M1) CPI = 1 T esecuzione = I * T clock (I è il numero di istruzioni) T clock corrisponde all istruzione più lunga che evidentemente è la MUL in virgola mobile (cfr. esercizio sul processore a singolo ciclo) T clock = 2 + 1 + 8*2 + 1 ns = 20 ns fetch lettura R.File ALU scrittura R.File T M1 = I * 20 ns 5

Calcolo delle prestazioni nel caso multiciclo M2 (Macchina multi-ciclo): in un ciclo di clock NO serie di operazioni atomiche T clock = 2ns (operazione ALU oppure accesso in memoria) CPI = somma pesata dei CPI singole istruzioni con le frequenze relative = (vedi lucido seguente) 4,89 T M2 = I * 4.89 * 2 ns = I * 9.78 ns 6

M2 (Macchina multiciclo): CPI per istruzione Istruzione Fetch Lettura Registri/ Decode ALU Accesso Memoria Scrittura Registri lw 1 1 1 1 1 5 sw 1 1 1 1 4 Tipo-R 1 1 1 1 4 beq 1 1 1 3 j 1 1 1 3 ADD V. MOB. 1 1 4 1 7 MUL V. MOB. 1 1 8 1 11 CPI CPI = 0.31*5 + 0.21*4 + 0.22*4 + 0.05*3 + 0.07*3 + 0.07*7 +0.07*11 = 4.89 7

M3: in un ciclo di clock ho al più: lettura memoria ALU [2 ns] + scrittura Reg.File [1 ns] T clock = 3ns CPI = per TIPO-R, lw e virgola-mobile CPI si riduce di 1 Istruzione Fetch Lettura Registri/ Decode ALU [ev. Scr. Reg.] Accesso Memoria [ev. Scr. Reg.] lw 1 1 1 1 4 sw 1 1 1 1 4 Tipo-R 1 1 1 3 beq 1 1 1 3 j 1 1 1 3 ADD V. MOB. 1 1 4 6 MUL V. MOB. 1 1 8 10 CPI CPI = 0.31*4 + 0.21*4 + 0.22*3 + 0.05*3 + 0.07*3 + 0.07*6 +0.07*10 = 4.22 T M3 = I * 4.22 * 3 ns = I * 12.66 ns 8

Riepilogo Confronto delle prestazioni CPI T clock T esecuz T istruzione-più-costosa M1 1 20 ns I * 20 ns 20 ns M2 4.89 2 ns I * 9.78 ns 11*2 = 22 ns M3 4.22 3 ns I * 12.66 ns 10*3 = 30 ns T M1 = I * 20 ns T M2 = I * 9.78 ns M2 oltre 2 volte più veloce rispetto a M1 T M3 = I * 12.66 ns T M2 = I * 9.78 ns M2 circa 1.3 volte più veloce rispetto a M3 NB: la riduzione di CPI non paga rispetto all aumento di T clock La macchina multiciclo con divisione equilibrata delle fasi è la più efficiente. Notare però che l istruzione più costosa (MUL in V.MOB.) è più veloce nell implementazione a singolo ciclo. 9

Domanda Come deve essere modificato il DataPath per implementare M3? 10

Si tratta di collegare direttamente in serie - ALU a Register File (per scrivere in un registro il risultato di un operazione) linea di collegamento in uscita alla ALU prima del registro ALUout - Memoria a Register File (per scrivere in un registro il valore letto da Mem) elimino il registro MDR collegando direttamente memoria a Reg.File RegWrite indirizzo Memoria MemData Registro letto 1 Registro letto 2 Registro scritto Registri Dato letto 1 Dato letto 2... ALUout Dato scritto Dato scritto 11

Modificando il Datapath completo risulta: 12

Esercizio 2 Si ipotizzi un carico di lavoro che preveda: lw: 25% sw: 10% Tipo-R: 52% beq: 11% j: 2% Si supponga che le operazioni atomiche che coinvolgono le unità funzionali principali (di cui si tiene conto per il calcolo dei tempi) richiedano: Unità di memoria (lettura e scrittura): 2 ns Register File (lettura e scrittura): 1 ns Operazione-ALU: 1 ns Determinare le prestazioni multi-ciclo (non mettere in serie due operazioni atomiche) Delineare, se possibile, una modifica al controllo e al data path in grado di migliorare l efficienza della soluzione precedente (sempre nell ambito del controllo multi-ciclo) Confrontare le prestazioni delle due soluzioni ottenute 13

1) Controllo multi-ciclo usuale T M1 = #istruzioni * CPI * T clock T clock = 2ns (accesso in memoria) Istruzione Fetch Lettura Registri/Decode ALU Accesso Memoria Scrittura Registri lw 1 1 1 1 1 5 sw 1 1 1 1 4 Tipo-R 1 1 1 1 4 beq 1 1 1 3 j 1 1 1 3 CPI CPI = 0.25*5 + 0.1*4 + 0.52*4 + 0.11*3 + 0.02*3 = 4.12 T M1 = I * 4.12 * 2 ns = I * 8.24 ns 14

2) Soluzione più efficiente Unità di memoria (lettura e scrittura): 2 ns Register File (lettura e scrittura): 1 ns Operazione-ALU: 1 ns Operazione ALU e accesso a Register File possono essere messe in serie (diminuendo CPI) senza incrementare T clock!!! Istruzione Fetch Lettura Registri/Decode ALU Accesso Memoria Scrittura Registri lw 1 1 1 1 1 5 sw 1 1 1 1 4 Tipo-R 1 1 1 1 4 3 beq 1 1 1 3 j 1 1 1 3 CPI 15

CPI = 0.25*5 + 0.1*4 + 0.52*3 + 0.11*3 + 0.02*3 = 3.6 e quindi risulta T M2 = I * 3.6 * 2 ns = I * 7.2 ns Ovviamente, occorre modificare leggermente il DataPath 16

3) Confronto prestazioni T M1 = I * 8.24 ns T M2 = I * 7.2 ns M2 è circa 1,14 volte più veloce NB: Perché non la soluzione seguente? Istruzione Fetch Lettura Registri/Decode ALU Accesso Memoria Scrittura Registri lw 1 1 1 1 1 5 sw 1 1 1 1 4 Tipo-R 1 1 1 1 4 beq 1 1 1 3 j 1 1 1 3 CPI pensarci 17

Seconda tipologia di esercizi: implementazione istruzioni nuove 18

Esercizio 3 Si consideri il DataPath per l implementazione multiciclo del MIPS [che avete a disposizione!]. Si consideri l istruzione assembler: jr r1 ; PC r1 la quale esegue un salto incondizionato all indirizzo specificato dal registro r1. Per questa istruzione: - supponendo che vi sia un codice operativo libero (non impegnato in altre istruzioni) si fornisca un possibile formato per l istruzione - si dica se (e come) deve essere modificato il datapath per permetterne l implementazione rispettando il vincolo usuale sugli elementi funzionali; - si specifichi come deve essere modificato il diagramma a stati finiti dell unità di controllo per implementarla; - supponendo T clock = 2ns, calcolare il tempo di esecuzione della nuova istruzione. 19

jr r1: DATAPATH 20

jr r1 Una prima soluzione: modificare il datapath aggiungendo in ingresso al MUX che determina il valore da scrivere in PC il registro A [che può contenere r1] 3 Formato: TIPO-R o I con #r1 nel campo rs 21

Specifica del controllo con il diagramma a stati: 2 Memory address computation ALUSrcA = 1 ALUSrcB = 10 ALUOp = 00 Start Instruction fetch 0 MemRead ALUSrcA = 0 IorD = 0 IRWrite ALUSrcB = 01 ALUOp = 00 PCWrite PCSource = 00 6 (Op = 'LW') or (Op = 'SW') Execution ALUSrcA =1 ALUSrcB = 00 ALUOp= 10 8 (Op = R-type) Branch completion ALUSrcA = 1 ALUSrcB = 00 ALUOp = 01 PCWriteCond PCSource = 01 Instruction decode/ register fetch 1 (Op = 'BEQ') 9 ALUSrcA = 0 ALUSrcB = 11 ALUOp = 00 (Op = 'J') Jump completion PCWrite PCSource = 10 Op = jr 10 PCWrite PCSource=11 3 4 (Op = 'LW') MemRead IorD = 1 Memory access (Op = 'SW') 5 Write-back step MemWrite IorD = 1 Memory access 7 RegDst = 1 RegWrite MemtoReg = 0 R-type completion 0: fetch 1: decode e carica A = r1, B = rt 10: PC A RegDst = 0 RegWrite MemtoReg =1 22

Una seconda soluzione: non modificare il datapath PC può essere scritto con il valore in uscita dalla ALU [PCSource=0, PCWrite=1] ALU può essere usata per sommare A+offset pari a rs se offset=0 E possibile implementare l istruzione con il formato Tipo-I: 31 26 25 2120 16 15 Op = jr r1 X Tutti i bit a 0 0 X: don t care + PC 23

Specifica del controllo con il diagramma a stati: 2 Memory address computation ALUSrcA = 1 ALUSrcB = 10 ALUOp = 00 Start Instruction fetch 0 MemRead ALUSrcA = 0 IorD = 0 IRWrite ALUSrcB = 01 ALUOp = 00 PCWrite PCSource = 00 6 (Op = 'LW') or (Op = 'SW') Execution ALUSrcA =1 ALUSrcB = 00 ALUOp= 10 8 (Op = R-type) Branch completion ALUSrcA = 1 ALUSrcB = 00 ALUOp = 01 PCWriteCond PCSource = 01 Instruction decode/ register fetch 1 (Op = 'BEQ') 9 ALUSrcA = 0 ALUSrcB = 11 ALUOp = 00 (Op = 'J') Jump completion PCWrite PCSource = 10 Op = jr 10 ALUSrcA = 1 ALUSrcB = 10 ALUOp = 00 (somma) PCSource=00 PCWrite 3 4 (Op = 'LW') MemRead IorD = 1 Memory access RegDst = 0 RegWrite MemtoReg =1 (Op = 'SW') 5 Write-back step MemWrite IorD = 1 Memory access 7 RegDst = 1 RegWrite MemtoReg = 0 R-type completion 0: fetch 1: decode e carica A = r1, B = rt 10: ALU: A + signext(offs) PC ALU 24

NB: in pratica abbiamo modificato l ultimo stato dell istruzione j in modo da selezionare l uscita della ALU (che calcola l indirizzo) al posto dell usuale indirizzo derivante dall offset a 26 bit. Notare che in questo stato il cammino creato è A-IR ALU PC: come nel caso di beq, non poniamo in serie più di un elemento critico Tempo di esecuzione: 3 * 2 ns = 6 ns [come j e beq!] Notare che è possibile implementare l istruzione più generale (stesso formato Tipo-I) j offset(rs) // (il campo offset può essere diverso da zero) dove però è più ragionevole supporre che offset sia espresso in parole di memoria! A questo scopo, basta forzare ALUSrcB=3 per sommare a rs offset esteso e scalato. 25

Esercizio 4: dall appello CALC-B del 13 luglio 2005 Si considerino, mostrati nelle figure riportate di seguito, il datapath ed il diagramma a stati finiti che specifica l unità di controllo secondo la tecnica a multiciclo relativamente alle istruzioni MIPS lw, sw, beq, j ed alle istruzioni di tipo-r. Si vuole implementare una nuova istruzione del tipo: addmem r1, offset(r2) // r1 r1 + M[r2+offset] che somma al registro r1 il contenuto della locazione di memoria indirizzata da r2+offset, dove offset è un numero a 16 bit con segno specificato nell istruzione macchina (cfr. le istruzioni lw e sw). Ricordando i tre formati di codifica delle istruzioni (riportati di seguito) si chiede di: - riportare il formato della nuova istruzione macchina - riportare, nella corrispondente figura, le modifiche necessarie al datapath - estendere il diagramma degli stati per implementare la nuova istruzione 26

addmem r1, offset(r2) Formato devo rappresentare: - il registro r1 - il registro r2 - offset (a 16 bit) che va sommato a r2 Sicuramente verrà usato il Tipo-I 31 26 25 2120 16 15 Op r2 r1 offset 0 + (cfr. anche lw) 27

Modifica al DataPath addmem r1, offset(r2) : è una sorta di lw + add 28

Modifica al DataPath addmem r1, offset(r2) : è una sorta di lw + add 2 Aggiungiamo ingresso al MUX, con label 2 per non modificare la specifica delle precedenti istruzioni 29

Possiamo allora effettuare le stesse operazioni della lw ed aggiungere in coda due stati ALUOut Memory address r2 + offset computation 2 (Op = addmem ) or 3 ALUSrcA = 1 ALUSrcB = 10 ALUOp = 00 (Op = 'LW') Memory access (Op = 'SW') 5 Start Memory access Instruction fetch 0 MemRead ALUSrcA = 0 IorD = 0 IRWrite ALUSrcB = 01 ALUOp = 00 PCWrite PCSource = 00 6 (Op = 'LW') or (Op = 'SW') 7 Execution ALUSrcA =1 ALUSrcB = 00 ALUOp= 10 8 R-type completion (Op = R-type) Branch completion ALUSrcA = 1 ALUSrcB = 00 ALUOp = 01 PCWriteCond PCSource = 01 (Op = 'BEQ') Instruction decode/ register fetch 1 9 ALUSrcA = 0 ALUSrcB = 11 ALUOp = 00 (Op = 'J') Jump completion PCWrite PCSource = 10 MemtoReg=0 RegDst=0 RegWrite r1 ALUOut MDR M[ALUOut] (Op = lw ) 4 MemRead IorD = 1 RegDst = 0 RegWrite MemtoReg =1 Write-back step MemWrite IorD = 1 (Op = addmem ) RegDst = 1 RegWrite MemtoReg = 0 ALUSrcA = 2 ALUSrcB = 00 ALUOp = 00 (somma) ALUOut MDR+r1 30

Esercizio 5: dall appello CALC-A dell 8 aprile 2009 Si considerino, mostrati nelle figure alla pagina seguente, il datapath ed il diagramma a stati finiti che specifica l unità di controllo secondo la tecnica multiciclo relativamente alle istruzioni MIPS lw, sw, beq, j ed alle istruzioni Tipo-R. Si vuole implementare la nuova istruzione EXCHANGE r1, r2, offset // M[r1+offset] M[r2+offset] che scambia la parola di memoria di indirizzo r1+offset con la parola di memoria di indirizzo r2+offset. Ricordando i tre formati di codifica delle istruzioni (riportati di seguito) si chiede di: - riportare il formato della nuova istruzione macchina (specificando anche i campi destinati rispettivamente a r1 e r2); - riportare, nella corrispondente figura, le modifiche necessarie al datapath; - estendere il diagramma degli stati per implementare la nuova istruzione. [6] 31

PRIMA ANALISI: PASSI FONDAMENTALI EXCHANGE r1, r2, offset - Fetch, Decode e lettura registri - Calcolo indirizzo rs+offset - Lettura M[rs+offset] e scrittura in un registro temporaneo - Calcolo indirizzo rt+offset - Lettura M[rt+offset] e scrittura in un registro temporaneo - Scrittura in M[rt+offset] del valore del registro temporaneo contenente M[rs+offset] - Scrittura in M[rs+offset] del valore del registro temporaneo contenente M[rt+offset] FORMATO Bisogna rappresentare due registri e un offset 31 26 25 2120 16 15 Op rs rt offset 0 r1 r2 32

IDEA DI BASE - Condividere gli stati della lw fino al calcolo di rs+offset - Leggere il valore di M[rs+offset] e memorizzarlo in un registro temporaneo MDR2 (oltre che MDR) controllato con un segnale di scrittura in modo da non perderne il valore - Calcolare l indirizzo rt+ offset, leggere in MDR M[rt+offset] e scriverlo direttamente in M[rs+offset] per non perdere il valore - Completare l istruzione scrivendo MDR2 in M[rt+offset]. 33

Modifica al DataPath EXCHANGE r1, r2, offset 34

Modifica al DataPath EXCHANGE r1, r2, offset WriteData 2 0 2 1 WRMDR2 MDR2 35

IorD=1 MemRead ALUSrcA=1 ALUSrcB=2 ALUOp=00 IorD=1 writedata=1 MemWrite MDR M[ALUOut] ALUOut rs+offset 2 Memory address computation ALUSrcA = 1 ALUSrcB = 10 ALUOp = 00 or (Op = 'LW') or (Op = 'SW') Instruction fetch 0 MemRead ALUSrcA = 0 IorD = 0 IRWrite ALUSrcB = 01 ALUOp = 00 PCWrite PCSource = 00 Execution ALUSrcA =1 ALUSrcB = 00 ALUOp= 10 (Op = R-type) Branch completion ALUSrcA = 1 ALUSrcB = 00 ALUOp = 01 PCWriteCond PCSource = 01 (Op = 'BEQ') Instruction decode/ register fetch ALUSrcA = 0 ALUSrcB = 11 ALUOp = 00 (Op = 'J') Jump completion PCWrite PCSource = 10 (Op = 'LW') MemRead IorD = 1 Memory access (Op = 'SW') Start 6 8 1 9 ALUSrcA=2 ALUSrcB=2 ALUOp=00 M[ALUOut] MDR ALUOut rt+offset 3 ALUSrcA=2 ALUSrcB=2 ALUOp=00 WRMDR2 5 MemWrite IorD = 1 Memory access 7 RegDst = 1 RegWrite MemtoReg = 0 R-type completion IorD=1 writedata=2 MemWrite 4 MDR=MDR2 M[rs+offset] Write-back ALUOut rt+offset step M[ALUOut] MDR2 RegDst = 0 RegWrite MemtoReg =1 36

Esercizio 6: dall appello CALC-A del 25 marzo 2009 [8 punti] Si considerino, mostrati nelle figure alla pagina seguente, il datapath ed il diagramma a stati finiti che specifica l unità di controllo secondo la tecnica multiciclo relativamente alle istruzioni MIPS lw, sw, beq, j ed alle istruzioni Tipo-R. Si vuole implementare la nuova istruzione MOVA r1, r2 che copia il vettore (array) di parole di memoria di indirizzo r1 nell indirizzo r2. Si suppone che la fine del vettore sia indicata da un elemento di valore nullo (che va anch esso copiato). Ricordando i tre formati di codifica delle istruzioni (riportati di seguito) si chiede di: - riportare il formato della nuova istruzione macchina (specificando anche i campi destinati rispettivamente a r1 e r2); - riportare, nella corrispondente figura, le modifiche necessarie al datapath; - estendere il diagramma degli stati per implementare la nuova istruzione. 37

FORMATO Bisogna rappresentare due registri: Tipo-I o Tipo-R 31 26 25 2120 16 15 Op rs rt 0 IDEA DI BASE r1 r2 - Decode: si caricano r1 e r2 rispettivamente in A e B - A e B contengono gli indici che andranno di volta in volta incrementati di 4. - Creazione di un ciclo in cui: > MDR=M[A] > M[B]=MDR > A=A+4 > B=B+4 MDR=0 FINE MDR 0 38

Modifica al DataPath MOVA r1, r2 39

Modifica al DataPath MOVA r1, r2 WriteData WRA SRA SRB 2 3 1 0 2 0 0 1 1 WRB fine all unità di controllo 40

2 Memory address computation ALUSrcA = 1 ALUSrcB = 10 ALUOp = 00 Start Instruction fetch 0 MemRead ALUSrcA = 0 IorD = 0 IRWrite ALUSrcB = 01 ALUOp = 00 PCWrite PCSource = 00 6 (Op = 'LW') or (Op = 'SW') Execution ALUSrcA =1 ALUSrcB = 00 ALUOp= 10 8 (Op = R-type) Branch completion ALUSrcA = 1 ALUSrcB = 00 ALUOp = 01 PCWriteCond PCSource = 01 Instruction decode/ register fetch 1 (Op = 'BEQ') 9 SRA=0 WrA ALUSrcA = 0 ALUSrcB = 11 ALUOp = 00 SRB=0 WrB (Op = 'J') Jump completion PCWrite PCSource = 10 (Op = mova ) IorD=2 MemRead ALUSrcA=1 ALUSrcB=1 ALUOp=00 SRA=1 WRA MDR M[A] A A+4 3 4 (Op = 'LW') MemRead IorD = 1 Memory access RegDst = 0 RegWrite MemtoReg =1 (Op = 'SW') 5 Write-back step Memory access MemWrite IorD = 1 WriteData=0 7 RegDst = 1 RegWrite MemtoReg = 0 R-type completion fine=1 IorD=3 WriteData=1 MemWrite ALUSrcA=2 ALUSrcB=1 ALUOp=00 SRB=1 WRB M[B] MDR fine=0 B B+4 41

NB: per altri esempi: cfr i testi d esame di Calcolatori Elettronici A (oltre a quelli di Calcolatori!) 42

ESERCIZI INDIVIDUALI 43

Esercizio POST Esercizio 4 (dallo stesso appello) Si consideri l esercizio risolto al punto precedente; si assuma un carico di lavoro che preveda la seguente distribuzione delle istruzioni: lw: 20 % sw: 20 % Tipo-R: 30 % beq: 10 % j: 10 % addmem: 10 % Si supponga che le operazioni atomiche delle unità funzionali principali richiedano: Unità di memoria (lettura e scrittura): Register File (lettura e scrittura): Operazione ALU: 2 ns 1 ns 2 ns Si confrontino le prestazioni (in termini di rapporto tra tempi di esecuzione) di un ipotetica implementazione a singolo ciclo rispetto all implementazione multiciclo individuata al punto precedente. 44

Singolo ciclo T clock è valutato sull istruzione più lunga; è facile rendersi conto che questa è addmem, il cui tempo di esecuzione è maggiore della lw che era già l istruzione più lunga In particolare: Fetch: 2 ns Prelievo rs: 1 ns ALU (rs+offset): 2 ns Accesso Mem: 2 ns ALU(rt+M[ ]): 2 ns Scrittura rt: 1 ns 10 ns T esecuzione = #istruzioni * T clock = #istruzioni * 10 45

Multiciclo T esecuzione = #istruzioni * CPI * T clock T clock è valutato sull operazione più lunga eseguita in un ciclo di clock; le operazioni più lunghe (accesso a memoria e uso ALU) durano 2 ns T clock = 2 ns CPI va valutato sul carico di lavoro, tenendo presente che addmem ha 6 cicli: CPI = 0,2 * 5 + 0,2 * 4 + 0,3 * 4 + 0,1 * 3 + 0,1 * 3 + 0,1 * 6 = 4,2 QUINDI SI OTTIENE: T esecuzione = #istruzioni * 4,2 * 2 = #istruzioni * 8,4 46

Confronto Prestazioni Singolo Ciclo vs. Multiciclo T singolo = #istruzioni * 10 T multi = #istruzioni * 8,4 Evidentemente la realizzazione multiciclo ha prestazioni migliori. In particolare risulta: T singolo #istruzioni * 10 = = 1,19 T multi #istruzioni * 8,4 47

Esercizio dall appello CALC-B del 20 settembre 2006 [NON FACILE] Si consideri la nota implementazione dell unità di controllo secondo la tecnica multiciclo relativamente alle istruzioni MIPS lw, sw, beq, j e TIPO-R [nel compito, il datapath è riportato in una figura]. Si supponga che le operazioni atomiche che coinvolgono le unità funzionali principali (di cui si tiene conto per il calcolo dei tempi) richiedano: Unità di memoria (lettura e scrittura): 2 ns Register File (lettura e scrittura): 1 ns Operazione-ALU: Si ipotizzi che il carico di lavoro preveda in ogni caso, per le istruzioni beq e j, una percentuale complessiva del 10%: f beq + f j = 10% 2 ns Determinare le condizioni in cui un implementazione a singolo ciclo risulta più conveniente, in termini di prestazioni, rispetto a quella multiciclo. Rispondere alla stessa domanda supponendo che il carico di lavoro preveda per i salti (condizionati e incondizionati) una percentuale complessiva del 20% (al posto del 10%). Come si può giustificare intuitivamente il risultato? 48

Devo confrontare prestazioni a singolo ciclo vs. multi-ciclo: - esprimo i tempi di esecuzione nei due casi e li confronto - mi aspetto che le prestazioni multi-ciclo siano migliori, a meno che l istruzione più onerosa (la lw) non sia troppo frequente rispetto al carico di lavoro (vedi le considerazioni alla fine del precedente esercizio). Prestazioni nel caso di singolo ciclo T clock - dovuto all istruzione lw: 2 ns (fetch) + 1 ns (Reg. file) + 2 ns (ALU) + 2 ns (Memoria dati) + 1 ns (Reg. file) = 8 ns CPI = 1 T SC = I * 8 ns (I è il numero di istruzioni) Prestazioni nel caso multiciclo T clock = 2 ns (dovuto all operazione più lunga: accesso a memoria o ALU) CPI = f lw *5 + f sw *4 + f TIPO-R *4 + f beq *3 + f j *3 T MC = I * [f lw *10 + f sw *8 + f TIPO-R *8 + f beq *6 + f j *6] ns 49

Caso f beq + f j = 10% T SC < T MC se e solo se I * 8 < I * [f lw *10 + f sw *8 + f TIPO-R *8 + f beq *6 + f j *6] cerco di raccogliere per esprimere f beq + f j = 0.1 8 < f lw *10 + f sw *8 + f TIPO-R *8 + (f beq + f j )*6 8 < f lw *10 + f sw *8 + f TIPO-R *8 + 0.1*6 7.4 < f lw *10 + f sw *8 + f TIPO-R *8 E adesso? Devo cercare di ottenere una sola incognita, che potrebbe essere f lw 50

7.4 < f lw *10 + f sw *8 + f TIPO-R *8 So che f lw + f sw + f TIPO-R + f j + f beq = 1 f beq + f j = 0.1 f lw + f sw + f TIPO-R = 0.9 7.4 < f lw *10 + (f sw + f TIPO-R )*8 0.9 - f lw 7.4 < f lw *10 + (0.9 - f lw )*8 f lw > 0.2/2 = 0.1 Prestazioni a singolo ciclo prevalgono quando lw ha frequenza maggiore del 10% (NB: corrisponde al tipo di risultato che ci aspettiamo) 51

Caso f beq + f j = 20% Intuitivamente: cresce la frequenza delle istruzioni con tempi di esecuzione inferiore ci aspettiamo che la tecnica multiciclo prevalga ancora di più, ovvero che la percentuale di f lw per cui singolo ciclo è conveniente cresca. Rifacendo i calcoli con il nuovo vincolo risulta: 8 < f lw *10 + f sw *8 + f TIPO-R *8 + 0.2*6 6.8 < f lw *10 + f sw *8 + f TIPO-R *8 con f lw + f sw + f TIPO-R = 0.8 6.8 < f lw *10 + (0.8 f lw )*8 0.4 < f lw *2 f lw > 0.4/2 = 0.2 In questo caso, prestazioni a singolo ciclo prevalgono quando lw ha frequenza maggiore del 20% 52