Se si può supporre che un colpo di cache sia molto più veloce di un errore di cache, si scoprirà che il lavoro straordinario, anche se si hanno solo errori di cache, l'uso di una cache sarà altrettanto veloce o più veloce di non usare una cache.
Vedi di seguito per la matematica:
Number of hits = NumRequests - #CacheMisses
AverageTime = ((NumRequests-#CacheMisses) * TimePerHit + #CacheMisses * TimePerMiss)/NumRequests
Se poi assumiamo che NumRequests è infinito (questo è un problema limite, non temono il calcolo), possiamo vedere questo:
AverageTime = Infinity*TimePerHit/Infinity - #CacheMisses*TimePerHit/Infinity + #CacheMisses*TimePerMiss/Infinity
Entrambi i termini con i #CacheMisses va a zero, ma l'intera equazione risolve a:
AverageTime = TimePerHit
concesso tale è per quando il numero di richieste è infinito, ma puoi vedere come questo acceleri facilmente il tuo sistema usando una cache.
Il tuo calcolo sembra molto buono. Sfortunatamente implica il presupposto che il numero di errori di cache sia costante, il che sembra altamente improbabile. Il numero corretto sarebbe: HitProbability * TimePerHit + (1 - HitProbability) * TimePerMiss –
So che la matematica è un po 'incerta; questa è una prova che ho dovuto imparare per una lezione che ho fatto lo scorso autunno e ho cercato di richiamarla da lì. Affrontare il tuo punto però, dal momento che ho CacheHits vs CacheMisses, questo è un rapporto, quindi non sarebbe la stessa cosa di usare una probabilità di successo? – samoz
Non proprio. Supponendo che ci sia una probabilità costante e non zero di errori di cache, ci saranno infiniti errori se si eseguono prove infinite. La tua formula sarebbe corretta se la cache fosse abbastanza grande da contenere tutti i dati che verranno mai richiesti. Poi c'è un limite superiore costante al numero di miss. –