»Artemis« zu gut für Konkurrenz?: ARM Cortex-A73 toppt High-End-CPUs

In einem 10-nm-Prozess sollen ab 2017 erste SoCs mit ARMs neuer High-End-CPU Cortex-A73 von vermutlich Intel-Fabriken ausgeliefert werden. Für eine maximale Energieeffizienz wurde die Architektur des A72 an der einen oder anderen Stelle sogar zurückgebaut – mit bemerkenswerten Ergebnissen.

Die Revolution: Wechsel der Cache-Architektur

Bild 5: Der Datencache wurde vom PIPT zum VIPT, das Problem des Aliasing hardwareseitig gelöst.

Alles bislang Ausgeführte ist wichtig, aber längst nicht so wichtig wie ein effizientes Speichersubsystem. Hier spielen natürlich die beiden Dual-Issue-Lade-/Speicher-Einheiten eine Rolle, aber noch mehr der Wechsel des Daten-Cache-Typs. Der A72 arbeitete mit einem PIPT-Cache (Physically indexed, physically tagged), der sowohl für Index als auch Tag physikalische Adressen nutzt. Er ist einfach und vermeidet Probleme durch das sogenannte Aliasing (dazu gleich mehr), er ist aber langsam, da die physikalische Adresse aufgelöst werden muss (was einen TLB-Miss und Zugriff auf den Hauptspeicher bedeuten kann), bevor die Adresse im Cache aufgelöst werden kann.

Statt den PIPT nutzt der A73 einen 64 KB großen VIPT-Datencache (Virtually indexed, physically tagged) bei dem für den Index eine virtuelle Adresse genutzt wird (Bild 5). Der Vorteil gegenüber dem PIPT ist die geringere Latenzzeit, da die Cache-Zeile parallel mit der TLB-Übersetzung aufgelöst werden kann. Das Tag kann natürlich immer noch nicht verglichen werden, bevor die physikalische Adresse verfügbar ist. Ein mögliches Problem ist Aliasing, was bedeutet, dass mehrere virtuelle Adressen auf dieselbe physikalische Adresse zeigen können. Der A73 stellt in Hardware sicher, dass alle Updates auf dieser physikalischen Adresse in-Order ausgeführt werden, indem sich zu jedem Zeitpunkt nur eine Kopie der physikalischen Adresse im Cache befindet. Die Verdoppelung der Cachegröße von 32 auf 64 KB soll laut ARM einen Geschwindigkeitszuwachs von 4 Prozent bringen. Während der Cache hardwareseitig, wie schon ertwähnt, 4-fach-assoziativ ausgeführt ist, wird er von der Software als 8-fach-assoziativer 32 KB großer oder 16-fach-assoziativer 64 KB großer PIPT-Cache gesehen.

Neben den bekannten L1- und L2-Stride-basierenden Prefetchern hat ARM beim A73 einen weiteren Prefetcher eingebaut, der auf die Verarbeitung von komplexen Datenmustern spezialisiert ist. Damit konnte laut ARM der Datendurchsatz beim Streamen von Datenströmen nahe an die theoretisch verfügbare Bandbreite angehoben werden. Last, but not least wurde auch der Haupt-TLB (Übersetzungspuffer, Translation Lookaside Buffer) verbessert, da man bei den A73-Vorgängern bei größeren Datenstrukturen Leistungseinbußen detektieren musste. Indem dem TLB beim A73 eigene Prefetcher zur Verfügung stehen, wurde dieses Problem gelöst. Geändert wurde vermutlich auch die Cache-Ersetzungsstrategie. Während der A17 für alle Caches eine einfache pseudo-zufällige Strategie nutzt, verwendet der A73 vermutlich einen Pseudo-am-längsten-nicht-verwendet-Algorithmus (PLRU, Pseudo-least-recently-used, es wird diejenige Seite ausgelagert, deren letzte Referenzierung zeitlich am längsten zurückliegt). PLRU hat typischerweise eine etwas schlechtere Miss-Rate, dafür kürzere Latenzzeiten und geringeren Energiebedarf als LRU. Die Tabelle fasst die wesentlichen Unterschiede zwischen den Modellen Cortex-A17, -A72 und -A73 zusammen.