Ottimizzare C++/Tecniche generali di ottimizzazione/Caching: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Revisionato
Gian BOT (discussione | contributi)
m Bot: sostituisce source con syntaxhighlight
 
Riga 9:
Per esempio, dovendo calcolare la radice quadrata di un numero intero compreso tra 0 e 9, conviene usare la seguente funzione:
 
<sourcesyntaxhighlight lang=cpp>
double sqrt10(int i) {
static double lookup_table[] = {
Riga 18:
return lookup_table[i];
}
</syntaxhighlight>
</source>
 
L'accesso a un array è molto veloce, soprattutto se la cella a cui si accede si trova nella cache dei dati del processore. Pertanto, se la look-up table non è grande, quasi sicuramente il suo accesso è più veloce della funzione che si deve calcolare.
Riga 32:
Per esempio, invece della seguente funzione:
 
<sourcesyntaxhighlight lang=cpp>
double f(double x, double y) {
return sqrt(x * x + y * y);
}
</syntaxhighlight>
</source>
 
puoi scrivere la seguente funzione:
 
<sourcesyntaxhighlight lang=cpp>
double f(double x, double y) {
static double prev_x = 0;
Riga 53:
return result;
}
</syntaxhighlight>
</source>
 
Nota che, per avere un vantaggio prestazionale, non è necessario che la funzione sia chiamata con gli stessi argomenti per tutta l'esecuzione del programma.
Riga 76:
Ecco un esempio, in cui la mappa è implementata con un array, riferito alla stessa funzione della linea-guida "Caching a un posto" in questa sezione:
 
<sourcesyntaxhighlight lang=cpp>
double f(double x, double y) {
static const int n_buckets = 8; // Dovrebbe essere una potenza di 2
Riga 97:
return cache[last_written_i].result;
}
</syntaxhighlight>
</source>
 
Alcune funzioni, pur avendo un dominio teoricamente grande, sono chiamate frequentemente con pochi valori distinti.