Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Tre giorni in Finlandia con OnePlus Watch 2 Nordic Blue. La nostra prova a temperature estreme
Tre giorni in Finlandia con OnePlus Watch 2 Nordic Blue. La nostra prova a temperature estreme
Siamo volati a Helsinki, in Finlandia, per testare a fondo il nuovo OnePlus Watch 2 Nordic Blue Edition. L'orologio ci ha convinti durante gli i test invernali ad Helsinki, grazie al design raffinato, alle prestazioni impeccabili, alla resistenza agli ambienti estremi e all'ottima autonomia garantita dalla modalità intelligente.
Lenovo Factory Tour: siamo entrati nella fabbrica ungherese che produce PC, storage e server
Lenovo Factory Tour: siamo entrati nella fabbrica ungherese che produce PC, storage e server
Edge9 ha visitato lo stabilimento produttivo di Lenovo nei pressi di Budapest in Ungheria, che serve tutta la zona EMEA per i prodotti “business”: PC, storage e server. Un impianto all’avanguardia, con altissimi tassi di efficienza ma anche una grande attenzione alle condizioni lavorative dei dipendenti e alla sostenibilità ambientale
Acer Nitro V 15, alla prova il notebook gaming essenziale con RTX 4050 Laptop
Acer Nitro V 15, alla prova il notebook gaming essenziale con RTX 4050 Laptop
Acer Nitro V 15 è un notebook gaming che punta sul rapporto prezzo-prestazioni per garantire a chi ha un budget intorno o persino inferiore ai 1000€ di giocare abbastanza bene in Full HD grazie alla RTX 4050 Laptop di NVIDIA e la compatibilità con il DLSS 3.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 13-02-2008, 16:14   #21
MFSPO=DBGPOF
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.
MFSPO=DBGPOF è offline   Rispondi citando il messaggio o parte di esso
Old 13-02-2008, 16:27   #22
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
Iscritto dal: Nov 2005
Messaggi: 1536
Quote:
Originariamente inviato da MFSPO=DBGPOF Guarda i messaggi
Ho chiesto, e pare che così è meglio:

Codice:
int abs(int x)

{
	return ((x^(x>>31))-(x>>31));
}
cross platform soprattutto
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 13-02-2008, 16:32   #23
MFSPO=DBGPOF
Bannato
 
Iscritto dal: Dec 2007
Messaggi: 42
Quote:
Originariamente inviato da Ufo13 Guarda i messaggi
cross platform soprattutto
vabbe, metto a posto

Codice:
int abs(int x)

{
	return ((x^(x>>((sizeof(int)<<3)-1)))-(x>>((sizeof(int)<<3)-1)));
}
Contento?
MFSPO=DBGPOF è offline   Rispondi citando il messaggio o parte di esso
Old 13-02-2008, 17:11   #24
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
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.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 13-02-2008, 17:20   #25
MFSPO=DBGPOF
Bannato
 
Iscritto dal: Dec 2007
Messaggi: 42
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
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.
Quoto gugoXX. Ho disassemblato la abs(x) della stdlib.h, e il codice x86 generato è pari pari quello proposto da gugoXX. La abs() di stdlib.h è la più veloce possibile.
MFSPO=DBGPOF è offline   Rispondi citando il messaggio o parte di esso
Old 13-02-2008, 18:43   #26
Mr. X
Senior Member
 
L'Avatar di Mr. X
 
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
Mr. X è offline   Rispondi citando il messaggio o parte di esso
Old 13-02-2008, 19:09   #27
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53963
Mi spieghi come hai fatto la lookup table per l'abs ?
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 13-02-2008, 19:36   #28
Mr. X
Senior Member
 
L'Avatar di Mr. X
 
Iscritto dal: Nov 2005
Città: Arezzo
Messaggi: 1801
Quote:
Originariamente inviato da cionci Guarda i messaggi
Mi spieghi come hai fatto la lookup table per l'abs ?
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
Mr. X è offline   Rispondi citando il messaggio o parte di esso
Old 13-02-2008, 19:45   #29
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53963
Sicuramente è molto veloce, ma fare il quadrato e poi la divisione era molto più lento ?
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 13-02-2008, 19:59   #30
Mr. X
Senior Member
 
L'Avatar di Mr. X
 
Iscritto dal: Nov 2005
Città: Arezzo
Messaggi: 1801
Quote:
Originariamente inviato da cionci Guarda i messaggi
Sicuramente è molto veloce, ma fare il quadrato e poi la divisione era molto più lento ?
Guarda ti faccio un piccolo schema:

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
Mr. X è offline   Rispondi citando il messaggio o parte di esso
Old 13-02-2008, 20:11   #31
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53963
In real time intendi in so real time ? In tal caso ti capisco
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 13-02-2008, 20:32   #32
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12068
Quote:
Originariamente inviato da Mr. X Guarda i messaggi
Guarda ti faccio un piccolo schema:

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.
ma non è tantissimo 9ms?
...spero che non sia per un'esecuzione sola...
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 13-02-2008, 20:34   #33
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3691
Quote:
Originariamente inviato da Mr. X Guarda i messaggi
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.
La prossima volta spiega bene il problema allora.
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.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 13-02-2008, 20:42   #34
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12068
Quote:
Originariamente inviato da ^TiGeRShArK^ Guarda i messaggi
ma non è tantissimo 9ms?
...spero che non sia per un'esecuzione sola...
ho fatto una semplicissima prova in ruby sul mio A64 3000+@4000+ (2520mhz e RAM 186 mhz se non sbaglio):
Codice:
startTime = Time.new
for i in 0..1000000
  a = -2.abs
