Newsgroup: it.comp.hardware.cpu
Titolo: Pipeline... da quando esistono?

Oggi si sente parlare di un Prescott con una pipeline lunga quanto la pista
di un aeroporto, ma mi stavo chiedendo da quanto tempo si sfrutta questa
tecnica di esecuzione delle istruzioni.
Ai tempi dei Pentium chi programmava in assembler doveva far attenzione agli
"stalli" dovuti ai "conflitti d'interesse" delle istruzioni caricate nelle
cosiddette u-pipe e v-pipe: stiamo parlando della stessa cosa?
MaxArt

 writes:

Direi di si, la risoluzione dei "conflitti di interesse" e` stata
risolta con la Out of order execution.
Non credo pero` che sopra una certa frequenza ci sia stato qualche
processore con pipeline.
-- 
Valentino Volonghi, Regia SpA, Milan
Linux User #310274, Gentoo Proud User

tecnica di esecuzione delle istruzioni.
al momento non ho il tempo per verificare le mie fonti quindi potrei
dire una castroneria, ma se la memoria dice bene il primo processore
"mainstream" a pipelinizzare l'esecuzione delle istruzioni e' stato il
Motorola 68040.
--
    (iao!!oai)                                    (ICQ: 10860566)
    //.aurizio
[WARNING!: togliete _nessuno_ per rispondere]
    Il segreto per essere considerato un creativo sta nel non fare
    mai riconoscere le proprie fonti [A. Einstein]

 ha scritto nel messaggio
news:bvl31l$tlqlv$1...@ID-154444.news.uni-berlin.de...

Le prime cpu x86 dotate di unità di esecuzioni superscalari furono
appunto se non erro i primi Pentium, i quali avevano due unità
di esecuzione parallele "condite" da tecniche di previsione dei salti
di programma quali la Branch Prediction Unit...
Infine le due pipeline avevano una profondità di 5 stadi.
Ciao

 tecnica di esecuzione delle istruzioni.
Nei x86 o nelle CPU in generale?
bye,
-- 
   Piergiorgio Sartor

 Nei x86 o nelle CPU in generale?
Mah, già che ci siamo... in entrambi i casi! ;-)
Nel frattempo, ringrazio anche gli altri che sono interventi.
MaxArt

 Mah, già che ci siamo... in entrambi i casi! ;-)
Le 3 fasi fondamentali, fetch, decode ed execute,
dovrebbero essere sempre state, in qualche modo,
un pipeline.
Sicuramente il C25 ha 3 stadi di pipeline, pero`
forse anche il 6502...
bye,
-- 
   Piergiorgio Sartor

 ha scritto nel messaggio
news:bvl31l$tlqlv$1...@ID-154444.news.uni-berlin.de...

da moooooooolto!

 Infine le due pipeline avevano una profondità di 5 stadi.
Mi stai dicendo che i Pentium avevano due pipeline da 5 stadi, mentre oggi i
Prescott hanno una sola pipeline da 31?
MaxArt

 Prescott hanno una sola pipeline da 31?
No, ora l'architettura e` super-scalare. E il P4 dovrebbe averne 6 di
pipeline mentre l'Athlon 9. E l'Itanium 12.
Solo che in un'architettura super-scalare alcuni punti della pipeline
sono in comune tra tutti i tipi di calcoli che possono avvenire ad
esempio se ho in fila 2 somme, 2 moltiplicazioni FP e 2 SIMD da
effettuare le faccio passare nella pipeline con tranquillita` nei
primi stadi comuni della pipeline e poi quando si arriva all'execute
le varie istruzioni si ripartiranno ognuna al loro posto (le SIMD
andranno nella unita` di elaborazione SIMD, le INT nell'ALU e le
moltiplicazioni FP nell'unita` FP e via dicendo).
Cosi` facendo si risparmia sul silicio molto spazio perche` non ho 20
pipeline pero` ho N (con N inteso per pipeline virtuali) pipeline
parallele allo stadio M.
http://www.dcs.ed.ac.uk/home/dka/pact99.pdf
Qua c'e` qualcosa di interessante sulle architetture superscalari.


 No, ora l'architettura e` super-scalare.
Anche il primo Pentium si poteva considerare una cpu
superscalare se non erro, visto che già aveva più di una pipeline.
 Ciao

 superscalare se non erro, visto che già aveva più di una pipeline.
