Advanced Caching topics. Book lists 11: 1) Small and Simple to reduce hit time 2) Way prediction to reduce hit time 3) Trace Caches 4) Pipeline Cache 5) Nonblocking caches 6) Multibanked caches 7) Critical word first, early restart 8) Merging write buffer 9) Compiler optimizations to reduce Miss Rate 10) Hardware Prefetching to reduce miss rate/penalty 11) Compiler-controlled prefetching to reduce miss rate/penalty Other cool cache things that aren't mentioned: Skewed Associative Caches: Pseudo-Associative Caches: Victim Caches: Multi-ported caches: Variable size blocks: Multiple-level caches: Summary: Average Access Time = hit time + miss rate * miss penalty. Remember, though, this can be difficult to calculate in pipelined, OOO machine. What is miss penalty? Intuition says it is lost cycles due to waiting for memory. What if instructions can bypass blocked load? What if I have a prefetching system, so that the results are on their way? Reduce miss rate by larger blocks Higher associativity Bigger Caches pseudo-associative caches compiler optimizations victim caches (depending ...) Reduce miss penalty by Giving priority to reads over writes Merging Write Buffer Early restart and critical word first Multi-level caches sub-block replacement Victim caches (depending ...) Reducing both non-blocking caches hardware prefetching (?) compiler controlled prefetching (?) Reduce Hit time by using small, simple caches Avoiding address translation during indexing pipelining writes for fast write hits Subblock replacement for fast write hits in write through cache Trace Cache Pipelined Cache Access (book says slow hits!)