Newsgroup: it.comp.macintosh
Titolo: prestazioni gmpy, Macbook Pro vs iBook G4

Dunque, finalmente sono riuscito a far girare la mia amata gmpy
(estensione di aritmetica multiprecisione per Python, con GMP) con la
nuova GMP 4.2, sul Macbook Pro -- ahime` solo disabilitando l'uso delle
funzioni superottimizzate in assembler (magari spiego perche` in un post
separato... chissa` che non ci sia in giro qualche superexpert di
assembler GNU e Apple che mi aiuti a risolvere!-).  Ci tenevo quindi a
verificare le prestazioni rispetto al beneamato iBook G4, per cominciare
a capire quanto mi costa rinunciare per ora a 'sto assembler.
gmpy ha un set di misurazioni di prestazioni che sono assai ben
calibrate e significative per vari compiti, quindi le ho girate (col
Python Universal 2.4.3 di Oussoren, ottimo build, quello piu`
consigliato oggi anche da 
www.python.org
: lascia il build Apple nella
polvere;-).
Cominciamo dalle somme, che sono cosa facile.  Sull'iBook:
helen:~/alex/gmpy alex$ python test/timing1.py
Sum of 100000 items of various types:
    0.220 4999950000 <type 'long'>
    0.140 4999950000 <type 'float'>
    0.230 4999950000 <type 'mpz'>
    0.320 4999950000 <type 'mpf'>
Sum of 100000 items of various types w/2.3 sum builtin:
    0.180 4999950000 <type 'long'>
    0.090 4999950000 <type 'float'>
    0.180 4999950000 <type 'mpz'>
    0.270 4999950000 <type 'mpf'>
e sull'MBP:
brain:~/alex/gmpy alex$ python test/timing1.py 
Sum of 100000 items of various types:
    0.060 4999950000 <type 'long'>
    0.020 4999950000 <type 'float'>
    0.060 4999950000 <type 'mpz'>
    0.110 4999950000 <type 'mpf'>
Sum of 100000 items of various types w/2.3 sum builtin:
    0.040 4999950000 <type 'long'>
    0.010 4999950000 <type 'float'>
    0.070 4999950000 <type 'mpz'>
    0.090 4999950000 <type 'mpf'>
Tutti i tempi sono in secondi, e molti risultati sono accompagnati anche
dal risultato ottenuto dall'operazione per verificare la correttezza.
Dunque, nonostante la mancanza delle ottimizzazioni assembler, l'MBP e`
3-9 volte piu` veloce dell'iBook sulle somme.  Particolarmente
impressionanti i float, 7-9 volte piu` veloci; sugli altri tipi di dati,
siamo comunque su di un rispettabile fattore di 3-4 volte.
Passiamo alle moltiplicazioni.  Sull'iBook:
Mul of 20000 items of various types:
    5.290 <type 'long'>
    0.030 <type 'float'>
    0.420 <type 'mpz'>
    0.070 <type 'mpf'>
sull'MBP:
Mul of 20000 items of various types:
    1.280 <type 'long'>
    0.000 <type 'float'>
    2.770 <type 'mpz'>
    0.020 <type 'mpf'>
qui, l'MBP e` _lentissimo_ sulle moltiplicazioni in MPZ, 6 volte piu`
lento dell'iBook: qui e` dove davvero morde la mancanza del famoso
codice assembler superottimizzato:-(.  Sui float, l'MBP e` cosi` veloce
che non riesco a misurarlo!!!  Altrove, siamo attorno a 4 volte +
veloce.
Il 100,000 numero di Fibonacci, sull'iBook:
100000th Fibonacci number of various types:
    7.810 2.59741e20898 <type 'long'>
    0.520 2.59741e20898 <type 'mpz'>
    0.220 2.59741e20898 <type 'mpf'>
    0.000 2.59741e20898 gmpy.fib
sull'MBP:
100000th Fibonacci number of various types:
    1.940 2.59741e20898 <type 'long'>
    2.260 2.59741e20898 <type 'mpz'>
    0.080 2.59741e20898 <type 'mpf'>
    0.020 2.59741e20898 gmpy.fib
Si ripete il pattern: nell'MPZ, l'MBP soffre -- altrove, vince di 3-4
volte (gmpy.fib e` _troppo_ veloce per misurarla bene!-).
Ancora fibonacci e fattoriali, sull'iBook:
Factorial of 10000 took 0.01 (35660 digits)
Fibonacci of 10000 took 0.0 (2090 digits)
Factorial of 100000 took 0.3 (456574 digits)
Fibonacci of 100000 took 0.0 (20899 digits)
Factorial of 1000000 took 6.95 (5565709 digits)
Fibonacci of 1000000 took 0.07 (208988 digits)
sull'MBP:
Factorial of 10000 took 0.06 (35660 digits)
Fibonacci of 10000 took 0.0 (2090 digits)
Factorial of 100000 took 1.74 (456574 digits)
Fibonacci of 100000 took 0.02 (20899 digits)
Factorial of 1000000 took 34.69 (5565709 digits)
Fibonacci of 1000000 took 0.36 (208988 digits)
Qui, l'MBP soffre sempre per la mancanza dell'assembler ottimizzato.
Mi pare che questo sia un buon "quadro" del Macbook Pro oggi: dove e
quando puo` scatenarsi, straccia i preesistenti G4; ma la giovinezza si
paga -- un tot di SW non lo supporta ancora appieno, e in questi casi le
prestazioni possono anche essere deludenti!
"A naso", senza numeri, con tutti i ./configure e make qui e make la che
ho fatto oggi, direi che il fattore 3-4 si applica tutto per lo sviluppo
software (che e` la cosa che piu` mi interessa).  Naturalmente non e`
solo il processore (core duo 2.0 GHz, vs G4 da 1.33 GHz), ma anche il
disco (7200rpm, vs 4200) -- la RAM invece credo conti cippa (2 GB
sull'MBP, ma 1.5 GB sul'iBook, penso totalmente equivalenti a questi
fini).  Ah, nota a margine: per comodo che faccia lo schermo 15" wide
(ed e` tanto), tenendolo sulle ginocchia / in grembo resta assai +
ergonomico l'umile iBook G4 12" -- oggi ho alternato tantissimo, quindi
ho avuto modo di confermarmi questa impressione, che prima era vaga.  E`
questione di geometria del piazzamento trackpad/tastiera, ecc...
Prossima puntata (se domani ho tempo di lavorarci...): le prestazioni
(sempre di gmpy) su Win2000 che gira su Parallels sull'MBP.
Quest'ultima e` stata una vera passeggiata (no paragoni rispetto a Q),
l'ho istallata ecc oggi in background mentre facevo tutto questo
development (NON mentre giravo le misure di prestazioni, eh!-).  Magari
ci faccio su un altro post....;-)
Alex

 a capire quanto mi costa rinunciare per ora a 'sto assembler.
