Stavo leggendo le previsioni sulle filiali e le mancate cache e ho deciso di leggere what every programmer should know about memory
. Ma non sono sicuro di quanta conoscenza di basso livello debba avere per scrivere codice performante.
Un classico esempio è l'accesso alla memoria nel modo sbagliato, accedendo colonna per colonna quando è maggiore di riga causerebbe un errore di cache in ogni ricerca.
Ho eseguito un benchmark di 10.000 per 10.000 matrici e l'ordine corretto viene eseguito in 97 ms mentre l'ordine errato viene eseguito in 1535 ms.
Mentre è evidente che l'accesso alla memoria nel giusto ordine è molto più veloce, ma da quanto? In questo esempio, è solo più veloce di 1,44 secondi. Quindi un programma scritto da un programmatore senza tale conoscenza della memoria è probabilmente penalizzato solo fino a pochi secondi.
Ho 2 domande.
- Quante conoscenze di basso livello deve avere un programmatore competente?
- Quanto tempo risparmiato con l'ottimizzazione è considerato utile? Almeno un minuto rasato? Mezzo minuto? O qualsiasi quantità di tempo risparmiato?
Alcune persone pensano che non valga la pena di ottimizzare solo per risparmiare qualche secondo o addirittura millisecondo. Ma cosa ne pensate?