Direkt abgebildeter vs. satzassoziativer vs. vollassoziativer Cache
Ein Cache muss entscheiden, wo jeder Speicherblock abgelegt werden darf. In einem direkt abgebildeten Cache hat jeder Block genau eine mögliche Zeile, was einfach und schnell ist, aber zu Konflikten führt, wenn zwei Blöcke dieselbe Zeile belegen. In einem vollassoziativen Cache kann ein Block überall liegen, was Konflikte vermeidet, aber einen Vergleich mit jeder Zeile erfordert. Ein satzassoziativer Cache ist der Kompromiss: Ein Block kann in einem von wenigen Wegen innerhalb eines Satzes liegen. Die meisten CPU-Caches sind satzassoziativ.
| Aspekt | Direkt abgebildet | Satzassoziativ | Vollassoziativ |
|---|---|---|---|
| Wo ein Block liegen kann | In genau einer Zeile, bestimmt durch die Index-Bits | In einem der Wege (zum Beispiel 4 oder 8) eines Satzes | In jeder Zeile des Caches |
| Tag-Vergleiche pro Zugriff | Einer | Einer pro Weg (zum Beispiel 8) | Alle Zeilen gleichzeitig, parallel |
| Trefferzeit | Am schnellsten | Etwas langsamer | Am langsamsten |
| Hardwarekosten und Leistungsaufnahme | Am niedrigsten | Mittel | Am höchsten: ein Komparator für jede Zeile |
| Konfliktfehlzugriffe | Am häufigsten | Nehmen mit der Zahl der Wege ab | Keine: Es bleiben nur Compulsory- und Kapazitätsfehlzugriffe |
| Ersetzungsstrategie | Nicht nötig: nur eine Möglichkeit | Innerhalb des Satzes gewählt (LRU oder Näherungen) | Unter allen Zeilen gewählt |
| Typische Einsatzgebiete | Kleine, einfache Caches und einige Mikrocontroller | L1-, L2- und L3-Caches in den meisten CPUs, meist mit 4 bis 16 Wegen | Kleine Strukturen wie TLBs und Victim-Caches |
Die Zahlenangaben sind typische Größenordnungen und variieren je nach Prozessgeneration und Produkt.