Ottimizzazione: Che ne è? Eh?

Eh sì.

Quante volte ho letto “Quel gioco non è ottimizzato!” o “Quel gioco non è ottimizzato!” oppure ancora “Quel gioco non è ottimizzato!”.

In genere mi irrito. Altre volte mi inquieto mentre altre mi pongo domande. Comunque molto spesso mi irrito.

Ma perchè, dopo tutto? E’ così bello discutere con la gente! Quindi proviamo a capire cosa è cambiato nell’ottimizzazione, così magari in futuro avremo le idee più chiare. Da una mente chiara ne deriva una buona digestione e una duratura erezione, quindi partiamo.

La leggenda vuole che nel passato si ottimizzasse l’assembly fino a consumarsi le cornee sui forsfori verdi dei monitor di quei bei tempi che furono.

Ah, quanta verità! Non vi è nulla di più vero! Pensate che talune volte bisognava programmare su un computer e lanciare il gioco su un altro, poichè non c’era memoria per contenere gioco e programma per scriverlo.

Tempi bui, nei quali si scriveva il codice macchina direttamente nelle locazioni di memoria.

Tempi grami, in cui dire “ho 10Kb liberi” significava dire che tutta la memoria di sistema era libera.

Ai tempi era necessario ottimizzare spazio e codice, in modo da far stare tutto in 64K (ad esempio). Quindi si scriveva in assembly, si usavano array fissi, si gestivano immagini a 16 colori e si facevano muovere sprite da 16×16 pixel.

Forse sono andato troppo indietro, ma veniamo ad oggi.

Ad oggi fare queste ottimizzazioni non porterebbe ad un risultato buono. Vediamo perchè.

Supponiamo di avere un computer che fa 10 operazioni al secondo. Chessò, una PS3…. oh no! Ho violato un NDA! Vabbè, dicevo: 10 operazioni al secondo.

Abbiamo un algoritmo che in 5 operazioni è fatto e viene chiamato una volta al secondo. Lo ottimizziamo fino a che non fa ciò che deve in 2 operazioni, miracolosamente senza intaccare la memoria, ma funziona solo su quel tipo di dato e con un numero di elementi fissi.

Uella, un incremento pazzesco! Abbiamo 8 operazioni libere invece che 5.

Ora supponiamo di far girare l’algoritmo da 5 su una macchina che fa 1.000.000.000.000 di operazioni al secondo.

Capiamo da soli che a questo punto, forse è meglio quello da 5 rispetto a quello da 2 poichè è più completo: potremo magari usarlo in più luoghi del codice, senza intaccare le performance.

Ad oggi l’ottimizzazione quindi non può andare sulle minuzie: con le minuzie non ci si mangia via nemmeno un millisecondo.

Bisogna andare più ad alto livello, poichè anche i dati da gestire sono diventati mostruosi.

Quindi i famosi discorsi “Eeeh, ai tempi sì che si ottimizzava, oggi i programmatori pensano solo a godersi i miliardi che guadagnano a colpi di Veline e modelle Victoria’s Secret” purtroppo non hanno senso. Non tanto per la faccenda di Victoria’s Secret (ormai sono anche un po’ stufo di farmi Adriana Lima), ma perchè quel tipo di ottimizzazioni ad oggi sarebbero del tutto inutili.

Quindi cosa è utile? In assoluto, ad oggi, sono fondamentali le strutture dati scelte, il multithreading che blocchi il meno possibile i vari Core, il numero delle draw call e l’ottimizzazione dei dati.

Eh sì, dei dati. Caricare un livello che pesa 500MB o uno che ne pesa 100 ma ha un “look and feel” identico ovviamente cambia un tantino 😀

E qui finalmente accantoniamo il dannato programmatore e andiamo dai grafici. Se i programmatori, con dieci giorni di lavoro, possono tagliare via 1 o 2 millisecondi per frame, beh, i grafici nello stesso tempo sono in grado di tagliarne tipo 7 o 8 😀

Non male, vero? Quindi l’ottimizzazione dei dati è assolutamente fondamentale: decide se un gioco scatta in un dato punto del livello o meno.

Ma come possono fare i grafici a testare il tutto e tunare il livello? Con i tools. E chi li fa?

Il programmatore. E che palle. Sempre in mezzo.

Quindi, arrivati alla conclusione, cosa possiamo dire? Di certo che i programmatori passano la maggior parte del tempo a fare tools che producono dati ottimizzati, poichè è lì che si risparmia il grosso del tempo.

Quindi i tempi delle ottimizzazioni “una istruzione assembly in meno” sono finiti, da un bel po’.

Certo che però quelli erano bei tempi.

Cià vi saluto che c’è Persona 3 che mi aspetta: chissà che oggi quell’emo sfigato del mio personaggio non convinca qualche tipa ad accoppiarsi con lui.

