Ottimizzare C++/Tecniche generali di ottimizzazione/Caching: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Revisionato |
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:
<
double sqrt10(int i) {
static double lookup_table[] = {
Riga 18:
return lookup_table[i];
}
</syntaxhighlight>
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:
<
double f(double x, double y) {
return sqrt(x * x + y * y);
}
</syntaxhighlight>
puoi scrivere la seguente funzione:
<
double f(double x, double y) {
static double prev_x = 0;
Riga 53:
return result;
}
</syntaxhighlight>
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:
<
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>
Alcune funzioni, pur avendo un dominio teoricamente grande, sono chiamate frequentemente con pochi valori distinti.
|