|
|
|
|
Strumenti |
13-02-2008, 16:14 | #21 |
Bannato
Iscritto dal: Dec 2007
Messaggi: 42
|
Ho chiesto, e pare che così è meglio:
Codice:
int abs(int x) { return ((x^(x>>31))-(x>>31)); } Ultima modifica di MFSPO=DBGPOF : 13-02-2008 alle 16:20. |
13-02-2008, 16:27 | #22 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 1536
|
|
13-02-2008, 16:32 | #23 |
Bannato
Iscritto dal: Dec 2007
Messaggi: 42
|
|
13-02-2008, 17:11 | #24 |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3691
|
Guardate che io avevo barato.
L'implementazione piu' veloce e' esattamente quella che abbiamo imparato, ovvero usare la funzione gia' disponibile nella stdlib.h (e nella math.h) Ovvero int abs(int x) gia' dichiarata e pronta per tutti. Il mio codice infatti non era altro che il Disassembly del codice generato da tale funzione. Fra l'altro il codice generato dalla soluzione di MFSPO=DBGPOF e' easttamente equivalente, a parte il CDQ generato dalla ABS di libreria e il (SAR registro,31) generato dalla soluzione. entrambi vogliono riempire un registro con quello che e' il bit piu' significativo, ovvero il segno, della nostra variabile in questione. Usare la ABS di libreria secondo me e' quindi piu' veloce, piu' leggibile e piu' cross-platform di qualunque altro metodo.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
13-02-2008, 17:20 | #25 | |
Bannato
Iscritto dal: Dec 2007
Messaggi: 42
|
Quote:
|
|
13-02-2008, 18:43 | #26 |
Senior Member
Iscritto dal: Nov 2005
Città: Arezzo
Messaggi: 1801
|
Ragazzi vedo che vi siete impegnati per darmi la soluzione...
Ovviamente ho fatto un attento profiling ed il collo di bottiglia è proprio il calcolo del valore assoluto che è da calcolarsi il più velocemente possibile... Ho provato anche ad utilizzare la funzione abs di libreria come dite voi ma la LUT continua ad essere la soluzione più veloce...
__________________
iMac 27" - Apple iPhone 4 16GB Nero Ho concluso trattative con: cletopolonia - lele11 - Palli - darkn3o - Res3rator - andyxx - ABCcletta - DyingSweetly - streke - spiderman4 - mickyjenny - bottoni - tancrozio - perno |
13-02-2008, 19:09 | #27 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53967
|
Mi spieghi come hai fatto la lookup table per l'abs ?
|
13-02-2008, 19:36 | #28 |
Senior Member
Iscritto dal: Nov 2005
Città: Arezzo
Messaggi: 1801
|
siccome il mio numero da "assolutizzare" va da -23000 a +23000 per ognuno di quesi numeri mi sono fatto una tabella lunga 46001 elementi mettendoci il risultato. Questa tabella l'ho generata con Matlab su un file di testo che poi ho dato in pasto al C.
__________________
iMac 27" - Apple iPhone 4 16GB Nero Ho concluso trattative con: cletopolonia - lele11 - Palli - darkn3o - Res3rator - andyxx - ABCcletta - DyingSweetly - streke - spiderman4 - mickyjenny - bottoni - tancrozio - perno |
13-02-2008, 19:45 | #29 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53967
|
Sicuramente è molto veloce, ma fare il quadrato e poi la divisione era molto più lento ?
|
13-02-2008, 19:59 | #30 | |
Senior Member
Iscritto dal: Nov 2005
Città: Arezzo
Messaggi: 1801
|
Quote:
Funzione abs di libreria => 16ms Mia funzione citata nel primo post => 14ms Quadrato e poi divisione => 13ms LUT => 9ms Se consideri che tale algoritmo lo voglio fare in real-time anche se formalmente più brutto preferisco la LUT.
__________________
iMac 27" - Apple iPhone 4 16GB Nero Ho concluso trattative con: cletopolonia - lele11 - Palli - darkn3o - Res3rator - andyxx - ABCcletta - DyingSweetly - streke - spiderman4 - mickyjenny - bottoni - tancrozio - perno |
|
13-02-2008, 20:11 | #31 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53967
|
In real time intendi in so real time ? In tal caso ti capisco
|
13-02-2008, 20:32 | #32 | |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12075
|
Quote:
...spero che non sia per un'esecuzione sola...
__________________
|
|
13-02-2008, 20:34 | #33 | |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3691
|
Quote:
46KB*4 di memoria non sono nulla 4GB*4 potrebbero esserlo. Nelle valutazioni quantitative devi anche considerare che quella lookup table sono sempre 200KB di cache che usi solo per il calcolo del valore assoluto, e che potrebbero essere usati per altro.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. Ultima modifica di gugoXX : 13-02-2008 alle 20:38. |
|
13-02-2008, 20:42 | #34 | |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12075
|
Quote:
Codice:
startTime = Time.new for i in 0..1000000 a = -2.abs end puts Time.new - startTime e ruby è notoriamente molto lento come implementazione (ho usato la versione 1.8.6 non la ben + veloce 1.9.0 )
__________________
|
|
13-02-2008, 20:42 | #35 |
Senior Member
Iscritto dal: Nov 2005
Città: Arezzo
Messaggi: 1801
|
Esatto
__________________
iMac 27" - Apple iPhone 4 16GB Nero Ho concluso trattative con: cletopolonia - lele11 - Palli - darkn3o - Res3rator - andyxx - ABCcletta - DyingSweetly - streke - spiderman4 - mickyjenny - bottoni - tancrozio - perno |
13-02-2008, 20:44 | #36 |
Senior Member
Iscritto dal: Nov 2005
Città: Arezzo
Messaggi: 1801
|
9ms impiega tutto l'algoritmo al cui interno ci sono diverse migliaia di valori assoluti
__________________
iMac 27" - Apple iPhone 4 16GB Nero Ho concluso trattative con: cletopolonia - lele11 - Palli - darkn3o - Res3rator - andyxx - ABCcletta - DyingSweetly - streke - spiderman4 - mickyjenny - bottoni - tancrozio - perno |
13-02-2008, 20:46 | #37 | |
Senior Member
Iscritto dal: Nov 2005
Città: Arezzo
Messaggi: 1801
|
Quote:
__________________
iMac 27" - Apple iPhone 4 16GB Nero Ho concluso trattative con: cletopolonia - lele11 - Palli - darkn3o - Res3rator - andyxx - ABCcletta - DyingSweetly - streke - spiderman4 - mickyjenny - bottoni - tancrozio - perno |
|
13-02-2008, 20:47 | #38 | |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3691
|
Quote:
Avrebbe messo direttamente +2 nella variabile a. Anzi, se tutto va bene, dato che la variabile a non e' usata, avrebbe proprio saltato tutta la riga...
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
13-02-2008, 20:48 | #39 | |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3691
|
Quote:
Quello che dico e' che nel complesso mangiare 200KB di cache potrebbe rallentare il sistema. Valuta bene. Poi a me vedere un array che nella cella 1 c'e' scritto 1 nella cella 2 c'e' scritto 2 nella cella X c'e' scritto X Mi fa irritare un po'... ma passa subito non preoccuparti.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
13-02-2008, 20:51 | #40 | |
Senior Member
Iscritto dal: Nov 2005
Città: Arezzo
Messaggi: 1801
|
Quote:
__________________
iMac 27" - Apple iPhone 4 16GB Nero Ho concluso trattative con: cletopolonia - lele11 - Palli - darkn3o - Res3rator - andyxx - ABCcletta - DyingSweetly - streke - spiderman4 - mickyjenny - bottoni - tancrozio - perno |
|
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:25.