|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#61 | |
|
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Quote:
Inoltre, visto che di solito i punti veramente critici per le performance sono pochi, in C++ hai maggiori strumenti per ottimizzarli. Il codice sopra potresti ad esempio cambiarlo un po' per renderlo a costo zero in termini di heap. Per tornare al discorso del GC, e' vero che uno puo' adattarne l'uso per diminuire le latenze introdotte (cosa che tra l'altro non e' neanche sempre necessaria per un gioco, vedi la quintalata di giochi flash che trovi su internet...), ma questo va al di la' delle competenze standard del tipico programmatore Java ( C# etc.) ed e' un tipo di attivita' che si avvicina alla gestione manuale della memoria in un linguaggio come C++. Tra star li' a calcolare quanto devo ridimensionare una generazione del GC perche' entri in azione quando voglio e una semplice arena di memoria gestita dalla creazione/cancellazione di un singolo oggetto non vedo grandi differenze di complessita'...
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|
|
|
|
|
|
#62 |
|
Senior Member
Iscritto dal: Jan 2010
Città: (MB)
Messaggi: 11971
|
interessante...mi iscrivo al thread!
__________________
CPU: Ryzen 3700x DISSY: CM HYPER EVO 212 RAM: 16gb DDR4 3000Mhz MOBO: MSI b350 tomahawk VGA: MSI Ventus 2X 4060TI 16GB ALI: Cooler Master V550 SSD: Samsung 970 Evo Plus Trattive+:(a) topolino2808(x2), galfum, giap959, sm_morgan, Biduzzo, huangwei, maxmax80, bubbi, dinamite2, PaxNoctis;(v) rubrie, CubeDs, Slater91, Juvanni, FireFox152, gluvocio, giulio81, emahwupgrade, Velvet, semmy83, giocher03 |
|
|
|
|
|
#63 |
|
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Si potrebbe provare con qualcosa che vada a toccare molto piu' spesso la memoria. Ad esempio qualcosa tipo creare un albero di ricerca (BR, avl, quel che si vuole) con qualche milionata di oggetti e poi fare una dose massiccia di rimozioni e inserzioni. Dovrebbe dare una idea.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|
|
|
|
|
#64 |
|
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1945
|
|
|
|
|
|
|
#65 |
|
Senior Member
Iscritto dal: Oct 2011
Città: Parma
Messaggi: 313
|
|
|
|
|
|
|
#66 | |
|
Senior Member
Iscritto dal: Jan 2010
Città: (MB)
Messaggi: 11971
|
Quote:
__________________
CPU: Ryzen 3700x DISSY: CM HYPER EVO 212 RAM: 16gb DDR4 3000Mhz MOBO: MSI b350 tomahawk VGA: MSI Ventus 2X 4060TI 16GB ALI: Cooler Master V550 SSD: Samsung 970 Evo Plus Trattive+:(a) topolino2808(x2), galfum, giap959, sm_morgan, Biduzzo, huangwei, maxmax80, bubbi, dinamite2, PaxNoctis;(v) rubrie, CubeDs, Slater91, Juvanni, FireFox152, gluvocio, giulio81, emahwupgrade, Velvet, semmy83, giocher03 |
|
|
|
|
|
|
#67 |
|
Senior Member
Iscritto dal: Oct 2011
Città: Parma
Messaggi: 313
|
|
|
|
|
|
|
#68 |
|
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
|
|
|
|
|
|
#69 | |
|
Senior Member
Iscritto dal: Jan 2007
Messaggi: 6238
|
Quote:
Il vero problema di C++ è che "si adatta troppo bene alle varie esigenze" e non avendo un azienda dietro interessata a spingere delle librerie standard "complete" di solito si usa "C++ e qualcosaltro". Bisogna quindi fare lo sforzo in più di fare più attenzione a cosa ci si appoggia in termini di librerie. |
|
|
|
|
|
|
#70 | |||||||||||
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Quote:
In Java posso al più scegliere un tipo di GC, e nemmeno da codice, visto che stiamo parlando di un parametro della virtual machine e non del compilatore. La differenza fra le due cose è sostanziale. Quote:
Comunque in C++ posso anche allocare memoria sullo stack o in maniera statica, e togliere di mezzo i tempi di deallocazione nei casi in cui riconosco che si possa fare. Questo in Java non si può fare. Parliamo in ogni caso di caratteristiche standard del linguaggio. Niente alchimie con settaggi vari della virtual machine. Quote:
Per essere chiari, potresti applicare lo stesso principio su esposto per gli oggetti young, ma significherebbe controllare in un preciso punto del codice (dove ti fa comodo) lo stato del GC, e riempirlo arbitrariamente di oggetti da deallocare in modo farne scattare la pulizia se ti accorgi che lo spazio rimasto potrebbe non essere sufficiente fino alla fine del frame. La classica cura che funziona, ma ammazza il malato, insomma. Come ricordava fek, in 10ms bisogna renderizzare un terzo del frame, non perdere tempo a fare da balia al GC... Quote:
Il martello puoi anche usarlo per intonacare una parete, ma un fracasso lo fa LEGGERMENTE meglio... Quote:
Quote:
Per la OOP è necessario il collegamento dinamico, ma ciò non vuol dire che in un linguaggio che supporti la OOP tutto debba essere collegato dinamicamente. Non c'è bisogno di un premio Turing per capirlo. Un oggetto non deve necessariamente avere tutti i membri polimorfici. Il polimorfismo si applica dove t'interessa modellare il comportamento di un oggetto. Non a membri che possono benissimo essere non dinamici. In Java è possibile definire membri non dinamici per una classe? Se la risposta è sì, permane l'affermazione di cui sopra: Gosling fece la minchiatona colossale, perché avrebbe dovuto utilizzarli di default, e lasciare al programmatore il compito di definire quelli per cui serve il collegamento dinamico. Quote:
Quote:
Nessuno m'impedisce di definire un vettore di byte nello stack, e costruirmi un de/allocatore in C++ che lo usi per particolari mie esigenze. Lo si fa, appunto, nei giochi, quando sai che dovrai allocare al più n oggetti di un certo tipo, che dovranno essere distrutti alla fine dei calcoli, e t'interessa che allocazione e deallocazione siano operazioni velocissime. E hai pure il pregio di non frammentare la memoria... E' una cosa che in Java non puoi fare. Sic et simpliciter. E' un esempio dell'enorme flessibilità che il C++ ti mette a disposizione. Difatti il codice hai postato alla fine ha sortito l'effetto opposto, perché non ha fatto che rafforzare quanto già detto. Quote:
Quote:
http://www.phoronix.com/scan.php?pag...nchmarks&num=1 http://www.g-truc.net/post-0372.html#menu http://software.intel.com/en-us/arti...er-xe/#details Da notare l'ultimo, che è il più recente, e che sfrutta la nota batteria di test SPEC, che è abbastanza corposa ed eterogenea in termini delle varie (tante) tipologie di codice utilizzate.
__________________
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 |
|||||||||||
|
|
|
|
|
#71 |
|
Senior Member
Iscritto dal: Apr 2010
Città: Leuven
Messaggi: 667
|
Apprezzo sempre queste discussioni, si imparano un sacco di cose...
Solo che mentre qui si discute di C++ vs Java rimane il problema di fare giochi. Anche se ora mi prendo una sputazza in un occhio ritengo che prima di pensare ad ottimizzare il gioco al bit bisognerebbe pensare al gameplay e al tipo di grafica. Fatto ciò si parte, si fa un prototipo funzionante e poi, se il prototipo non va sufficientemente rapido o bisogna aggiungere cose e limare i tempi, si passa all'ottimizzazione. Ecco perché in una delle mie prime risposte avevo scritto "usa il linguaggio che preferisci". Non esiste il miglior linguaggio per fare i giochi, questa è la risposta alla domanda originale del thread. Che C++ vada più veloce di Java è cosa nota (sempre che il programmatore sia all'altezza, altrimenti...), che per fare un gioco serva necessariamente di spremere la macchina all'osso direi proprio di no. Anche perché, il singolo sviluppatore, difficilmente ti programmerà un AAA, è più facile che ti tiri fuori un Angry Birds Però continuatela la discussione Java vs C++ che sto imparando più cose qui che nel corso di POO dell'università
__________________
L'elettronica digitale non esiste, è solo elettrotecnica con interruttori piccoli!
|
|
|
|
|
|
#72 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Di un gioco si può benissimo realizzare un modello/prototipo, e si può tranquillamente fare a meno del C++ per questo. Anzi, meglio linguaggi di gran lunga più produttivi.
Riflettendo ancora sulla discussione, il tracking di qualunque cosa in Java non è affatto semplice. Se per una classe che ho scritto ho assoluta cognizione e controllo, lo stesso non si potrebbe dire per le altre, ad esempio quelle del framework. Se devo convertire un oggetto in stringa, sono sicuro che verrà istanziato esattamente un oggetto? Non si sa. E se in alcuni casi, invece, vengono istanziati n oggetti, in altri casi m, in altri p, ecc.? E magari quel codice non è sotto il mio controllo (leggi: non posso sfruttare il sistema di tracking che ho messo in piedi)? Dovrei conoscere i dettagli del framework in maniera maniacale, e ciò non mi salverebbe comunque da casi complicati. Questo non significa che il C++ non sia del tutto esente dalla problematica, ma nel momento in cui posso definire arbitrariamente gli allocatori, vuol dire che posso comunque reindirizzare le allocazioni e le deallocazioni come e dove voglio, e quindi tenere sotto controllo qualunque aspetto del lifetime degli oggetti, probabilmente anche senza conosce alcunché degli internal del framework. Alla luce di ciò affermare che il GC sia assolutamente prevedibile risulta ampiamente discutibile.
__________________
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 : 22-04-2012 alle 10:29. |
|
|
|
|
|
#73 | |
|
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Quote:
In un'avventura grafica (alla Monkey Island), o meglilo ancora uno strategico a turni la cosa conta molto meno. Li' anche se devi aspettare diversi secondi perche' finisca il turno il computer piu' di tanto non ti lamenti.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|
|
|
|
|
|
#74 | |
|
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
Quote:
il primo confronta 3 versioni di gcc e quindi non lo confronta con icc e vc++ il secondo non dice su che os fa i benchmark....quello che ho visto dal benchmark di cui parlavo è che su windows vincono vc++ e .net, su linux ( con gli stessi benchmark ) gcc e mono impiegano meno tempo di vc++ e .net rispettivamente ( su windows ) magari la differenza dipende dal sistema operativo il terzo link mi pare onestamente un bel pò di marketing.....comunque in moltissimi benchmark, icc arriva ad un 10% di performance in più rispetto a gcc, ma è il massimo che riesce ad ottenere....in media siamo sul 3-5% trovai pure questo all'epoca http://attractivechaos.github.com/plb/ dove si vede che tra gcc e icc passa ben poca differenza Ultima modifica di pabloski : 22-04-2012 alle 11:54. |
|
|
|
|
|
|
#75 |
|
Senior Member
Iscritto dal: Oct 2011
Città: Parma
Messaggi: 313
|
|
|
|
|
|
|
#76 |
|
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
l'importante è aver trovato almeno una risposta....troppe però possono creare confusione e riportare al punto di partenza, cioè "che diavolo di linguaggio devo usare?"
ma penso che ormai sia chiaro che il linguaggio è l'ultimo dei problemi in questo caso e c++ ha l'enorme vantaggio di avere tonnellate di codice già pronto |
|
|
|
|
|
#77 | |
|
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Quote:
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|
|
|
|
|
|
#78 | |
|
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Quote:
Prendi l'I/O ad esempio; in C++ fondamentalmente le due alternative principali sono l'api C classica oppure gli stream. In entrambi i casi se voglio implementare un classe che faccia un qualche filtro (boh, mettiamo una codifica RLE) devo fare molto piu' lavoro che non in Java.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|
|
|
|
|
|
#79 | ||||||
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Quote:
Quote:
Quote:
Se a te non piace per i risultati, beh, non possiamo farci niente. Quote:
Quote:
Comunque sono singolari i benchmark su Windows, perché su questa piattaforma ho visto che generalmente ICC >> VS >> GCC. Le differenze sono abbastanza marcate.
__________________
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 |
||||||
|
|
|
|
|
#80 |
|
Senior Member
Iscritto dal: Jan 2010
Città: (MB)
Messaggi: 11971
|
ora ti aspetta solo lo studio, matto e disperatissimo
__________________
CPU: Ryzen 3700x DISSY: CM HYPER EVO 212 RAM: 16gb DDR4 3000Mhz MOBO: MSI b350 tomahawk VGA: MSI Ventus 2X 4060TI 16GB ALI: Cooler Master V550 SSD: Samsung 970 Evo Plus Trattive+:(a) topolino2808(x2), galfum, giap959, sm_morgan, Biduzzo, huangwei, maxmax80, bubbi, dinamite2, PaxNoctis;(v) rubrie, CubeDs, Slater91, Juvanni, FireFox152, gluvocio, giulio81, emahwupgrade, Velvet, semmy83, giocher03 |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:25.




















