Sto arrivando a questo lavoro in aree in cui non ci sono SLA sulle prestazioni. Quando si tratta di renderer offline in computer grafica, non c'è "prestazione soddisfacente" per gli utenti, perché stanno già distribuendo enormi somme di denaro per distribuire il computing attraverso i cloud e renderizzare le farm anche con i renderizzatori allo stato dell'arte per produrre immagini e fotogrammi di qualità di produzione per film, ad esempio
Tuttavia, devo dire che quando lavoriamo in questo settore da molti anni, qualsiasi soluzione che degrada in modo significativo la mantenibilità a favore dell'efficienza sta effettivamente lavorando contro i sempre mutevoli requisiti di prestazioni. Perché se non riesci a mantenere efficacemente la tua soluzione per anni a venire mentre le cose stanno cambiando sotto i piedi (sia in termini di codice circostante che di aspettative degli utenti in quanto concorrenti si sovraperformano l'un l'altro), la soluzione sta già lavorando verso l'obsolescenza e in necessità di sostituzione all'ingrosso.
Non vedo lo scopo ultimo dei profiler come VTune come un modo per far funzionare il mio codice più velocemente. Il loro valore finale è quello di assicurarsi che non sto degradando la mia produttività per soddisfare richieste di prestazioni sempre più elevate. Se devo assolutamente applicare una micro-ottimizzazione dall'aspetto grossolano, allora il profiler, combinato con l'esecuzione contro casi reali dell'utente (e non alcuni casi di test che immagino potrebbe essere importante), assicura Applico tali ottimizzazioni, inevitabilmente grossolane, molto, molto giudiziosamente solo ai migliori hotspot che appaiono e con molta attenzione a documentarle perché inevitabilmente dovrò rivisitarle e mantenerle e modificarle per gli anni successivi a venire, se questa soluzione rimane praticabile.
E soprattutto se la tua soluzione ottimizzata richiede più accoppiamento, allora sarei davvero riluttante a usarla. Tra le metriche più preziose che ho imparato ad apprezzare nella maggior parte delle aree critiche per le prestazioni del codebase è il disaccoppiamento (come nel minimizzare la quantità di informazioni che qualcosa deve funzionare, che minimizza anche la probabilità che richieda cambiamenti a meno che non abbia bisogno di modifiche ), perché quelle aree critiche moltiplicano in modo significativo le ragioni per cui le cose cambiano. Il che significa che meno informazioni richiede qualcosa per lavorare, meno ragioni hanno per il cambiamento e minimizzare le ragioni del cambiamento è davvero una parte enorme del miglioramento della produttività nelle mie particolari aree di attenzione perché le cose dovranno cambiare costantemente comunque (noi diventerà obsoleto in un anno altrimenti) e aiuta a ridurlo al minimo e a ridurre il costo di tali cambiamenti.
Per me le soluzioni migliori e più efficaci che ho trovato sono quelle in cui efficienza, manutenibilità e produttività non sono diametralmente opposte l'una all'altra. La ricerca per me è cercare di rendere questi concetti armoniosi come si può eventualmente fare.