martedì 2 dicembre 2008

Ottimizzazione, grande assente.

Partecipando a un corso di informatica basilare, per la programmazione in basic, parecchi anni fa, con una semplice applicazione che simulava graficamente il lancio dei dadi, un professore volenteroso ci fece annottare come, sfruttando dei processi già in corso si poteva risparmiare quasi il doppio della ram.

Fu folgorante come attraverso la sola programmazione si potesse in verità raddoppiare le performance effettive.
In ambito Pc la stessa sensazione, cioè di estrema ottimizzazione, solo in pochi ambiti l'ho provata.
A memoria Unreal con schede Voodoo di 3dfx, o Return to Castle Wolfeinstein.
La colpa sarà che a oggi i computer portatili vendono di più delle soluzioni gaming fisse, o che ogni mese esce un driver nuovo e relativo hotfix dello stesso a seconda del gioco, o che il mercato si sta spostando, man mano, verso altri lidi, ma sta di fatto che la poca ottimizzazione ormai, purtroppo, è quasi un classico.
Senza stare a citare l'esempio più clamoroso (Crysis, che manco sfrutta il multicore), trovo difficile trovare un titolo veramente ben programmato, se si escludono i soliti, Valve e Blizzard.
Per il resto, a partire da EA per finire a Ubi-soft, che con Assasin's Creed ha addirittura tolto un eventuale ottimizzazione per schede AMD, il software sembra sviluppato tutto su layer predefiniti che sfruttano male e quasi nulla l'eventuale Hw di una certa consistenza.
Questo livellamento, aimè, veramente triste, combinato con la tendenza a non fare uscire più demo valutative, o farle uscire parecchio dopo, sta man mano rovinando un ambito che con un po' di buona volontà potrebbe risultare fiorente.

2 commenti:

Anonimo ha detto...

questo post dimostra una tua ignoranza verso la programmazione di alto livello. termini come "ottimizzazione" o "ben programmato" usati in termini così generali non hanno alcun senso in ambito informatico. parli di "layer predefiniti"? macchè vuol dire? su cosa ti basi per definire una applicazione ben programmata? citi il fatto che crysis non sfrutta il multicore, perchè deve essere da te considerato un errore? non può essere una scelta progettuale partorita dopo molti test? questo per dire che stai facendo delle considerazioni senza sapere le cose.

Scusa il mio intervento, ma da professionista del settore preferirei che la gente evitasse facili considerazioni dettate nella stragrande maggioranza dei casi dall'ignoranza sulla materia del parlare.

Per il resto è un buon blog il tuo.

Ciao.

Patrick "Pk77" Grioni ha detto...

alzati male stamattina? ;)
Layer predefiniti vuol dire che, dalla versione già programmata xbox360 (solitamente) si tira fuori un codice compatibile con windows il più delle volte, tanto che titoli come Assasin's Creed hanno tra le cartelle anche file xbox360, e questo non mi sembra onestamente programmare ottimizzando.
Ottimizzare che vuol dire, prendo ad esempio un tipino come Carmack che usava come golden sample i driver nvidia opengl, sfruttandone le prerogative, e poi portava il codice su soluzioni Ati, che si adattavano a far funzionare gli stessi.
Lui creava vari path, ed era tale la sua preferenza per nvidia che con 5800 ne fece uscire uno specifico nv30 in grado di utilizzare istruzioni fixed e PP con un risultato simile alla versione Ati con fp24 che per i tempi era FP.
Inutile dire come in Doom3 e solo li Geforce Fx fossero davanti a r300 di Ati, soprattutto con i filtri, pur utilizzando un path ARB2 (cioè favorevole ad Ati) ma che grazie al mitico compilatore dei driver forceware rendeva Nvidia più veloce.
Detto questo oggi abbiamo sempre 2 scuole di programmazzione base, che purtroppo non possono confluire viste le differenze tra cpu xbox360 e ps3, e la piattaforma base di sviluppo è sicuramente xbox360.
Al Pc riservano una versione compatibile, a volte con qualche aggiunta quantitativa (l'orizzonte di gta4) o con la modalità Dx10 (il più delle volte inutile vedesi Devil May Cry 4), al più tolgono più che aggiungere, vedesi Fifa 2009.
E di questo che mi lamento nell'intervento, che anche se l'ottimizzazione come giustamente dici non è al concreto verificabile, di sicuro, almeno in ambito Pc questo processo il più delle volte tende a non esistere.