Newsgroup: it.comp.hardware.cpu
Titolo: Come ho "ucciso" un P4 EE...

Ciao a tutti,
nel laboratorio della università che frequento hanno installato un P4 EE...
Una bestia di macchina non c'è che dire! Lavorarci è un piacere ma anche
questo processore ha alcuni punti deboli che ho riscontrato facendo girare
un piccolo programma C++ da me stesso realizzato proprio per confrontare le
prestazioni pure di questa CPU con il nuovo Athlon FX-51 che si è fatto
ultimamente un mio amico patito dei giochi.
Questo programma fa eseguire una serie di calcoli in virgola mobile a doppia
precisione fra due matrici quadrate grandi circa 150 MB l'una... E' un
massacro per i processori...
Di fatto ho riscontrato che il P4 EE è parecchio più lento rispetto
all'Athlon FX-51, cronometro alla mano ho visto che il P4 EE ha completato
l'esecuzione in 11 minuti e 9 secondi mentre l'Athlon FX-51 ha impiegato 8
minuti e 38 secondi, considerate che il mio buon K6-III 450 MHz impiega
oltre 95 minuti e un vecchio Pentium 166 MMX ha impiegato ben 6 ore e
mezza!!!
Entrambe i processori (P4 EE e Athlon FX-51) sono equipaggiati con 1024 MB
di RAM e Windows XP SP1.
Secondo me il lavoro sulla matrice così grande ha penalizzato il P4 EE
perchè non ha potuto sfruttare al meglio la dotazione di cache, forse anche
l'unità floating point è un po' più scarsa rispetto all'Athlon FX-51
tuttavia in quest'ultimo è anche vero che va ad un clock inferiore.
Secondo voi come dovrebbero essere interperetati i risultati che ho
ottenuto?
Saluti, Marco

 risultati che ho ottenuto?
Direi come hai detto.
MaxArt

 bit: vedi un po' quel che ne esce fuori!
Dovrei usare matrici piccole per favorire un po' il P4 EE... ma è un
problema poi cronometrare in modo affidabile (almeno "a mano")... poi il
problema è che non ho il compilatore a 64 BIT... penso che a 64 BIT
applicazioni di questo tipo dovrebbero andare molto forte, almeno un buon
40-45% meglio ma non dico nulla senza provare... Vedremo se in futuro potrò
fare qualche confronto più puntuale.
Saluti, Marco ;)

 stata inattendibile.
Scusa eh...
void new_test()
{
     for (int ciclo=1; ciclo<=1000; ++ciclo)
        old_test();        //Test originario con matrici da un megabyte
}
Cosě il test ti ci mette mille volte tanto e riesci a segnare a mano quanto
ci mette...

 problema è che non ho il compilatore a 64 BIT...
gcc ?
-- 
"It is not enough to succeed.  Others must fail."
Linux Registered User #301571, running Gentoo
Memeber of Luganega - Linux User Group Crema (IT)
http://filibusta.crema.unimi.it/

 fare qualche confronto più puntuale.
Usa gcc e vivi tranquillo, oppure il port di gcc per dos/windows
usando le dovute ottimizzazioni (almeno la versione 3.3).
-- 
Valentino Volonghi, Regia SpA, Milan
Linux User #310274, Gentoo Proud User

 prestazioni pure di questa CPU con il nuovo Athlon FX-51 che si è fatto
-CUT-
Interessante.
Ma il programma in questione è multithreaded (per sfruttare l'Hyperthreading
del P4)?
Sarebbe stato bello anche sfruttare i 64bit dell'FX, così da spremere al
massimo tutte e 2 le CPU.
Se è multithreaded, me lo manderesti per e-mail? :-) Fammi sapere che scrivo
l'indirizzo.
Voglio provarlo su un biprocessore...
Ciao!


Se il programma non sfrutta eventuali ottimizzazioni (come le SSE2
o l'HT) è normale che questo sia più efficiente con l'Athlon, visto
che è risaputo che questa cpu nei calcoli in virgola mobile è più veloce di
qualsiasi cpu P4 con architettuta net-burst, a causa della presenza
di ben tre unità FP contro l'una sola del P4... qui infatti la cache
L3 conta fino ad un certo punto.
Ciao

 un'Audi A6...
E io cosa dovrei dire che conosco gente che ha vent'anno e già
gira in Mercedes SL500 (quella nuova eh?) ;-)))
Ciao

 gira in Mercedes SL500 (quella nuova eh?) ;-)))
Non sapevo che tu mi conoscessi! :)


Dove abiti? :))

Io non ho utilizzato nessuna ottimizzazione per nessuno dei due processori
perchè se avessi utilizzato una qualche ottimizzazione (HT, SSE, 3DNOW,
ecc...) il bench sarebbe stato fasullo perchè avrei chiaramente
avvantaggiato o il P4, o l'Athlon FX-51.
A parte il fatto che, non essendo un programmatore professionista, (mi
occupo di elettrotecnica ed elettronica industriale) non saprei proprio come
creare un programma ottimizzato per l'uno o l'altro processore.
In definitiva ho solo voluto vedere quale dei due chip porta a termine un
"lavoro" di calcolo intenso in FPU e anche un pochino ALU su matrici molto
grandi dove un elemento molto importante che determina la velocità di
esecuzione è il sottositema della memoria e la banda passante che il
processore ha con la memoria stessa.
In questo caso si sono confermate le ottime capacità dell'Athlon 64 FX-51
nonostante anche il P4-EE dimostra ottime capacità elaborative; in
particolare entrambe le macchine mi hanno letteralmente entusiasmato
nell'utilizzo dei programmi comuni, non ho provato coi giochi ma di sicuro
sono convinto che siano tutti e due dei processori veramente splendidi.
Saluti, Marco ;)


