Sto arrivando a questo lavoro in aree in cui non vi è alcun SLA sulle prestazioni. Quando si tratta di renderer offline nella computer grafica, non ci sono "prestazioni soddisfacenti" per gli utenti, perché stanno già distribuendo enormi somme di denaro per distribuire il calcolo su cloud e rendere le farm anche con i renderer all'avanguardia per produrre immagini e cornici di qualità produttiva per i film, ad es
Devo tuttavia affermare come uno che lavora in questo settore da molti anni che qualsiasi soluzione che degrada in modo significativo la manutenibilità a favore dell'efficienza sta effettivamente lavorando contro i requisiti di prestazioni in continua evoluzione. Perché se non riesci a mantenere efficacemente la tua soluzione per gli anni a venire mentre le cose si stanno spostando sotto i tuoi piedi (sia in termini di codice circostante sia in ciò che gli utenti si aspettano che i concorrenti continuino a sovraperformarsi a vicenda), allora la tua soluzione sta già lavorando verso l'obsolescenza e in necessità di sostituzione all'ingrosso.
Non vedo lo scopo ultimo di profilatori come VTune come un modo per rendere il mio codice più veloce. Il loro ultimo valore è assicurarsi che non sto degradando la mia produttività per soddisfare le sempre crescenti richieste di prestazioni. Se devo assolutamente applicare un po 'di micro-ottimizzazione dall'aspetto grossolano, allora il profiler, combinato con l'esecuzione su casi di utenti reali (e non su alcuni casi di test che immagino potrebbero essere importanti), si assicura di applicare tale inevitabilmente aspetto grossolano ottimizzazioni molto, molto giudiziose solo per i migliori hotspot che compaiono, oltre a documentarle con molta attenzione perché dovrò inevitabilmente rivisitarle, mantenerle, modificarle e modificarle per gli anni a venire se tale soluzione rimane praticabile.
E soprattutto se la tua soluzione ottimizzata prevede un maggiore accoppiamento, sarei davvero riluttante a usarla. Tra le metriche più preziose che ho imparato ad apprezzare nelle aree più critiche per le prestazioni del codebase c'è il disaccoppiamento (come nel minimizzare la quantità di informazioni che qualcosa deve funzionare, il che minimizza anche la probabilità che richieda cambiamenti a meno che non abbia bisogno di cambiamenti diretti ), poiché queste aree critiche moltiplicano significativamente le ragioni per cui le cose cambiano. Ciò significa che meno informazioni richiede qualcosa per funzionare, meno ragioni ha per il cambiamento e minimizzare le ragioni del cambiamento è davvero una parte enorme del miglioramento della produttività nelle mie particolari aree di interesse perché le cose dovranno cambiare costantemente comunque (noi diventerò obsoleto tra un anno altrimenti),
Per me le soluzioni più grandi ed efficaci che ho trovato sono quelle in cui efficienza, manutenibilità e produttività non sono diametralmente opposte. La ricerca per me è quella di provare a rendere questi concetti più armoniosi che si possano realizzare.