Post by Gianluca AndriniPost by Lorenzo MichelettoPost by Gianluca AndriniI K8L dovrebbero migliorare solo i float, non le SSE.
Ehm! Prima di dire una cosa simile dovresti dare un occhiata
agli schemi a blocchi di un K7, di K8, di un P4, di un Pentium M
o anche di un Conroe.
Non ci sono delle "ALU SSE dedicate", ci sono le ALU
(per interi e FP) che eseguono sia le istruzioni "normali"
che le SSE.
Quindi un raddoppio delle prestazioni in FP dovrebbe tradursi anche
*anche* in un raddoppio delle prestazioni delle istruzioni SSE
che usano formati floating point.
L. Micheletto
http://www.realworldtech.com/page.cfm?ArticleID=RWT030906143144&p=3
Le FADD, le FMUL e le FDIV seguono strade separate dalle SSE.
A suo tempo avevo letto pure io quell'articolo, ma c'era
qualcosa che mi suonava un pochino strano perche sembrava quasi
che le porte 0 ed 1 andassero su piu sub-pipeline automagicamente
senza altra circuiteria di arbitrazione, ma guardando poi qui:
http://episteme.arstechnica.com/groupee/forums/a/tpc/f/174096756/m/905006818731/p/1
Al terzo intervento Derek Kanter (quello che ha scritto
l'articolo a cui ti riferisci) risponde
"Most of the juicy details that I got were from the Chief Architects.
I had a chance to sit down with Jack Doweck and Bob Valentine
and discuss this for an hour or so."
In altre parole per scrivere l'articolo e fare i vari schemi
Derek Kanter ha *parlato* per circa un ora con i due capo progettisti
non gli hanno passato i loro schemi dettagliati e simili
ma ne hanno parlato e lui li ha ricostruiti a modo suo, con alcune
imprecisioni perche alcuni blocchi vengono suddivisi in
sottoblocchi in base ai tipi di operazioni che possono eseguire
invece che in base alla loro struttura reale.
Ora guardate questo:
http://arstechnica.com/articles/paedia/cpu/core.ars/1
E' l'articolo sul Conroe che Jon "Hannibal" Stokes ha pubblicato
su Ars Technica il 5 aprile 2006 (mentre l'articolo di Kanter
risale al 9 marzo 2006) nella pagina 3
( http://arstechnica.com/articles/paedia/cpu/core.ars/3 )
viene mostrato uno schema *apparentemente* ancora piu strano
ma se si guarda quali sono le porte che vanno alle
varie unita "apparentemente distinte" c'e' da supporre che
in realta si tratti della stessa sub-pipeline con le stesse ALU
e visto che Hannibal e' un tipo preciso, dice esplicitamente:
"Note that in my Core diagrams I've depicted the FADD/VFADD
and FMUL/VFMUL pipes as four separate blocks for clarity's sake.
The pairs are colored alike, though, to show that the FADD shares
hardware with the VFADD, and the FMUL shares hardware with the VFMUL,
with the result that these four blocks should really be considered
as constituting two pipelines".
Infatti poi alla pagina 4
( http://arstechnica.com/articles/paedia/cpu/core.ars/4 )
ripete il concetto
"As noted above, 128-bit floating-point arithmetic operations
go into the two FADD/VFADD and FMUL/VFMUL pipelines.
So these two units handle both vector and scalar floating-point
operations. Both of these pipelines are also capable of doing
floating-point and vector register moves. "
In altre parole le istruzioni x87 e quelle SSE vengono
eseguite dalle stesse ALU, il motivo principale di
questo e' che la differenza tra un operazione "scalare"
ed una "vettoriale packed" con lo stesso numero di bit
sta tutta sul fatto che i bit di carry o di calcolo prefisso
vengano propagati oppure no, la "modalita doppia" (supportare
sia il modo "scalare" che quello "packed vector" e' praticamente
a costo zero) e permette di fare con una sola ALU quel che
altrimenti richiederebbe due alu diverse, interconnessioni
distinte, ecc. ecc.
Uno dei motivi per cui per ora Intel si tiene molto sul vago
riguardo i dettagli implementativi e' che probabilmente non
vuole rendere la vita troppo facile ad AMD, perche il Conroe
e' piu simile al K8 di quanto appaia a prima vista e con
informazioni certe ed opportuni ritocchi, AMD potrebbe
rendere il K8L in grado di essere piu efficiente del Conroe
nell'eseguire codice ottimizzato per quest'ultimo.
[N.B. Quanto segue sono mie *ipotesi*, non lavoro per Intel
e certi dettagli implementativi che ipotizzo
sono basati sulle infomazioni incomplete a disposizione
del pubblico]
Il Conroe ha 2 "sub-pipeline" multifunzione per interi e float
(quelle raggiunte da port 0 e port 1) una "sub-pipeline" (su port 2)
per i branch (e operazioni simili a quelle che si fanno con i branch
, probabilmente addizioni/sottrazioni/mov_su_condizione)
e per alcune istruzioni SSE (notare che non e' indicato
di che tipo sono, potrebbero anche essere solo
per i formati interi) ed infine su port 3,4,5 ci sono
le unita di load/store/address.
Il K8 invece ha 3 sub-pipeline per interi e calcolo indirizzi
ognuna con il proprio scheduler e con la possibilita
di eseguire operazioni simultanee su ALU ed AGU nella
stessa sub-pipeline (N.B. ricordate che le AGU sono
delle "ALU specializzate per il calcolo di indirizzi"
ma che possono anche essere usate per somme, sottrazioni
e move su interi, con ALU a 64bit ed AGU a 64bit le
sub-pipeline per gli interi possono elaborare 128bit al colpo)
ed uno scheduler che pilota le 3 sub-pipeline per
FADD, FMUL (usata anche per divisioni e per alcuni
tipi di moltiplicazioni di interi)
e FMISC (che comprende load/store FP interno al core).
Se ci fate caso sul Conroe le "sub-pipeline" di port 0 ed 1
dovrebbero essere in grado di eseguire operazioni piu sofisticate
di quelle "ALU ed AGU simultanee" di come fa il K8
(e' quindi probabile che se non ci sono istruzioni SSE da eseguire
le pipeline su port 0 ed 1 possono eseguire 2 operazioni su due
interi a 64bit distinti oppure su un intero a 64bit
con calcolo simultaneo di parte dell'indirizzo di destinazione a 64bit).
Idem per la sub-pipeline su port 2, seppur con maggiori limitazioni.
In caso contrario non si spiegherebbe come faccia il Conroe
ad essere piu efficiente sugli interi del K8, se invece
si segue il ragionamento sopra si vede che Il Conroe
puo eseguire simultaneamente 6 operazioni a 64bit su interi
(con alcune limitazioni) ed il K8 puo fare
altrettanto (con *differenti* limitazioni).
In altre parole sia K8 che Conroe, per quel che riguarda
l'esecuzione vera e propria delle istruzioni intere, hanno
3 sub-pipeline capaci di operare su 128bit complessivi
ma con differenze a livello di schedulazione
e di "specializzazione" delle singole sub-pipeline.
Anche per i float (sia FPU x87 che SSE) la situazione
e' simile (FADD su una pipeline, FMUL su un altra
e differenti vincoli di esecuzione tra Conroe e K8).
Attualmente e' certo che a parita di clock
il Conroe abbia prestazioni migliori dei K8, ma se AMD
azzecca la "ristrutturazione del core" che verra' fatta
con il K8L, ha buone possibilita di riportarsi in vantaggio.
Ovviamente Intel intende fare il possibile per evitare
la cosa ed il modo migliore sta nel non divulgare troppe
informazioni sino a quando per AMD sara' troppo tardi
per apportare ulteriori modifiche al K8L.
In fin dei conti basta un dettaglio sottovalutato
per rovinare la festa alla concorrenza, Intel lo sa bene
visto che ne ha fatto le spese con la debacle delle
"istruzioni mancanti" delle prime implementazioni di EM64T.
L. Micheletto