Ci mancherebbe altro che fossero anche scarsi...;)))

 ottenuto?
Che con applicazioni non ottimizzate Hyper Threading l'FX-51 è più veloce.
Anche nell'esecuzione di istruzioni SSE2 l'FX-51 sembra più lento che il P4
EE.
Saluti.

Forse fra qualche giorno (o settimana, dipende da quando metterò nuovamente
piede in laboratorio) proverò con un doppio Athlon MP (non ricordo il MN) e
vi faccio sapere...
Questo periodo sono in vena di Benchmarks... :)))
Chissà se mi faranno mettere le mani su un Itanum... ne abbiamo 2 (versione
Merced 1.0 GHz) ma temo che non siano alla mia portata... li usano per le
simulazioni dei circuiti e sono sempre occupati...
Saluti e a presto!
Marco


Non hai specificato se il programma era compilato per usare le istruzioni
della FPU x87 (quella con 8 registri da 80bit gestiti come uno stack)
oppure le le istruzioni SSE2.
Quando si usano le istruzioni "x87", per *tutti* i P4 son dolori visto
che per roba FPU intensive (ma che non dipende troppo dalle cache)
le prendono pure da dei K7 con la meta del loro clock reale
(solo se si usa roba che usa la FPU x87 *e* "spazzola bene la memoria"
  i P4 recuperano in prestazioni grazie alle cache che hanno).
Se tale differenza l'hai riscontrata utilizzando codice compilato
con il supporto per SSE2 allora molto probabilmente ad avvantaggiare
gli Opteron sono le latenze piu basse che hanno nell'accedere
alla ram.
Di solito quando si devono manipolare matrici grosse non e' un caso
se vengono utilizzate tecniche di block optimization (dette anche
di "strip mining", come la tecnica di escavazione usata sulle miniere
a cielo aperto) in modo tale da "ripassare" blocchi che possono stare
in cache anche a costo di rendere piu pesanti i calcoli
(tanto un singolo cache miss "pesa" molto di piu di eseguire in
  modo inefficiente operazioni su dati in cache).
L. Micheletto

 simulazioni dei circuiti e sono sempre occupati...
Spediscimelo per e-mail, che lo provo io su un doppio AMD.


Che scarsi... ancora i Merced usano :-D

Come ho già detto ho utilizzato un modestissimo compilatore Borland a 32
BIT, quello che viene usato in università per compilare normalmente i
programmi "didattici", quindi presumo senza alcuna ottimizzazione
particolare né per HT, né per SSE/SSE2, né per 3DNOW!.
Mi pare che il compilatore ottimizzasse il codice per i processori MMX ma
ormai queste istruzioni sono implementate in ogni chip presente sul mercato
ormai da anni.
Ho di proposito utilizzato 2 matrici quadrate da circa 150-160 MB cadauna
per cercare di testare anche la bontà del sottosistema della memoria e
infatti presumo che l'Athlon 64 FX-51 abbia avuto la meglio proprio perchè
ha una banda passante molto più larga rispetto al P4-EE.
Penso che se avessi usato due matrici ognuna da 1 MB le prestazioni die
entrambe i processori sarebbero state simili per il fatto che, sebbene il
P4-EE disponga di una FPU inferiore all'Athlon 64 FX-51 ha in compenso una
cache più ampia che avrebbe drasticamente ridotto la latenza di accesso ai
dati da elaborare.
In futuro farò altre prove, con il programma leggermente modificato e, se mi
verrà consentito, anche con altri sistemi fra cui un dual Athlon MP (non
ricordo il MN) e un Itanium versione Merced 1.0 GHz. Appena potrò poi vi
farò sapere ed eventualmente metterò a disposizione sul Web anche il
programmino utilizzato per le prove.
Saluti, Marco

 simulazioni dei circuiti e sono sempre occupati...
Sei sicuro che siano Merced? Merced (Itanium originale) č arrivato a 800
Mhz. Forse di tratta dell'Itanium 2 (McKinley) a 1 Ghz.
Saluti.


In effetti dovrebbe essere stato prodotto a 733 e a 800MHz...
E poi in pratica i pezzi disponibili alla vendita sono stati veramente
bassi. Strano che siano riusciti ad acquistare realmente un sistema
basato su queste cpu.
Ciao


Bene.
Ciao

 3DNow per "emulare" quelle mmx...
Anche i K6 avevano le MMX, ma non le 3DNow. Possibile che abbiano cambiato
metodo per supportare quelle istruzioni?
MaxArt

 3DNow per "emulare" quelle mmx...
Non proprio, le mmx sono venute prima e le 3DNow! sono state "progettate"
come delle estensioni ad mmx (stessi registri e con l'aggiunta di un
formato in piu).
Quando poi c'e' stato il passaggio da Athlon ad Athlon XP
e' stato aggiunto il supporto per le SSE ma utilizzando
praticamente le stesse ALU usate per le 3DNow! visto che
il numero di float a 32bit "processati per ciclo" usando SSE
oppure 3DNow! e' lo stesso, cambiano solo i registri sorgente
e destinazione (e mantenendo a parita di clock la stessa
efficienza rispetto ai PIII).
L. Micheletto


Già... infatti le mmx utilizzavano matrici prettamente "intere".
Ciao