What does "issue or start an instruction" mean?
Nel contesto di ciò che è scritto, dovrebbe significare la quantità di tempo tra quando la CPU può avviare il processo di gestione di una istruzione e quando può fare lo stesso per quella successiva. Se questa spiegazione sembra vaga, la ragione è che cambierà molto per architettura.
Supponiamo di avere alcune istruzioni da eseguire su una CPU fittizia con registri numerati in cui il recupero e la decodifica (F & D) richiede sempre tre unità di tempo e l'esecuzione richiede dieci:
ADD R1, R2 ; R1 ← R1 + R2
LOAD R3, 0 ; R3 ← 0
LSR R4, 3 ; R4 ← R4 shifted 3 bits to the right
Su un design semplicistico che non parallelizza nulla, il tempo totale per eseguire questo snippet di codice è 39 unità: 3 + 10 (F & D più esecuzione) per ADD
, 3 + 10 per LOAD
e 3 + 10 per LSR
.
Ad un certo punto, i progettisti di CPU hanno notato che i loro chip avevano un hardware che restava inattivo mentre le istruzioni venivano eseguite e capiva che nulla poteva fermarsi dall'usarlo per eseguire istruzioni successive che non dipendevano dal risultato di quelle precedenti. Nell'esempio sopra, nessuna delle istruzioni ha qualcosa in comune con le altre. Tutti i registri coinvolti sono unici, così come lo sono le istruzioni. (Per semplicità, diciamo ADD
, LOAD
e LSR
utilizzano tutti hardware diversi da eseguire.) Ciò significa che tutti possono passare attraverso la fase di esecuzione in parallelo senza produrre risultati errati.
Tre istruzioni in esecuzione in parallelo perfetto, non-del-mondo richiederebbero un totale di 13 unità di tempo, un risparmio di tempo del 66% rispetto alla CPU non parallelizzata. Questo è un bel miglioramento finché il mondo reale non si intromette e ti rendi conto che non puoi eseguire tutta la fase F & D in parallelo perché non hai idea se l'istruzione LOAD
utilizzerà gli stessi registri della ADD
sopra di esso. Per evitare ciò, F & D deve essere fatto in serie. Una volta stabilito che non dipende da nulla, puoi inviarlo per l'esecuzione e passare a F & D il prossimo.
La prima istruzione prende tre unità per F & D e quindi viene inviata da qualche altra parte nel processore per essere eseguita. Quindi il secondo F & D può andare avanti per altre tre unità di tempo e poi il terzo per lo stesso. A quel punto, abbiamo speso nove unità di tempo su F & D. Poiché la terza istruzione è stata l'ultima a essere decodificata, dobbiamo attendere altre dieci unità dopo di essa per eseguirla. Ciò significa che l'ultima istruzione finirà di eseguire 19 unità di tempo dopo che F & D inizia sul primo. Questo è ancora un risparmio non troppo modesto del 51% sul fare tutto in serie.
Quando sei in grado di eseguire molte istruzioni in parallelo, quanto tempo impiegano le istruzioni per eseguire diventa un po 'meno rilevante di quanto tempo ci vuole per avviarle (emetterle). L'ora di inizio è diventata più critica perché ogni unità di tempo spesa per valutare se un'istruzione può essere eseguita o meno è tempo in cui l'hardware di esecuzione non sarà occupato. Se i progettisti della nostra CPU fittizia trovano un modo per tagliare un'unità di tempo fuori da quella fase, il tempo totale per le tre istruzioni nell'esempio scende da 19 a 16, il che non è nulla da starnutire. Taglia un altro e sei giù a 13.
Does "execute an instruction" mean only step 6 in the fetch-decode-execute cycle ?
Ai fini di questa discussione, sarebbe ragionevole dire che significa utilizzare l'hardware nella CPU per eseguire i desideri dell'istruzione.