Direct-mapped, set-associative en fully associative: cachearchitecturen vergeleken
Een cache moet bepalen waar elk geheugenblok mag staan. Bij een direct-mapped cache kan elk blok maar op één regel staan, wat eenvoudig en snel is, maar conflicten geeft als twee blokken om dezelfde regel strijden. Bij een fully associative cache kan een blok overal staan en zijn er geen conflicten, maar moet met alle regels worden vergeleken. Set-associative is het compromis: een blok mag in een van de enkele ways van één set staan. De caches van de meeste CPU's zijn set-associative.
| Kenmerk | Direct-mapped | Set-associative | Fully associative |
|---|---|---|---|
| Waar een blok kan staan | Eén regel, bepaald door de indexbits | Een van de ways (bijvoorbeeld 4 of 8) in één set | Elke regel in de cache |
| Tagvergelijkingen per toegang | Eén | Eén per way (bijvoorbeeld 8) | Alle regels parallel |
| Hittijd | Het snelst | Iets langzamer | Het langzaamst |
| Hardwarekosten en vermogen | Het laagst | Gemiddeld | Het hoogst. Elke regel heeft een comparator nodig |
| Conflictmisses | Het meest | Nemen af naarmate het aantal ways toeneemt | Geen. Alleen compulsory misses en capaciteitsmisses blijven over |
| Vervangingsbeleid | Niet nodig. Er is maar één keuze | Kiezen binnen de set (LRU of een benadering ervan) | Kiezen uit alle regels |
| Belangrijkste toepassingen | Kleine, eenvoudige caches, sommige microcontrollers | L1-, L2- en L3-caches van de meeste CPU's. Vaak 4 tot 16 ways | Kleine structuren zoals TLB's en victim caches |
De getalswaarden zijn typische ordegroottes en variëren per procesgeneratie en product.