Newsgroup: it.comp.os.linux.sys
Titolo: g77 e amd64

Strano, decisamente strano:
ho sotto mano un amd64x2 4800.
Installo suse a *32bit* e mando in esecuzione un programma scritto in
fortran da un utente.
E' un programma che studia un fenomeno fisico e non è scritto in modo
particolarmente ottimizzato, utilizza molte moltiplicazioni e divisioni tra
real. Usa variabili a 8byte.
Compilo con
g77 -O3 -ff90-o test test.f
Lo eseguo e impiega 46m 8,3s misurati con il comando time (user).
Sego tutto e installo ubuntu 6.06 per x86_64.
Compilo con:
g77 -m64 -O3 -ff90 -o test test.f
(g77 versione 3.4)
Lancio il programma e impiega 54m 5,1s
A dire la verità mi aspettavo il contrario: ovvero performace decisamente
migliori a 64bit.
Provo anche con g95 (
www.g95.org
). Ci mette ancora di più: 57m 13s
Per curiosità eseguo il test gmpbench.
A 32bit ottengo come indice complessivo 2446
a 64, 5097
Ok, mi convinco: per sfruttare appieno il processore a 64bit è necessario
utilizzare librerie ottimizzate e/o particolari accorgimenti nella
programmazione.
Mica qualcuno ha sbattuto la testa su questo spigolo e sa darmi qualche link
con guide e/o tutorial su come programmare in modo ottimizzato su cpu
amd64?
Per il momento penso che studierò le librerie gmp: 
http://www.swox.com/gmp
Altre cose interessanti che ho trovato:
http://www.amd.com/us-en/Processors/DevelopWithAMD/0,,30_2252_11395_11429,00.html
Quale libreria è più facile da usare? (i miei user non sono decisamente
power)
Grazie in anticipo per eventuali commenti.

 g77 -m64 -O3 -ff90 -o test test.f
Le cose sono 2:
-> questo e' un problema di g77 o del fortran
-> la varibile FFLAGS ha altre possibilita' di ottimizzazione.
CFLAGS ad esempio a moltre altre ottmizzazioni. A mo' di esempio puoi
guardare qui: 
http://gentoo-wiki.com/Safe_Cflags
-- 
echo onailimissaM | awk 'BEGIN { FS = "" }
{ for (i = NF; i >= 1; i-- )
  printf $i }'; echo

 migliori a 64bit.
Se usa la FPU (x87) allora non ci dovrebbero essere differenze. 8 minuti
di differenza sono tanti, ma potrebbero anche essere dovuti alle diverse
ottimizzazioni delle librerie linkate.
Inoltre il gcc, quando compila per x86_64, usa di default le SSE{,2} per
le istruzioni in floating point, potrebbe essere che l'ottimizzatore non
riesce a vettorizzare adeguatamente il codice.
Con il gcc potresti usare -mfpmath=387 per forzare le istruzioni legacy,
ma non vedo l'opzioni nel manuale del G77...
Luca
-- 
Home: 
http://kronoz.cjb.net
Non ho ancora capito se il mio cane e` maschio o femmina:
quando fa la pipi` si chiude in bagno

 Molto piu' prosaicamente: g77 fa proprio cagare.
Sarebbe interessante fare un benchmark comparativo con intel fortran compiler.
-- 
Per rispondermi, togli il nome del poeta

 
Dubito che sia ottimizzato per amd64...
Ma su piattaforma intel a 32bit abbiamo effettuato dei test e i risultati
discostano di poco (ca. 10%) usando codice identico e non ottimizzato
Tuttavia ritengo che utilizzando altri linguaggi di programmazione (python,
c++, etc.) e scrivendo meglio i programmi potremmo ottenere miglioramenti
delle prestazioni dell'80%.
Ma questo esula dal mio campo di lavoro (system) e va violentemente a
invadere il campo dei miei user (research).
Io mi posso limitare a valutare i miglioramenti variando architettura,
compilatore, hardware, sistema. Non ho molta voce in capitolo sullo
sviluppo.
Cmq. grazie a tutti per le risposte.

 discostano di poco (ca. 10%) usando codice identico e non ottimizzato
A favore di?


 
Del compilatore intel. La prova è stata eseguita su un HP Prolian ML330 con
dual xeon a 2,6ghz, 1 GB ram e con kernel 2.4.25 con patch OM