|
|
|
|
Strumenti |
30-12-2007, 15:33 | #101 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53963
|
Tanto per fare un esempio nelle simulazioni matematiche e fisiche e nelle applicazioni per microcontrollori. Nelle simulazioni in particolare si ottimizza il più possibile perché più tempo si risparmia e più soldi si risparmia (per il supercomputer intendo). Nei microcontrollori più tempo si risparmia e più autonomia si acquista (vedi reti di sensori).
In questi ambiti applicativi l'ottimizzazione non ha mai fine. |
30-12-2007, 15:33 | #102 |
Senior Member
Iscritto dal: Nov 2002
Messaggi: 4357
|
|
30-12-2007, 15:38 | #103 | |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26107
|
Quote:
Beh, la mia non è filosofia ma, considerato il poco a tempo disposizione e le tante cose che ho da fare, soltanto pragmatismo.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys Ultima modifica di cdimauro : 30-12-2007 alle 15:40. |
|
30-12-2007, 15:39 | #104 | |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26107
|
Quote:
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
30-12-2007, 18:51 | #105 | ||
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
Usi una macchina virtuale estremamente simile a quella reale, ed ha ben poco overhead, che puo' essere benissimo superato da altre comuni inefficienti in un programma reale. Quote:
- se ci metti delle new, dovrai solo registrare quella memoria, operazione semplicissima; - quando GC andra' a deallocare, lo fara' meglio di te. (economie di scala). - il ciclo di vita degli oggetti obblighera' C++ a fare una marea di copie inutili, che saranno sicuramente evitate in programmazione Java; L'ho anche visto girare su 1k di RAM
__________________
In God we trust; all others bring data |
||
30-12-2007, 18:55 | #106 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53963
|
Quote:
|
|
31-12-2007, 06:34 | #107 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26107
|
Col vantaggio, però, di poter adattare meglio il codice generato a seconda del contesto dell'esecuzione.
Cosa impossibile da realizzare per un programma C/C++, che è compilato staticamente una sola volta e col compilatore che ha fatto a priori delle assunzioni. Infatti se esce una nuova architettura le applicazioni Java (.NET, ecc.) non devono essere toccate di una virgola: è sufficiente aggiornare la VM per utilizzarla. La "morte" del codice binario, invece, è la compilazione statica che lega il codice mani e piedi all'architettura target...
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
31-12-2007, 08:14 | #108 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53963
|
Va bene, ma non c'entra niente con le prestazioni.
|
31-12-2007, 08:25 | #109 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26107
|
Invece sì e il motivo è semplice: il compilatore JIT può intervenire sul codice "emesso" se si rende conto che è possibile migliorarlo in base ai dati di profilazione raccolti a runtime, generando del nuovo codice che ne tenga conto.
Il codice, in sostanza, viene "adattato" in base alle condizioni rilevate in tempo reale. Altra cosa, un compilatore "classico" che ha emesso il "miglior codice" (secondo lui) staticamente per una certa architettura (ma possiamo considerare anche n architetture, con code path diversi selezionati a runtime; come ad esempio avviene coi compilatori Intel da un po' di tempo a questa parte, ma soltanto per le sue architetture) ha fatto il suo lavoro e amen: il codice è quello e non si tocca. Se arriva una nuova architettura che ha bisogno di ottimizzazioni specifiche, si deve ricompilare nuovamente (es: passando da P3 a P4 le ottimizzazioni sono cambiate anche radicalmente, e il vecchio codice pensato per i primi non gira bene su questi ultimi). Coi linguaggi che fanno uso di VM, invece, entrambi i problemi sono risolti brillantemente aggiornando soltanto la VM (e il primo problema NON è risolvibile da un compilatore "classico").
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
31-12-2007, 11:06 | #110 | |
Senior Member
Iscritto dal: Nov 2002
Messaggi: 4357
|
Quote:
Ultima modifica di Unrue : 31-12-2007 alle 11:32. |
|
31-12-2007, 11:42 | #111 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53963
|
In teoria il profiling a runtime potrebbe tranquillamente farlo, gli basterebbe generare codice diverso al successivo ingresso in quella parte di codice. Ma quanto costa fare un profiling a runtime ? La Java VM lo fa ? Io credo proprio di no.
|
31-12-2007, 11:48 | #112 |
Senior Member
Iscritto dal: Nov 2002
Messaggi: 4357
|
Appunto Bisogna vedere se il gioco vale la candela. Ad esempio, io potrei impostare un ciclo for in modo che abbia meno cache miss possibili. MA questo proprio perchè so che tipo di cache ho sotto. Con Java è molto più incasinato fare questo, anzi, non lo puoi proprio fare se il programma è pensato per girare su diverse piattaforme. Sicuramente si troverà una cache differente e quindi tutto il lavoro svolto sul ciclo for andrebbe buttato via.
Secondo me, se prendiamo un programma Java , quanto buono che sia, mai e poi mai avrà le stesse prestazioni di un codice scritto in C, C++ che sfrutta appieno l'hardware. Non c'è compilatore JIT che tenga per questo. Il rovescio della medaglia è ovviamente che se cambio architettura devo ricompilare ma, come ho detto prima,.. è davvero questa grande fatica ricompilare ?? Ultima modifica di Unrue : 31-12-2007 alle 11:53. |
31-12-2007, 11:50 | #113 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53963
|
Però lo potrebbe fare la prima volta che genera il codice JIT...e già sarebbe un ottimo compromesso...potrebbe generare un codice diverso per ogni CPU...certo un profiling a runtime sarebbe veramente troppo costoso imho.
|
31-12-2007, 11:55 | #114 |
Senior Member
Iscritto dal: Nov 2002
Messaggi: 4357
|
Ma lo fa realmente? E' un'opzione attivabile? Oppure nemmeno si sono posti il problema ? Perchè se non è possibile farlo, C++, in fatto di prestazioni vince alla stragrande ( prima di scatenare polemiche ripeto : mi riferisco a programmi adattati all'hardware che c'è sotto, non in generale)
|
31-12-2007, 11:59 | #115 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26107
|
Ecco qui http://arstechnica.com/reviews/1q00/.../dynamo-1.html un articolo che tratta la questione JIT, profiling & generazione dinamica di codice.
Per il resto e rispondendo a Unrue, non di tutti i programmi è disponibile il sorgente e quindi è possibile ricompilare. Va da sé che il progetto Dinamo di HP dimostra che è possibile prendere un eseguibile già compilato e trattarlo alla stregua del bytecode di Java et similia, quindi tirando fuori nuovo codice in base alle condizioni rilevate a runtime. Non è il concetto di codice eseguibile che si scontra con quello di bytecode, ma qui il problema è più generale e riguarda la presenza di una VM (ormai spesso dotata di compilatore JIT) che si pone da "intermediario" fra il "codice oggetto" e la macchina che dovrà fisicamente eseguirlo. Questo concetto lo si può tranquillamente allargare prendendo codice oggetto compilato per una certa architettura e ricompilandolo al volo per farlo girare su un'altra anche completamente diversa. Ultima cosa: non so se la JVM applica quanto ho esposto. Questo ce lo potrebbe dire PGI-Bis, che ha smanettato sui suoi sorgenti.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
31-12-2007, 12:07 | #116 | |
Senior Member
Iscritto dal: Nov 2002
Messaggi: 4357
|
Quote:
Va bene, ma quanto costa farlo? C++ lo fa in fase di compilazione, Java a runtime. Ultima modifica di Unrue : 31-12-2007 alle 12:09. |
|
31-12-2007, 12:31 | #117 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26107
|
Leggiti il link che ho passato prima.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
31-12-2007, 12:39 | #118 | ||||
Senior Member
Iscritto dal: Apr 2003
Città: Genova
Messaggi: 4740
|
Quote:
Codice:
if ( variabile == valore1) <istruzioni> else if (variabile == valore2) <istruzioni> <...> Quote:
Quote:
in sostanza credo che non si tratterebbe di una mera ricompilazione, ma di una riscrittura delle parti sensibili del tuo codice ... Quote:
a cui aggiungerei questo http://www.usenix.org/publications/l...f/chernoff.pdf
__________________
Jappilas is a character created by a friend for his own comic - I feel honored he allowed me to bear his name Saber's true name belongs to myth - a Heroic Soul out of legends, fighting in our time to fullfill her only wish Let her image remind of her story, and of the emotions that flew from my heart when i assisted to her Fate
Ultima modifica di jappilas : 31-12-2007 alle 12:43. |
||||
31-12-2007, 12:59 | #119 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26107
|
Con la complessità dei processori attuali non è il caso di usare nemmeno l'assembly: molto meglio affidarsi a ottimi compilatori di linguaggi ad alto livello, che possono tenere conto delle innumerevoli variabili in gioco.
P.S. Grazie per il link.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
31-12-2007, 13:21 | #120 | ||
Senior Member
Iscritto dal: Nov 2002
Messaggi: 4357
|
Quote:
E visto che vi piace snocciolare link, ve ne snocciolo uno anch'io : http://en.wikipedia.org/wiki/Branch_prediction Quote:
Ultima modifica di Unrue : 31-12-2007 alle 13:51. |
||
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:50.