Beh, anche qua ci sono valori discordanti. Ho implementato con gmp alla
base (ed anche un po' di mpfr) una minilibreria per il test di primalità
AKS. 
In pratica succede che facendo girare lo stesso test su numeri
"relativamente piccoli" ma tante volte, l'Intel vince (in questo caso
c'è moltissimo ciclare... i primi sono circa log n dove n è il numero
massimo analizzato: un numero su due esce subito perchè pari, molti
altri numeri escono pure in quanto divisibili per piccoli primi...
insomma relativamente pochi numeri girano tutto l'algoritmo fino in
fondo).
Quando invece gli do in pasto un singolo primo di una certa grandezza,
l'Intel è circa 2-2.5 volte più lento del PPC. E stando a fare il
profiling con Shark, l'operazione più eseguita è appunto la
moltiplicazione.
-- 
blog:  
http://www.akropolix.net/rik0/blogs
 | Uccidete i filosofi,
site:  
http://www.akropolix.net/rik0/
      | tenetevi riso e
forum: 
http://www.akropolix.net/forum/
     | bacchette per voi.

 moltiplicazione.
Cioe`, dici che anche tu stai usando una GMP senza as (ma PIC o no?), e
osservi grosso modo problemi prestazionali analoghi a quelli che vedo io
col mio build? OK, bene, allora. Resta da capire come esprimere nell'as
di Apple il tipo di sequenze di codice PIC, esemplificate sopra, in cui
gli as di GNU e FreeBSD apparentemente "ingoiano" contentoni quella
notazione <simbolo>@GOT(<registro>)!-)
Alex

 notazione <simbolo>@GOT(<registro>)!-)
L'idea fulminante che mi è venuta, ma che non posso mettere in pratica
(anche perchè fra due giorni parto per l'irlanda)...
ld è fatto da apple e solo da apple. se io mi compilo un gcc standard
(lo sto facendo ora) cosa succede? Immagino che dovrai comunque
rinunciare ad un bundle, ma almeno la libreria dinamica dovrebbe
costruirla. O no?
Beh, adesso provo. Vediamo che dice. 


 Beh, adesso provo. Vediamo che dice. 
Facci sapere!
Alex

 Facci sapere!
Si. Anche se più probabile che finisca domani... fra compilazione del
compilatore, check e compagnia non sa di cosa breve.


 per il MBP (visto che del PIC non posso fare a meno).
Mac OS X Assembler Guide:
http://developer.apple.com/documentation/DeveloperTools/Reference/Assembler/index.html
-- 
http://mio.discoremoto.virgilio.it/ppg/

 basta
Vuoi mettere con la Fanta?
-- 
Tentare è il primo passo verso il fallimento


Questo documento ce l'ho anche sul mio disco, naturalmente, come
chiunque altro abbia istallato XCode --
<file:///Developer/ADC%20Reference%20Library/documentation/DeveloperTool
s/Reference/Assembler/index.html> per la precisione.  Purtroppo, come e`
ovvio, esso non contiene nessuna informazione sul significato di '@GOT'
in un assembler tutto diverso (quello GNU, e, pare, quello FreeBSD
"recente", giudicando da commenti vari sparsi nei file di GMP).
Alex

 Vuoi mettere con la Fanta?
No. Preferisco la birra :)
Perchè andare avanti 5 giorni a fanta?


 Perchè andare avanti 5 giorni a fanta?
Perche` e` *indiscutibilmente* meglio della birra.
Ora so cosa stai (state) pensando, sappiate che sono cintura nera di
cunfu` :P


 cunfu` :P
Guarda che io una decina di anni di arti marziali li ho fatti pure. :)
Poi ho smesso per dedicarmi a tempo pieno alla chitarra, ma vabbč.


 Guarda che io una decina di anni di arti marziali li ho fatti pure. :)
Ormai credo che l'abbiano fatto *tutti*
Non conosco nessuno che non abbia fatto qualcosa dal Judo in su
(masculi, ovvio)
