In Computern sind Hardware-Leistungszähler ( HPCs ) [ 1 ] oder Hardware-Zähler spezielle Register, die in moderne Mikroprozessoren integriert sind , um die Anzahl hardwarebezogener Aktivitäten zu speichern. Fortgeschrittene Anwender nutzen diese Zähler häufig für detaillierte Leistungsanalysen und Optimierungen .
Implementierungen
Die Anzahl der verfügbaren Hardware-Zähler in einem Prozessor ist begrenzt, während jedes CPU- Modell eine Vielzahl unterschiedlicher Ereignisse aufweisen kann, die ein Entwickler messen möchte. Jeder Zähler kann mit dem Index eines zu überwachenden Ereignistyps programmiert werden, beispielsweise einem L1-Cache-Fehler oder einer Fehlvorhersage einer Verzweigung.
Einer der ersten Prozessoren, der einen Hardwarezähler und eine zugehörige Anweisung zum Zugriff darauf (die RDPMCAnweisung) implementierte, war der Intel Pentium , aber sie wurden erst dokumentiert, nachdem Terje Mathisen im Juli 1994 in Byte einen Artikel über Reverse Engineering darüber geschrieben hatte. [ 2 ]
Die folgende Tabelle zeigt einige Beispiele für CPUs und die Anzahl der verfügbaren Hardwarezähler:
| Prozessor | verfügbare HW-Zähler |
|---|---|
| UltraSparc II | 2 |
| Pentium III | 2 |
| ARM11 | 2 |
| AMD Athlon | 4 |
| IA-64 | 4 |
| ARM Cortex-A5 | 2 [ 3 ] |
| ARM Cortex-A8 | 4 |
| ARM Cortex-A9 MPCore | 6 |
| POWER4 | 8 |
| Pentium 4 | 18 |
im Vergleich zu Softwaretechniken
Im Vergleich zu Software- Profilern bieten Hardware-Zähler einen ressourcenschonenden Zugriff auf eine Fülle detaillierter Leistungsinformationen zu den Funktionseinheiten der CPU, den Caches, dem Hauptspeicher usw. Ein weiterer Vorteil ist, dass in der Regel keine Quellcodeänderungen erforderlich sind. Allerdings variieren die Arten und Bedeutungen von Hardware-Zählern je nach Architektur aufgrund der unterschiedlichen Hardware-Organisationen.
Es kann schwierig sein, die Leistungskennzahlen auf niedriger Ebene dem Quellcode zuzuordnen. Die begrenzte Anzahl an Registern zur Speicherung der Zähler zwingt Benutzer oft dazu, mehrere Messungen durchzuführen, um alle gewünschten Leistungskennzahlen zu erfassen.
Anweisungsbasierte Stichproben

Moderne superskalare Prozessoren planen und führen mehrere Befehle gleichzeitig und in beliebiger Reihenfolge aus . Diese Befehle können jederzeit abgebrochen werden, abhängig von Speicherzugriffen, Cache-Treffern, Verzögerungen in der Pipeline und vielen anderen Faktoren. Dies kann dazu führen, dass Ereignisse in Leistungszählern den falschen Befehlen zugeordnet werden, was eine präzise Leistungsanalyse erschwert oder unmöglich macht.
AMD führte Methoden ein, um einige dieser Nachteile zu beheben. Beispielsweise implementierten die Opteron-Prozessoren 2007 [ 4 ] eine Technik namens Instruction Based Sampling (IBS). AMDs Implementierung von IBS stellt Hardware-Zähler sowohl für das Fetch-Sampling (am Anfang der superskalaren Pipeline) als auch für das Op-Sampling (am Ende der Pipeline) bereit. Dies führt zu diskreten Leistungsdaten, die nicht mehr benötigte Befehle dem übergeordneten AMD64-Befehl zuordnen.
Siehe auch
Referenzen
- ^ Malone, Corey; Zahran, Mohamed; Karri, Ramesh (2011). „Sind Hardware-Leistungszähler eine kosteneffektive Methode zur Integritätsprüfung von Programmen?“ (PDF) . Proceedings of the sixth ACM workshop on Scalable trust computing . S. 71–76 . doi : 10.1145/2046582.2046596 . ISBN 9781450310017S2CID 16409864. Abgerufen am 17. November 2022 .
- ^ „Pentium Secrets“ . Gamedev.net . Abgerufen am 14.02.2012 .
- ^ „Dokumentation – Arm Developer“ . developer.arm.com .
- ^ „Befehlsbasiertes Sampling: Eine neue Leistungsanalysetechnik für AMD-Prozessoren der Familie 10h“ (PDF) . AMD . Abgerufen am 16.10.2015 .