24 commenti su “Ottimizzazione: Che ne è? Eh?

  1. Ma davvero gli sbagli di programmazione hanno bisogno di essere giustificati da un programmatore? Mi sembra un articolo inutilmente nebuloso e consapevolmente ridondante. Dici cose ampiamente risapute che poco o pochissimo aggiungono al discorso sull’ottimizzazione (la digressione sul multithreading andrebbe sviluppata, invece che malamente glissata con mezza riga e in termini dalle conclusioni assai discutibili). Infatti le conclusioni equivalgono all’inizio, senza dire proprio nulla. Tante parole ma nessun esempio pratico (quale sarebbe il 100MB dal vedo e sento identico al 500MB? quali i tools che fanno realmente la differenza?), troppa forma e ben poca sostanza. Mi piace la sicurezza nelle proprie conoscenze/capacità e pure ammiro l’arroganza ben dosata. Non le giustificazioni da grigione con la barba lunga e una conoscenza matusalemmica esclusivamente agiata sul proprio status di “programmatore”. Manca la totale voglia di mettersi in gioco – criticando e contestando il proprio ambito professionale – magari suggerendo idee reali che possano seriamente fare la differenza fra “noia” e “interesse”. Didascalismo e accademia vanno lasciate agli ambiti universitari.

  2. C’è un serio problema. Se uno parla di cinema o di letteratura non ha problemi a comprendere gli strumenti del mestiere, anche se non è del mestiere, ma con i videogiochi il probelma si pone.

    La critica può lasciare da parte la tecnica?

  3. C’è un serio problema. Se uno parla di cinema o di letteratura non ha problemi a comprendere gli strumenti del mestiere, anche se non è del mestiere

    Non penso proprio…

  4. @Coolcat:
    Sono sempre convinto che il critico migliore sia in grado di comprendere gli strumenti del mestiere del medium trattato.
    Voglio dire, anche nel cinema è molto importante capire che tipo di strumenti tecnici vengono impiegati e in quale modo; lo stesso vale per il disegno, per la pittura, per il fumetto; per la musica, etc.

    Ma alla fine è il risultato che conta.
    Volendo, possiamo sezionare tecnicamente un’opera che esprime poco o nulla.

    Ogni contributo è comunque prezioso a livello conoscitivo, ma vedete, per quanto il discorso di Monopoli possa essere importante, dove vediamo citare qualche titolo?
    A parte Persona 3, intendo. 😀

    Comunque mi piace che venga fatto un discorso storico, credo che sia questa la base su cui lavorare, aldilà dei differentti approcci.

  5. Io concordo pienamente con l’articolo: il punto è che l’ottimizzazione non può più essere talmente “spinta” da dedicarsi ai singoli cicli di clock perché non lavoriamo (e giochiamo) più su macchine a 4MHz come il SNES e perché le piattaforme ormai sono le più disparate. Le moli di dati su cui si opera inoltre sono ordini di grandezza superiori e richiedono approcci diversi tutt’altro che semplici.

    La cosa che a me personalmente da fastidio è quando su una rivista o sui forum si trova scritto “il codice non è ottimizzato” gratuitamente, senza che l’autore della frase sappia niente di codice né della sua ottimizzazione.

    Cito:

    Rules of Optimization:
    Rule 1: Don’t do it.
    Rule 2 (for experts only): Don’t do it yet.
    ~ M.A. Jackson

    😀

  6. Spesso per cattiva ottimizzazione s’intende un gioco che gira male sul proprio PC. La verità è che è difficile sapere se un gioco è ottimizzato bene o male e ci si affida ad alcune considerazioni basate sul buon senso. Ovvero: se Res. Evil 4 esce su PC senza ombre e con tutte le magagne del caso, l’idea che viene subito in mente è che si tratta di un prodotto mal ottimizzato. Lamentarsi, però, della cattiva ottimizzazione di Crysis è da sciocchi, visto il livello visivo del gioco. In quel caso, più che altro, ci si potrebbe chiedere per chi lo abbiano realizzato…
    Si parla di cattiva ottimizzazione quando un Assassin’s Creed richiede 3 GB di ram… più che altro viene da chiedere “perché” visto che è un porting da console… Insomma, il concetto di ottimizzazione, quando viene privato dei tecnicismi, diventa vago e poco definito… in effetti nell’uso comune si mescola a molti altri concetti che con l’ottimizzazione in se hanno poco a che vedere.

  7. Tempi duri per chi scrive oggigiorno… e qui poi… povero questo Monopoli.
    Ora mi scaglierò con la leggiadria rotolante di un Ferrara a favore di questo programmatore, ma non per campanilismo, badate (forse un po’).

    A chi si lamenta della forma senza la sostanza rispondo che se il testo non dimostra carisma (il classico deus ex machina della scrittura!!) difficilmente si prosegue la lettura; se la sostanza è troppo tecnica difficilmente il casual-omino di turno prosegue la lettura; se il discorso è didondante e privo di riferimenti, forse sarà che è frustrante ripetere le stesse cose in continuazione.

    Al mondo ci sono solo 10 tipi di persone: chi comprende il binario e chi no.

  8. ot|ti|miz|zà|re
    v.tr.
    1 CO spec. in ambito tecnico e aziendale, portare nelle migliori condizioni possibili per ottenere il massimo rendimento: o. un processo produttivo
    2 TS mat., in matematica applicata, scegliere i parametri o le funzioni variabili più adatte per ottenere la migliore risoluzione possibile di un problema in rapporto a una certa applicazione

    Il monopoli semplicemente non conosce la lingua italiana ? se un gioco che va tranquillamente su un wii richiede 4 giga di ram per girare su pc è scarsamente ottimizzato, punto. poi monopoli può farsi tutte le menate che gli pare(almeno fossero interessanti da leggere….)ma la sostanza non cambia.

  9. diciamo anche che sotto qualsiasi gioco pc ci sta windows che già lui da solo si ciuccia qualche giga di ram, mica è la dashboard dell’x360 o il basic v2 del c64…
    il che se da un lato può rendere più comprensibili le richieste più esose dei giochi pc rispetto a quelli console, dall’altro permette pure di interrogarsi sul fatto che, dato che ciò che uno programma andrà a girare su una macchina su cui già gira un sistema operativo mammuth, sarebbe forse il caso di non svalutare così tanto l’ottimizzazione spinta, dato che i famigerati 10 milioni di operazioni al secondo sono disponibili tutti e sempre solo in teoria.
    poi certo la verità sta nel mezzo e i tempi del metal bashing sono storia, ma sicuramente qualcuno che se ne approfitta c’è.

  10. Resto convinto che imparare gli strumenti del mestiere nell’arte del cinema, a livello teorico, sia molto più fattibile che dominare quelli di un programmatore, che oltretutto si sviluppano e aggiornano ad una velocità costante.

    Vediamo quanti redattori di videogiochi sanno utilizzare i termini tecnici a proposito e quanti recensiscono film o cinema invece parlano con cognizione di causa. Le media pende decisamente dalla seconda parte.

  11. Vediamo quanti redattori di videogiochi sanno utilizzare i termini tecnici a proposito e quanti recensiscono film o cinema invece parlano con cognizione di causa. Le media pende decisamente dalla seconda parte.

    Magari perché si sono fatti il culo a studiare, a leggere, a guardare film? Magari capire e analizzare Ejzenštejn o Proust è un tantinello più complesso che fare la stessa cosa con un FPS? (con tutto il rispetto, eh…) Magari si possono scrivere cose sensate e interessanti anche senza andare nel tecnico, in tutti i campi? Magari esistono diversi livelli di approfondimento (e al lettore che cerchi di capire com’è un gioco probabilmente delle menate tecniche frega fino a un certo punto, sempre con tutto il rispetto)? Magari essere dei provetti sviluppatori e contemporaneamente avere anche una formazione culturale con le contropalle se non a 360 gradi, almeno a 180 e quindi avere i mezzi per scrivere cose non banali sui videogiochi (come fa per esempio Karat) è roba che manco Superman (e infatti figure di questo tipo non ne ho mai viste in circolazione)? Magari quello che “pretendi” dal critico videoludico è in parte frutto di una concezione del videogioco legato quasi unicamente al progresso tecnologico che fortunamente grazie a Iddio comincia a diventare sorpassata?

    : – )

  12. Si ok, quindi non parlare di tecnicismi programmativi e solo di quelli legati al gameplay è più produttivo. E’ li che si vuole anare a parare alla fine.

  13. No apsetta ABS, mi ha frainteso allora. Io sono per il critico videoludico che non parla di tecnica, o comunque che non è obbligato a farlo, visto che non ne vedo la necessità.

    Io non ho mai scritto recension tecniche, perchè tanto non ci capisco una mazza di programmazione.

  14. Ho solo detto che, come sottosrivi anche tu, una doppia formazione in questo campo è molto difficile da ottenere, umanistica e tecnica. Perchè leggi sempre il male nei miei post? 😀

    Poi non credo di essere affatto legato ad una concezione vecchia dei videogiochi, dico solo che in questo campo capisco che Monopoli trovi spesso da ridire e si senta frustrato dalla stampa.

  15. “ma perchè quel tipo di ottimizzazioni ad oggi sarebbero del tutto inutili”

    Una delle più grandi cazzate che sento ripetere sempre più spesso!

    …se Windows XP ottimizzato (lato utente) occupa 23Mb di memoria e boota in una quindicina di secondi, allora cosa potrebbe succedere se fosse ottimizzato a “lato codice” ?
    E cosa succederebbe se tutti i programmi/giochi fossero scritti decentemente, con la quantità relativamente infinita di spazio disco/ram/cicli macchina/GPU che c’è ora?

    Non lo sapremo mai, finchè la gente è convinta che “ottimizzare non serve a niente”.
    …o meglio, voi non lo saprete mai…
    Buona permanenza nel mediocre.

    =Amiga rulez, Ever=

  16. Pings/Trackbacks Ars Ludica » Blog Archive » La Lingua del Ludo

  17. Pings/Trackbacks Ars Ludica » Blog Archive » Tron 2.0

Rispondi

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.