Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Zenfone 11 Ultra: il flagship ASUS ritorna a essere un 'padellone'
Recensione Zenfone 11 Ultra: il flagship ASUS ritorna a essere un 'padellone'
Zenfone 11 Ultra ha tantissime qualità interessanti, fra cui potenza da vendere, un display di primissimo livello, un comparto audio potente e prestazioni di connettività fra le migliori della categoria. Manca però dell'esclusività del predecessore, che in un settore composto da "padelloni" si distingueva per le sue dimensioni compatte. Abbiamo provato il nuovo flagship ASUS, e in questa recensione vi raccontiamo com'è andata.
Appian: non solo low code. La missione è l’ottimizzazione dei processi con l'IA
Appian: non solo low code. La missione è l’ottimizzazione dei processi con l'IA
Abbiamo partecipato ad Appian World 2024, evento dedicato a partner e clienti che si è svolto recentemente nei pressi di Washington DC, vicino alla sede storica dell’azienda. Nel festeggiare il 25mo anniversario, Appian ha annunciato diverse novità in ambito intelligenza artificiale
Lenovo ThinkVision 3D 27, la steroscopia senza occhialini
Lenovo ThinkVision 3D 27, la steroscopia senza occhialini
Primo contatto con il monitor Lenovo ThinkVision 3D 27 che grazie a particolari accorgimenti tecnici riesce a ricreare l'illusione della spazialità tridimensionale senza che sia necessario utilizzare occhialini
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


Recensione Zenfone 11 Ultra: il flagship ASUS ritorna a essere un 'padellone' Recensione Zenfone 11 Ultra: il flagship ASUS ri...
Appian: non solo low code. La missione è l’ottimizzazione dei processi con l'IA Appian: non solo low code. La missione è ...
Lenovo ThinkVision 3D 27, la steroscopia senza occhialini Lenovo ThinkVision 3D 27, la steroscopia senza o...
La Formula E può correre su un tracciato vero? Reportage da Misano con Jaguar TCS Racing La Formula E può correre su un tracciato ...
Lenovo LEGION e LOQ: due notebook diversi, stessa anima gaming Lenovo LEGION e LOQ: due notebook diversi, stess...
Appuntamento a mezzanotte: lunedì...
Occhio a questi due droni in offerta su ...
MS-DOS 4.0, il rilascio open source non ...
Il ministro Urso è sicuro: l'Ital...
AMD, emergono presunte specifiche della ...
CPU AMD EPYC 4004 compatibili con socket...
Intel incolpa i produttori di schede mad...
MSI: poche schede video Radeon? Al momen...
X-Apply: se non riesci a mettere la past...
Termostato intelligente Tado e teste ter...
Progetti sempre più avanzati, com...
AMD Ryzen Strix Halo: le prossime APU mo...
Google Pixel 8 256GB 649€, iPad 399€ e a...
Sono i migliori PC portatili tuttofare s...
Super prezzi Motorola: G84 5G 12GB/256GB...
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: 10:32.


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