uh?
Uhmm... Che io sappia un'architettura e` super-scalare quando ha una
pipeline vera e propria con N unita` di esecuzione che forkano nel
momento dell'execute di un'istruzione.
Non basta avere 2 pipeline distinte (magari una per interi e una per
fp)...
Solitamente (sicuramente nel caso dei pentium) questo si affianca al
super-pipelining.
Mi sbaglio?



Il superpipeline è una pipeline sostanzialmente più profonda (lunga) della
norma, che prevede appunto almeno cinque o sei stadi di esecuzione. A parità
di tecnologia costruttiva, i processori dotati di superpipeline possono
raggiungere frequenze di clock superiori rispetto ai processori con pipeline
"normale"( come i P4 e ancora di più i nuovi Prescott). Il Pentium Pro ad
esempio aveva già delle pipeline profonde 14 stadi, percià era già una cpu
Superpipelined
a tutti gli effetti.
Ciao

 > fp)...
Si confermo, un processore per essere definito superscalare deve essere in
grado di poter parallelizzare più operazioni nello stesso ciclo di clock per
esempio incamerare una istruzione intera, una per la fpu e una simd
contemporaneamente.
Il primi processori superscalari furono il glorioso motorola 68060 e i
pentium.
Il motorola 68040 era solo parzialmente superscalare.

(appunto come i primi Pentium).
La sapevo così pure io...
a proposito, una domanda: quante istruzioni per ciclo di clock possono
caricare le CPU dalla cache L1?
Me lo chiedo perché ovviamente per avere un IPC > 1 è necessario
caricare più di una istruzione per ciclo, se no le unità di esecuzione
stanno a girarsi i chip a cicli alterni... ma un K7 con 9 unità di
esecuzione può effettivamente caricare 9 istruzoni per ciclo di clock?
immagino di no...
-- 
ZHELGADIS THE LIGHTBRINGER (ICQ 33134824)
BAG #008,DPPSJ #000,BAT #013,TFC #012, GAMERDA #026
"Aspettare non è mai stato un problema, per me.
Posso trascorrere piacevolmente ore e ore con l'aiuto di un buon caffè"

 immagino di no...
Puo tenerne 9 "in esecuzione" (piu altre in decodifica ed altre
in "ritiro" in attesa di scrivere il loro risultato all'esterno), poi
se le unita di esecuzione sono delle mini-pipeline ogni unita
puo avere "in esecuzione" piu istruzioni (es: le unita 3DNow!, SSE ed
SSE2 su K7 e P4 non sono pipelined quindi i due cicli di latenza
non significano che mentre una istruzione e' al secondo ciclo
di esecuzione un altra puo essere nel primo ciclo di esecuzione).
L' IPC e' riferito ad istruzioni "completamente eseguite"
per ciclo ed essendo una media non e' indicativo
delle prestazioni di picco (che sulle cpu x86 attuali
sono comunque *molto* piu basse di quanto il numero di unita
"indipendenti" presenti nel core faccia credere).
L. Micheletto

se le unita di esecuzione sono delle mini-pipeline ogni unita
Quindi per esempio le ALU e le FPU dei K7 (e dei P4?)
-- 
ZHELGADIS THE LIGHTBRINGER (ICQ 33134824)
BAG#008,DPPSJ#000,BAT#013,TFC#012,GAM#026,ZZZZ#027,CID#027,PAN#015
"Aspettare non č mai stato un problema, per me.
Posso trascorrere piacevolmente ore e ore con l'aiuto di un buon caffč"

 Quindi per esempio le ALU e le FPU dei K7 (e dei P4?)
Si per entrambi ma in realta si tratti di scheduler
che "pilotano" gruppi di pipeline.
Per esempio, nei K7 quella che si potrebbe chiamare
"pipeline degli interi" in realta e' composta da
uno "scheduler per MacroOp su interi"
che pilota un moltiplicatore e 3 ALU composte ognuna da
una IEU (Integer Execution Unit)
e da una AGU(Address Generation Unit) "appaiate a due a due"
ma che possono eseguire operazioni di MacroOp interne distinte
(IEU che esegue un pezzo di MacroOp ed AGU che esegue
  unpezzo di un altra MacroOP)
con l'equivalente ad esempio di massimo 6 ADD eseguite
in simultanea (questo spiega come mai le istruzioni LEA
siano cosi utili anche per "veri" calcoli, visto che usano
le AGU per eseguire ADD e shift da 1 a 3 bit su dati
senza occupare le IEU).
"Dall'esterno" sembra di avere una "pipeline virtuale" per gli
interi che riceve 3 MacroOp per ciclo, ma in base a come
vengono generate le MacroOp ed alle loro interdipendenze
le prestazioni reali possono variare parecchio da un caso ottimale
in cui si ha l'equivalente di SEI pipeline "tutte piene"
che sparano fuori 6 risultati per ciclo (3 "dati" e 3 "indirizzi")
fino ai casi peggiori in cui le ALU sono quasi piene di bolle
(es:  la IMUL viene eseguita "deviando" l'input di IEU0
       verso il moltiplicatore ed inserendo bolle in IEU0 ed IEU1
       fino a quando il risultato a 64bit della moltiplicazione "emerge"
       dal moltiplicatore e viene scritto sui latch di uscita
       di IEU0 ed IEU1).
Parte dell'incremento delle prestazioni che ha il K8
rispetto ai K7 dipende dal fatto che gli stadi di decodifica
aggiuntivi "riorganizzano meglio" le MacroOp prima di spedirle
verso gli scheduler che gestiscono l'esecuzione vera e propria
(ed aggiungendo a questo il raddoppio dei registri interni, usando
  le istruzioni LEA si riesce piu facilmente ad arrivare
  vicini alle quasi 6 operazioni intere per ciclo sfruttando le AGU).
Se guardi sul sito di AMD c'e' un documento .pdf
("AMD Athlon Processor x86 Optimization Guide") che spiega
come ottimizzare per il K7 e che nell'Appendice A descrive
la microarchitettura dei K7 con un occhio di riguardo per chi
vuole spremerlo fino all'ultima istruzione.
L. Micheletto