|
|
|
![]() |
|
Strumenti |
![]() |
#81 | |
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
![]() |
![]() |
![]() |
#82 | |
Bannato
Iscritto dal: Jun 2005
Città: l'unica che per avere un santo patrono è andata a rubarlo altrove...
Messaggi: 10008
|
Quote:
|
|
![]() |
![]() |
![]() |
#83 | |
Registered User
Iscritto dal: Jan 2006
Messaggi: 75
|
Quote:
Pero' vorrei aggiungere: fermo restando quelo che ho scritto nei precedenti post, non sono mica un teorizzatore del ritorno all'asm come linguaggio principale! Oltre al fatto che asm andrebbe usato sicuramente di piu' a mio avviso per alcune funzionalita', dipende pure da come una persona programma! Per implementare un algoritmo, ci sono tanti modi per farlo. Per non parlare poi dell'algoritmo stesso. Nella mia non lunghissima carriera da programmatore, ho visto algoritmi implementati in maniere molto diverse, con conseguenti diversita' di prestazioni. Ottimizzare significa proprio rendere migliore un qualcosa fatto in prima battuta. Mi limito a dire che, a mio parere, molti aspetti del SO Windows sono implementati con la finalita' "basta che funzioni", magari pero' e' lento (e non e' detto che funzioni benissimo). Infatti, se e' vero che nessun programma e' esente da bug, e' anche vero che molti programmi MS sono davvero troppo pieni di bug per essere programmi commerciali. Sembra pero' che con Vista non stiano facendo il solito errore, a guardare il ritardo della sua uscita. Sto apsettando infatti per constatare se sara' cosi' oppure no. Sicuramente una cosa la penso: che Windows sia da molti sopravvalutato (che non vuol dire che non sia un buon prodotto eh!). Pero' non mi spiego come mai sia cosi' largamente usato (non me lo psiego se mi fermo a pensare ai motivi tecnici ![]() |
|
![]() |
![]() |
![]() |
#84 | |
Registered User
Iscritto dal: Jan 2006
Messaggi: 75
|
Quote:
Poi perche' sfidarmi? Se la gestione della memoria in .NET fosse cosi' grandiosa, tutti lo userebbero, ma non mi sembra sia cosi' al momento. Sembra che questo discorso lo faccia solo io in tutto il mondo... |
|
![]() |
![]() |
![]() |
#85 | |||
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
Quote:
![]() Quote:
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|||
![]() |
![]() |
![]() |
#86 | |
Registered User
Iscritto dal: Jan 2006
Messaggi: 75
|
Quote:
Mi dici che XP andava bene su un pc di fascia media del 2001, e magari andava meravigliosamente (che e' diverso da 'bene' per me) su un pentium 3. Ovvio che poi sui pc del 2004 il SO non puo' piu' migliorare come prestazioni, se lo stesso rimane immutato: prima o poi raggiunge il massimo delle prestazioni. O ho capito male? Io asserivo proprio che, a mio parere, doveva andare benissimo su un Duron 800 del 2001, per poi essere potenziato con i SP per sfruttare al meglio un Athlon tra il 2800 ed il 3500. Senno' il nuovo PC non te lo godi ![]() Invece cosi' te lo godi al meglio uno/due anni dopo che e' uscito il SO, e poi negli anni successivi il PC piu' potente ti serve solo per o videogiochi (o con programmi mission critical come Photoshop ad alti livelli o Matlab) |
|
![]() |
![]() |
![]() |
#87 | ||
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
E leggi bene, avere garanzie sui tempi di esecuzione non vuol dire che debbano essere il piu' ottimizzati possibile, significa che se un task deve terminare entro un tempo X, devo essere garantito che lo faccio e non mi interessa che termini in meta' di X. La cosa si puo' comunque risolvere parzialmente con .NET 2.0 ma mi sembra che il GC ancora non garantisca tempi di esecuzione fissi per ogni sweep di generazione. Ci devo guardare. Dal punto di vista dell'efficienza, invece, sta dicendo un'enormita'. Specifica in quali condizioni la gestione esplicita' della memoria e' piu' efficiente di un garbage collector. Nella maggior parte dei casi e' vero l'esatto contrario (modelli con frequenti allocazioni di oggetti di piccole dimensioni). Lo sai che matematicamente non esiste un algoritmo di allocazione/deallocazione della memoria che e' sempre piu' efficiente di tutti gl'altri? C'e' sempre un caso patologico che stende qualunque algoritmo di allocazione. Quote:
![]()
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
||
![]() |
![]() |
![]() |
#88 | |||
Registered User
Iscritto dal: Jan 2006
Messaggi: 75
|
Quote:
![]() ![]() Quote:
![]() Quote:
|
|||
![]() |
![]() |
![]() |
#89 | ||
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
Prova, prendi un qualunque algoritmo in C++ e prova a scriverlo piu' velocemente in asm. Poi postami il codice C++ e la tua versione asm che controllo ![]() Quote:
![]()
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
||
![]() |
![]() |
![]() |
#90 | |||
Registered User
Iscritto dal: Jan 2006
Messaggi: 75
|
Quote:
![]() Quote:
![]() Quote:
![]() |
|||
![]() |
![]() |
![]() |
#91 | |
Registered User
Iscritto dal: Jan 2006
Messaggi: 75
|
Quote:
![]() ![]() Esattamente un anno e mezzo fa la prova l'ho gia' fatta, e quello in asm risultava piu' rapido. Sicuramente ora lo stesso algoritmo andra' in modo identico sia fatto in C che in asm, vista la potenza acquisita dai PC in un anno e mezzo (roba che quelle 100 istruzioni in piu' ovviamente non vedi neanche che ci sono...). Magari ora le cose non stanno piu' cosi', e quindi scrivere in Asm e' perfettamente inutile (per quanto riguarda l'ottimizzazione intendo, perche' come anche hai detto tu prima per alcune cose va ancora usato necessariamente se si vuole risparmiare tempo). Sicuramente provero' ![]() Cmq poi stiamo parlando di C/C++, che e' il miglior compilatore, per come genera il codice eseguibile. Ma credi che tutti usano il C/C++? Per quanto riguarda il SO, sicuramente si', ma poi bisogna vedere COME si programma in C. Per le altre apps invece... Vedo molti usare ancora Visual Basic Per grosse apps... Comunque ribadisco, a prescindere se asm possa rendere piu' efficiente un programma, il modo migliore per creare un programma efficiente e' saper scrivere bene il codice (e non tutti sono preparati come te purtroppo). |
|
![]() |
![]() |
![]() |
#92 | |||
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
![]() Allo scheduler non interessa che il task finisca in 0.4s o in 0.000001s, gli interessa che finisca prima di 0.5s. Ovvero, non gli interessa quanto sia ottimizzato, gli interessa che garantisca il tempo di esecuzione. Se durante l'esecuzione del task entra un GC asincrono che magari impiega un secondo, la macchina si schianta ![]() Ecco perche' i GC asincroni senza garanzie non sono adatti ad applicazioni real time. Nota che ne' Linux ne' Windows ti garantiscono che nessun interrupt venga lanciato e gestito e non ti garantiscono i tempi di esecuzione degl'handler: sia Linux sia Windows possono teoricamente prendersi tutta la CPU per un tempo indefinito. Il software mission critical e real time non devono essere necessariamente ottimizzati, devono essere "precisi". Quote:
Quote:
- doppie deallocazioni - memory scribbler - memory leak E se mi dici ancora che le applicazioni complesse hanno bisogno di allocazione manuale altrimenti ci vuole piu' tempo mi arrabbio, perche' le notti a cercare le doppie deallocazioni le passavo io ![]()
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|||
![]() |
![]() |
![]() |
#93 | |
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
![]() Prendi un numero di vertici (posizione, normale, texture coordinate, indice nelle bone) in ingresso, un vettore di matrici e trasformi ogni vertice per la matriche indicata dal suo indice nelle bone. Sono 20 righe di codice in C++, divertiti ![]()
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
![]() |
![]() |
![]() |
#94 |
Registered User
Iscritto dal: Jan 2006
Messaggi: 75
|
Ah un'ultima cosa sul garbage collection:
(piccola nota da un manuale .NET): "Una cosa da ricordare però è che un'oggetto deputato alla distruzione non lo è immediatamente ma soltanto quando il garbage collector viene attivato ed inizia la ricerca di oggetti non utilizzati. Quando si crea un nuovo oggetto ricordarsi sempre di implementare il metodo Dispose() per la distruzione delle risorse inutili." Ergo, per rendere il garbage collection davvero efficiente (e far funzionare bene il garbage collector della piattaforma) bisogna comunque saper programmare bene. Se io no implemento il metodo Dispose() il mio programma funzionera', ma intanto utilizzera' male la memoria, addirittura peggio do come il garbage collector puo' fare se usato bene! Sicuramente tu queste cose le sai gia', ma bisogna vedere in quanti lo sanno. E' una questione di metodo, e sicuramente non bisogna improvvisarsi programmatori: mica poi sono cose dell'altro mondo, pero' un po' di studio per chi si reputa un programmatore (e magari si e' limitato a leggere un paio di manuali rapidi) ci vorrebbe ![]() |
![]() |
![]() |
![]() |
#95 | |
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
![]() Ad esempio contrariamente a quanto si pensa non risolve i memory leak. Qui sta dicendo che il metodo Dispose va implementato se l'oggetto mantiene un reference a risorse che devono essere distrutte derministicamente (oggetti non managed, connessioni, file, etc etc). Per quanto riguarda la memoria, invece, anche senza Dispose questa viene rilasciata dal GC quando l'oggetto non ha piu' reference associate.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
![]() |
![]() |
![]() |
#96 | |
Registered User
Iscritto dal: Jan 2006
Messaggi: 75
|
Quote:
Per tutto il resto che hai scritto: mi sa che hai frainteso. Che tu abia scritto un programma di milioni di righe di codice con allocazione manuale della memoria non fa che sottolineare quello che ho detto prima (e mi sa che ti sei contraddetto): al giorno d'oggi, allocare manualmente la memoria e' ancora normalmente piu' conveniente (e tu ne sei una prova ![]() ![]() Quindi dipende da come intendi la programmazione: continuo a dire che in media e' meglio il modo manuale: e' piu' complicato, ma i risultati sono normalmente migliori in termini di prestazioni. Il garbage collection e' invece piu' semplice, ma raramente garantisce una buona prestazione (se confrontata con l'allocazione manuale). |
|
![]() |
![]() |
![]() |
#97 |
Registered User
Iscritto dal: Jan 2006
Messaggi: 75
|
Si' quello che hai detto su Dispose() e' vero. Ah una domanda, ma lavori al Black&White studios?
![]() |
![]() |
![]() |
![]() |
#98 |
Registered User
Iscritto dal: Jan 2006
Messaggi: 75
|
Per fek:
Ah, approposito di sistemi realtime, leggiti questa: http://www.linuxhelp.it/modules.php?...ticle&sid=3259 ![]() |
![]() |
![]() |
![]() |
#99 | ||
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
![]() Quote:
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
||
![]() |
![]() |
![]() |
#100 | |
Registered User
Iscritto dal: Jan 2006
Messaggi: 75
|
Quote:
![]() Cmq ora capisco le tue posizioni (visto anche l'algoritmo di esempio che mi hai dato da implementare...): come 3D engineer e' normale non usare l'asm, con tutte le librerie grafiche che ci sono, e gli algoritmi 3d sono normalmente molto complessi. Nell'ambito 3D al giorno d'oggi l'asm e' praticamente inutile ![]() Io invece mi occupo di reti, e li' l'asm mi e' tornato utile in molte occasioni (soprattutto nella gestione delle scede di rete), mentre il GC lo evito nella gestione dei buffer di comunicazione.... Sicuramente emerge questo: ogni ambiente di sviluppo ha le sue prerogative, e non c'e' metodo migliore per TUTTI gli ambiti di lavoro. Io ad esempio parlavo del non uso del GC come una buona scelta nella programmazione di rete (che e' un campo molto vasto, ma e' cmq una parte del mondo informatico). Ciao ![]() |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:38.