Newsgroup: it.comp.hardware
Titolo: Le FPU non-Intel (ver. ITA ridotta)

Per le fonti ed il testo integrale vedi l'articolo originale in Inglese.
Questo è un mio compendio, e mi scuso anticipatamente se commetterò qualche
errore di traduzione.
/*
		La Grande Questione : La FPU del K6
Il Pentium Pro ha delle prestazioni in virgola mobile nettamente migliori
di quelle del K6 e questo è dovuto alla presenza nel processore di una
doppia pipelined FPU. Ma se è così, perchè il benchmark Quake (ritenuto
valido per testare le FPU), indica un miglior comportamento del Pentium Mmx
/* ¡non lo sapevo! */. Bisogna osservare il funzionamento dei
processori odierni della famiglia x86. Tutti hanno una FPU singola /*
almeno */ da 80-bit, che esegue le istruzioni con un metodo ormai ibrido
CISC/RISC.
Si deve comprendere il significato di questi 2 termini : si chiama CISC
(Complex Instruction Set Computing)  un insieme esteso di istruzioni anche
molto specializzate con cui si comanda normalmente una CPU della famiglia
x86, si chiama RISC (Reduced Instruction Set Computing) un insieme di
istruzioni le cui caratteristiche peculiari sono la semplicità e la
lunghezza fissa.
Il K6 non funziona come le altre CPU, perchè esso è in realtà un processore
RISC, che però riesce a comprendere e tradurre le istruzioni CISC.
A quanto pare Quake utilizza delle istruzioni FPU miracolosamente
ottimizzate per il Pentium Mmx. L'esempio contrario è dato dal FPU
benchmark in Wintune 97, che dà il K6 migliore del Pentium Mmx ./*  ¿Ci
sono conferme in Italia? */ D'altro canto ha senso ottimizzare i propri
programmi per i processori Intel poichè sono la maggior parte dei
processori di 5ª generazione venduti ed utilizzati. Ecco poi un
interessante commento dall'IRC: poichè il Pentium ha una FPU pipelined, ed
il Cyrix 6x86 non, con un uso intensivo della FPU, come in Quake, dovrebbe
essere più veloce il 6x86. /* ¿Perche? */ Ma Quake come ogni altro gioco
non utilizza il calcolo reale, ma solo operazioni fra interi. Uno
pseudo-codice della procedura usata in Quake è il seguente:
<loop>
<Carica i valori dentro gli 8 registri della FPU dal sorgente>
<Salva tutti i valori dagli 8 registri dell'FPU alla destinazione>
<Muovi il sorgente ed i puntatori di destizione>
<endloop>
Questo non è tutto. In passato, in epoca pre-Pentium, il percorso dei dati
esterno alla FPU era a 32 bit e non vi era convenienza a fare queste cose, 
ma poichè dal Pentium in poi questo è passato a 64 bit, è piu conveniente
utilizzare l'FPU che può funzionare a 64 bit che processare gli interi a 32
bit. 
La FPU è ora usata per muovere le stringhe. Gli Intel hanno un'accesso
velocissimo al registro, probabilmente perchè hanno la FPU più pipelined.
Ma gli AMD e i Cyrix hanno una caratteristica, propria anche del Pentium
Pro, chiamata linear burst o write-combining, che permette di prendere
istruzioni di 8, 16 e 32 bit, combinarle in stringhe di 64 bit ed eseguirle
contemporaneamente. Per usare questa caratteristica un programmatore non
deve far altro che continuare ad usare il buon vecchio calcolo fra interi,
invece di utilizzare la FPU per calcoli pseudo-reali, in realtà fra interi.
 
Quando si fa quest'ultima operazione si danneggia il rendimento delle FPU
AMD e Cyrix, sia perchè perlopiù non molto pipelined, /* almeno fino a
qualche tempo fà...*/ sia perchè il sovraccarico della FPU vanifica il
write-combining. Il Pentium Pro riesce a combinare abbastanza bene queste
due caratteristiche.
Io scommetterei che una versione di Quake programmata con metodi più 
tradizionali sarebbe ancora più veloce in un Pentium Pro, decollerebbe nei
Cyrix e negli AMD, ma sarebbe più lenta nei Pentium. Ci si meraviglia che 
molti benchmark mostrano che le FPU AMD e Cyrix sono veloci almeno quanto
le controparti Intel nel calcolo reale, ma che questo non viene dimostrato
in Quake. La risposta è che Quake non fa realmente uso della FPU per i suoi
scopi naturali. Cyrix ed AMD sono buoni nelle vere operazioni fra numeri
reali.
 
Yousuf Khan
*/
Se avete commenti da fare o precisazioni, sarò ben felice di leggerli.
Iskandar

Il k6 cosa dà?
K6200 123
Ciao
Fabio
Identificatore Chiave Pubblica DSS: 0x4EF88764   RSA: 0x8C45EA25
Fingerprint  DSS    7FFF 744E BD30 BD1F 7446  1093 70F8 BECE 4EF8 8764
Fingerprint  RSA    6D56 1945 612F 8675  5CA8 E5B1 AD8C 15E3