Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Ottimizzazione Emulator
Forum - C/C++ - Ottimizzazione Emulator

Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1459
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 22:49
Sabato, 27/06/2015
Nel caso x = 2 è più veloce l'esecuzione di if (x%2 == 0) z = y <<  x/2 o z = x * y?

PM Quote
Avatar
dmr (Normal User)
Pro


Messaggi: 141
Iscritto: 04/01/2012

Segnala al moderatore
Postato alle 8:44
Domenica, 28/06/2015
Secondo me, in questo caso e' piu' veloce  z = y <<  x/2,  poiche' dato che effettui una divisione per una potenza di 2, il compilatore generera' una istruzione di shift a destra(molto veloce). Comunque ho ipotizzato che y non sia una potenza di 2.


Principali interessi: Compilatori e generatori di parser.
PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1459
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 12:05
Domenica, 28/06/2015
Testo quotato

Postato originariamente da dmr:

Secondo me, in questo caso e' piu' veloce  z = y <<  x/2,  poiche' dato che effettui una divisione per una potenza di 2, il compilatore generera' una istruzione di shift a destra(molto veloce). Comunque ho ipotizzato che y non sia una potenza di 2.



So anche io che uno shift è più veloce di una moltiplicazione, ma la mia domanda era il confronto tra if + shift e moltiplicazione

PM Quote
Avatar
lumo (Member)
Expert


Messaggi: 416
Iscritto: 18/04/2010

Segnala al moderatore
Postato alle 13:06
Domenica, 28/06/2015
Gli if in genere giocano male con la pipeline. In ogni caso, penso che per questa cosa la differenza di prestazioni non sia rilevabile, e quindi convenga usare x*y che è molto più chiaro.

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1459
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 14:51
Domenica, 28/06/2015
Ok, grazie lumo. non avevo pensato al possibile svuotamento della pipeline della cpu per eseguire quell'if.

PM Quote