end
puts Time.new - startTime
risultato... 350 msec per un milione di iterazioni....
e ruby è notoriamente molto lento come implementazione (ho usato la versione 1.8.6 non la ben + veloce 1.9.0 )
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 13-02-2008, 20:42   #35
Mr. X
Senior Member
 
L'Avatar di Mr. X
 
Iscritto dal: Nov 2005
Città: Arezzo
Messaggi: 1801
Quote:
Originariamente inviato da cionci Guarda i messaggi
In real time intendi in so real time ? In tal caso ti capisco
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
Mr. X è offline   Rispondi citando il messaggio o parte di esso
Old 13-02-2008, 20:44   #36
Mr. X
Senior Member
 
L'Avatar di Mr. X
 
Iscritto dal: Nov 2005
Città: Arezzo
Messaggi: 1801
Quote:
Originariamente inviato da ^TiGeRShArK^ Guarda i messaggi
ma non è tantissimo 9ms?
...spero che non sia per un'esecuzione sola...
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
Mr. X è offline   Rispondi citando il messaggio o parte di esso
Old 13-02-2008, 20:46   #37
Mr. X
Senior Member
 
L'Avatar di Mr. X
 
Iscritto dal: Nov 2005
Città: Arezzo
Messaggi: 1801
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
La prossima volta spiega bene il problema allora.
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.
Ti ringrazio per la precisazione. Anche se prendesse 200KB di cache preferisco la velocità.
__________________
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
Mr. X è offline   Rispondi citando il messaggio o parte di esso
Old 13-02-2008, 20:47   #38
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3691
Quote:
Originariamente inviato da ^TiGeRShArK^ Guarda i messaggi
ho fatto una semplicissima prova in ruby sul mio A64 3000+@4000+ (2520mhz e RAM 186 mhz se non sbaglio):
Codice:
startTime = Time.new
for i in 0..1000000
  a = -2.abs
end
puts Time.new - startTime
risultato... 350 msec per un milione di iterazioni....
e ruby è notoriamente molto lento come implementazione (ho usato la versione 1.8.6 non la ben + veloce 1.9.0 )
Occhio, non conosco Ruby, ma il C++ in quel caso avrebbe saltato la valutazione dell'ABS.
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.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 13-02-2008, 20:48   #39
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3691
Quote:
Originariamente inviato da Mr. X Guarda i messaggi
Ti ringrazio per la precisazione. Anche se prendesse 200KB di cache preferisco la velocità.
Chiaro.
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.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 13-02-2008, 20:51   #40
Mr. X
Senior Member
 
L'Avatar di Mr. X
 
Iscritto dal: Nov 2005
Città: Arezzo
Messaggi: 1801
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
Chiaro.
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.
__________________
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
Mr. X è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Tre giorni in Finlandia con OnePlus Watch 2 Nordic Blue. La nostra prova a temperature estreme Tre giorni in Finlandia con OnePlus Watch 2 Nord...
Lenovo Factory Tour: siamo entrati nella fabbrica ungherese che produce PC, storage e server Lenovo Factory Tour: siamo entrati nella fabbric...
Acer Nitro V 15, alla prova il notebook gaming essenziale con RTX 4050 Laptop Acer Nitro V 15, alla prova il notebook gaming e...
Stellar Blade: l'action RPG di Shift Up sfoggia uno stile (quasi) unico su PS5 - Recensione Stellar Blade: l'action RPG di Shift Up sfoggia ...
Recensione Zenfone 11 Ultra: il flagship ASUS ritorna a essere un 'padellone' Recensione Zenfone 11 Ultra: il flagship ASUS ri...
Il Gusto delle cose: un'ode alla passion...
Emergono dettagli sull'attacco informati...
La Cina ha lanciato la missione Chang'e-...
In Cina è stata varata una nave portacon...
Laowa espande gli innesti: arrivano le o...
Amazfit Bip 5 Unity arriva in Italia! Pr...
La Commissione UE accusa: "SAIC, Ge...
4 NAS con prezzi in caduta libera su Ama...
Micron pronta con i moduli RDIMM DDR5 da...
Helldivers 2 su Steam: bisognerà ...
La XPeng G6 ora è disponibile anc...
Google, ecco quanto paga per rimanere il...
AMD si è ormai lasciata la vulner...
2 modelli di SAMSUNG Galaxy S24 Ultra 12...
Amazon Gaming Week: le offerte sulle sch...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 16:49.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Served by www3v