Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoBenigna Grossi Modificato 10 anni fa
1
Università degli Studi di Napoli “Federico II” Facoltà di Ingegneria Dipartimento di Informatica e Sistemistica Corso di Sistemi ad elevate prestazioni – Prof. Nicola Mazzocca Sistemi ad elevate prestazioni Lezione 2
2
Sistemi ad elevate prestazioni - Prof. re Nicola Mazzocca Conflitti nei sistemi basati su pipeling - La gestione dei salti (1) In presenza di un salto non deve essere sempre prelevata dalla memoria l’istruzione successiva, e può non essere facile o possibile determinare subito l’istruzione a cui saltare; In presenza di un salto non deve essere sempre prelevata dalla memoria l’istruzione successiva, e può non essere facile o possibile determinare subito l’istruzione a cui saltare; 1. IF 2. ID 3. EX 4. MEM 5. WB Quando il processore preleva una istruzione, non sa che tipo di istruzione ha prelevato finché non la interpreta (fase ID), ma, a questo punto, ne avrà già presa un’altra (quella immediatamente successiva); Quando il processore preleva una istruzione, non sa che tipo di istruzione ha prelevato finché non la interpreta (fase ID), ma, a questo punto, ne avrà già presa un’altra (quella immediatamente successiva); Potrebbe rendersi conto che l’istruzione precedente era un salto, dovendo quindi saltare ad un’istruzione diversa da quella successiva, rendendo, quindi, il successivo prelievo inutile (branch penalty). Potrebbe rendersi conto che l’istruzione precedente era un salto, dovendo quindi saltare ad un’istruzione diversa da quella successiva, rendendo, quindi, il successivo prelievo inutile (branch penalty).
3
Sistemi ad elevate prestazioni - Prof. re Nicola Mazzocca Conflitti nei sistemi basati su pipeling - La gestione dei salti (2) Mediamente il 25% del totale delle istruzioni in un programma è rappresentato da istruzioni di salto; Mediamente il 25% del totale delle istruzioni in un programma è rappresentato da istruzioni di salto; Se si verifica ‘branch penalty’ dovendo gestire l’evoluzione di istruzioni che non dovevano essere caricate su ¼ delle istruzioni del programma allora la cosa risulta preoccupante; Se si verifica ‘branch penalty’ dovendo gestire l’evoluzione di istruzioni che non dovevano essere caricate su ¼ delle istruzioni del programma allora la cosa risulta preoccupante; Consideriamo un esempio, in cui abbiamo supposto che ogni istruzione occupi 4 byte… Consideriamo un esempio, in cui abbiamo supposto che ogni istruzione occupi 4 byte…
4
Sistemi ad elevate prestazioni - Prof. re Nicola Mazzocca La gestione dei salti – Esempio (1) Esempio: Esempio: 76 CMP R1, R3; 80 JEQ 100 ……………………... 100 MOVE R1, R2 ……………………... il processore procede nel seguente modo: il processore procede nel seguente modo: (1) (2) (3) (4) (5) (1) (2) (3) (4) (5) 80 IF ID EX MEM WB 84 IF ID EX MEM 88 IF ID EX tempo
5
Sistemi ad elevate prestazioni - Prof. re Nicola Mazzocca La gestione dei salti – Esempio (2) Solo alla fine della 3° fase si conoscerà l’indirizzo della prossima istruzione da prelevare ! Solo alla fine della 3° fase si conoscerà l’indirizzo della prossima istruzione da prelevare ! Nel caso in cui il salto non deve essere eseguito la pipe continua a funzionare normalmente; se, però, il salto deve essere eseguito le istruzioni 84 e 88 dovranno essere eliminate (flush della pipe) e bisognerà prelevare l’istruzione 100 e successive. Nel caso in cui il salto non deve essere eseguito la pipe continua a funzionare normalmente; se, però, il salto deve essere eseguito le istruzioni 84 e 88 dovranno essere eliminate (flush della pipe) e bisognerà prelevare l’istruzione 100 e successive. Si crea un ritardo, che diminuisce la produttività della pipe, detto branch penalty. Si crea un ritardo, che diminuisce la produttività della pipe, detto branch penalty. (1) (2) (3) (4) (5) (6) (7) (8) (1) (2) (3) (4) (5) (6) (7) (8) 80 IF ID EX MEM WB 84 IF ID 88 IF 100 IF ID EX MEM WB 104 IF ID EX MEM 108 IF ID EX 112 IF ID tempo tempo
6
Sistemi ad elevate prestazioni - Prof. re Nicola Mazzocca La gestione dei salti – Approccio conservativo Il problema è risolvibile secondo approcci fondamentali: Il problema è risolvibile secondo approcci fondamentali: Approccio conservativo: nel momento in cui il processore interpreta una istruzione come istruzione di salto (fase ID di decodifica dell’istruzione), ferma la pipe, disabilita la propagazione della istruzione che era stata erroneamente già prelevata, determina l’istruzione a cui saltare (fase EX) e la preleva; Approccio conservativo: nel momento in cui il processore interpreta una istruzione come istruzione di salto (fase ID di decodifica dell’istruzione), ferma la pipe, disabilita la propagazione della istruzione che era stata erroneamente già prelevata, determina l’istruzione a cui saltare (fase EX) e la preleva; (1) (2) (3) (4) (5) (6) (7) (8) (1) (2) (3) (4) (5) (6) (7) (8) 80 IF ID EX MEM WB 84 IF 88 100 IF ID EX MEM WB 104 IF ID EX MEM 108 IF ID EX 112 IF ID tempo
7
Sistemi ad elevate prestazioni - Prof. re Nicola Mazzocca La gestione dei salti – Branch Delay Branch Delay. Possiamo avere un accorgimento effettuabile in fase di compilazione che ci permette di evitare l’approccio conservativo, facciamo un esempio. Abbiamo due istruzioni: Branch Delay. Possiamo avere un accorgimento effettuabile in fase di compilazione che ci permette di evitare l’approccio conservativo, facciamo un esempio. Abbiamo due istruzioni: a = a + b if (c == 0)… in fase di compilazione le due istruzioni possono essere invertite, perché l’istruzione a = a + b deve essere eseguita comunque, indipendentemente alla destinazione del salto determinata dalla if, ma questo approccio non è sempre praticabile ! in fase di compilazione le due istruzioni possono essere invertite, perché l’istruzione a = a + b deve essere eseguita comunque, indipendentemente alla destinazione del salto determinata dalla if, ma questo approccio non è sempre praticabile !
8
Sistemi ad elevate prestazioni - Prof. re Nicola Mazzocca La gestione dei salti – Approccio ottimistico (branch prediction) (1) Branch Prediction. Si tenta di fare una previsione su quale sia il ramo da eseguire in una istruzione condizionale. Consideriamo il seguente segmento di codice iterato ciclicamente: Branch Prediction. Si tenta di fare una previsione su quale sia il ramo da eseguire in una istruzione condizionale. Consideriamo il seguente segmento di codice iterato ciclicamente: 100 if condizione then 104 … else 112 … Il ramo then segue immediatamente il ramo if, mentre il ramo else è localizzato all’indirizzo 112 e quindi la sua esecuzione richiede un salto. Il ramo then segue immediatamente il ramo if, mentre il ramo else è localizzato all’indirizzo 112 e quindi la sua esecuzione richiede un salto. 100112 Branch Prediction Table
9
Sistemi ad elevate prestazioni - Prof. re Nicola Mazzocca La gestione dei salti – Approccio ottimistico (branch prediction) (2) La situazione si complica in presenza di due o più cicli for innestati. Ad esempio: for i… 92 CMP JMP JMP for j… CMP 100 JXX 100 JXX 104 … 104 … … 112 JMP 92 112 JMP 92 L’errore si verifica nel momento in cui si entra per la seconda volta nel ciclo esterno in quanto nella tabella abbiamo salvato un indirizzo fuorviante relativo agli effetti dell’n-esima iterazione del ciclo interno 100112 Branch Prediction Table
10
Sistemi ad elevate prestazioni - Prof. re Nicola Mazzocca La gestione dei salti – Approccio ottimistico (branch prediction) (3) I processori moderni evolvono fra quattro stati descritti da due bit: NON SALTARE (FORTE), NON SALTARE (DEBOLE), SALTA (FORTE) e SALTA (DEBOLE). I processori moderni evolvono fra quattro stati descritti da due bit: NON SALTARE (FORTE), NON SALTARE (DEBOLE), SALTA (FORTE) e SALTA (DEBOLE). N.S. Forte N.S. Debole S. Debole S. Forte Figura 9: I 4 stadi del Branch Prediction.
11
Sistemi ad elevate prestazioni - Prof. re Nicola Mazzocca La gestione dei salti – Approccio ottimistico (branch prediction) (4) Si noti dunque che il processore sbaglia alla fine della prima esecuzione e alla fine della seconda. Si noti dunque che il processore sbaglia alla fine della prima esecuzione e alla fine della seconda. Supponendo allora che il ciclo esterno sia di 10 iterazioni e quello interno di 1000, il processore sbaglia una volta per ciascuna esecuzione del ciclo interno (sull’ultima iterazione, un errore inevitabile), più una volta sul ciclo esterno, e quindi 10 + 1 = 11 volte soltanto, su 10*1000 = 10000 iterazioni. Supponendo allora che il ciclo esterno sia di 10 iterazioni e quello interno di 1000, il processore sbaglia una volta per ciascuna esecuzione del ciclo interno (sull’ultima iterazione, un errore inevitabile), più una volta sul ciclo esterno, e quindi 10 + 1 = 11 volte soltanto, su 10*1000 = 10000 iterazioni. Da questo si capisce anche il perché i numero di cicli esterni deve essere minore del numero di cicli interni, in quanto come visto dal conteggio degli errori nella pipe, se ho più cicli esterni commetto più errori rispetto al caso opposto. Da questo si capisce anche il perché i numero di cicli esterni deve essere minore del numero di cicli interni, in quanto come visto dal conteggio degli errori nella pipe, se ho più cicli esterni commetto più errori rispetto al caso opposto. for i… 92 CMP JMP for j… CMP 100 JXX 104 … … 112 JMP 92 N.S. Forte N.S. Debole S. Debole S. Forte Figura 9: I 4 stadi del Branch Prediction.
12
Sistemi ad elevate prestazioni - Prof. re Nicola Mazzocca Prossima Lezione Conflitti nei sistemi basati su pipelining: Conflitti sui dati - Internal Forwarding Conflitti nei sistemi basati su pipelining: Conflitti sui dati - Internal Forwarding
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.