In che tipo di progetti / campi si trovano i programmatori che amano l'ottimizzazione del codice? [chiuso]

-2

Penso che la maggior parte di noi si sforzi di far funzionare il nostro codice senza problemi, di leggere logicamente e, nel complesso, di funzionare bene. Ma per coloro che veramente si divertono a dedicare del tempo a capire come ottimizzare già un buon codice (che sia di loro o di qualcun altro), dove questi individui si trovano meglio nel mondo della programmazione?

Se l'ottimizzazione è quella di migliorare l'attuale algoritmo implementato nel loro progetto, prenditi il tempo di fare piccole differenze nelle prestazioni, studiando il tempo di esecuzione di cicli e condizionali in una lingua specifica (ad esempio, 3 o meno if else le dichiarazioni sono in genere molto più veloci di 3 o meno% dichiarazioni diswitch sono alcune lingue), o ripuliscono il codice (variabili inutili, modularizza meglio le funzioni esistenti, ecc.).

Immagino che molte di queste persone si trovino a casa su progetti critici per le prestazioni dell'hardware, come i campi relativi alla microarchitettura. Qualcos'altro?

    
posta 8protons 10.06.2016 - 21:16
fonte

3 risposte

3

Se hanno concorrenti, le prestazioni sono un criterio importante in base al quale vengono giudicati.

A proposito, se pensi che la performance sia una questione di utilizzo di switch rispetto a if , ti manca il punto con un margine enorme.

Non sai cosa aggiustare nel codice finché non scopri cosa ci vuole tempo . Questo può raramente (cioè mai) essere fatto guardando il codice. Quello che faccio è eseguirlo sotto un debugger e metterlo manualmente in pausa a caso per vedere cosa sta facendo.

Ecco alcuni esempi:

  • Spendendo più del 50% del tempo durante l'avvio dell'applicazione per leggere le DLL per estrarre le stringhe in modo che possano essere internazionalizzate, ma erano principalmente stringhe che l'utente non vede mai.

  • Trascorrere una notevole quantità di tempo facendo new e free , quando i blocchi di memoria allocati in precedenza potevano essere semplicemente riutilizzati.

  • Trascorrere una notevole quantità di tempo chiamando routine di libreria come sin , exp o log con gli stessi argomenti dell'ultima volta . I risultati precedenti potrebbero essere semplicemente ricordati.

risposta data 11.06.2016 - 08:56
fonte
1

Progetti con requisiti di rendimento.

In realtà non importa quale sia l'hardware. Posso guidare qualsiasi cosa al 100% di utilizzo. Come posso riempire qualsiasi disco rigido. La domanda è: posso ignorare le prestazioni e raggiungere comunque i miei obiettivi di rendimento. Se sì, sono giustificato nell'ignorare le prestazioni.

Alcuni progetti hanno problemi di prestazioni. Se hanno scritto un codice di facile lettura, ignorando le prestazioni, il problema solitamente non è difficile.

Se è difficile potrebbe essere un livello di ricerca difficile. Se hai le costolette per quello ti terrò a mente se ci imbattiamo in quello. Altrimenti, non lo ottimizzo per il gusto di farlo. Preferisco che impieghi il 5% in più se questo significa che il codice è leggibile.

Se vuoi un impiego affidabile, cerca di trovare posti di lavoro che hanno spinto l'hardware verso i suoi limiti come obiettivo. Questo può accadere su microarchitettura, super computer, smartphone, data center, calcolatrici, cloud, tostapane e persino l'umile PC.

    
risposta data 11.06.2016 - 04:48
fonte
1

Sviluppo integrato.

Quando lavori con un minimo ingombro di memoria e requisiti in tempo reale, devi costantemente pensare a ogni aspetto delle prestazioni, sia della velocità che della memoria.

I dispositivi embedded in tempo reale spesso richiedono tempi di risposta dell'ordine dei millisecondi nella mia esperienza. Se una routine è disattivata per 10 secondi da qualche parte, hai appena perso l'input da un pulsante sul tuo dispositivo. Se ti piace fare le cose in fretta, il tempo reale può essere una sfida incredibilmente divertente.

    
risposta data 11.06.2016 - 13:00
fonte

Leggi altre domande sui tag