Mit der kontinuierlichen Weiterentwicklung der Technologie stellen Benutzer immer höhere Anforderungen an Prozessoren, insbesondere in Bezug auf Leistung und Funktionen. Seit Intel 1993 erstmals die CPUID-Anweisung eingeführt hat, ist diese mysteriöse Anweisung zu einem unverzichtbaren Werkzeug geworden, um die Details des Prozessors zu verstehen. CPUID hilft der Software nicht nur, den Prozessortyp zu verstehen, sondern verrät auch, ob erweiterte Funktionen wie MMX und SSE implementiert sind.
Der CPUID-Befehl macht es für Entwickler überflüssig, komplexen Maschinencode zu schreiben, um Prozessoreigenschaften abzugreifen, was für die Entwicklung moderner Computersysteme von großer Bedeutung ist.
Vor der Einführung des CPUID-Befehls mussten Programmierer einige obskure Methoden anwenden, um Prozessorinformationen zu erhalten. Mit der Einführung des 80386-Prozessors zeigte das EDX-Register beim Zurücksetzen die Revision an, diese Information konnte jedoch erst nach dem Zurücksetzen gelesen werden. Daher gibt es für Anwendungen keine Standardmethode zum Lesen dieser Werte. Außerhalb der x86-Architektur müssen sich Entwickler immer noch auf einige komplexe Prozesse verlassen, um CPU-Variationen zu identifizieren. Beispielsweise erfordern in der Motorola 680x0-Serie, die nicht über die CPUID-Anweisung verfügt, einige angegebene Anweisungen zur Ausführung höhere Berechtigungen, die zur Unterscheidung verschiedener CPU-Serien verwendet werden können.
Der Opcode des CPUID-Befehls ist 0F A2. Für diesen Befehl sind keine Parameter erforderlich, da CPUID explizit das EAX-Register verwendet, um den primären Typ der zurückgegebenen Informationen zu bestimmen. Wenn beim Aufruf von CPUID EAX zunächst auf 0 gesetzt wird, wird der höchste vom Prozessor unterstützte EAX-Aufrufparameter im EAX-Register gespeichert. Um Informationen über eine erweiterte Funktion zu erhalten, sollte CPUID aufgerufen werden, wobei das höchstwertige Bit auf 1 gesetzt ist.
Grundsätzlich können Blattknoten bis zu 23 Stunden gültig sein, die Informationen einiger Blattknoten werden jedoch nicht in öffentlichen Dokumenten offengelegt und diese sind als „reserviert“ gekennzeichnet.
Die von CPUID zurückgegebenen Ergebnisse sind vielfältig. Am bekanntesten ist der Aufruf mit EAX=0, der die Hersteller-ID-Zeichenfolge des Prozessors und die höchsten grundlegenden Aufrufparameter zurückgibt. Es gibt mehrere bekannte ID-Strings für Prozessorhersteller, darunter „GenuineIntel“ für Intel, „AuthenticAMD“ für AMD usw.
Wenn EAX=1, werden die Schritt-, Modell- und Serieninformationen der CPU im EAX-Register zurückgegeben und die Feature-Flags werden in den EDX- bzw. ECX-Registern gespeichert. Dieser Aufruf zeigt auch viele wichtige Feature-Flags an, sodass Entwickler klar verstehen können, über welche Fähigkeiten der Prozessor verfügt. Einige Prozessoren unterstützen beispielsweise möglicherweise Virtualisierung, AES-Hardwarebeschleunigung und andere Funktionen, und ihre Auswirkungen auf die tägliche Datenverarbeitung sind offensichtlich.
Die von CPUID zurückgegebenen Informationen können Entwicklern dabei helfen, die Softwareleistung basierend auf bestimmten Hardwareeigenschaften zu optimieren, was für die Erstellung effizienter und zielgerichteter Anwendungen von entscheidender Bedeutung ist.
Ein Aufruf mit EAX=2 gibt Deskriptorinformationen zur Cache- und TLB-Funktionalität zurück. Diese Deskriptoren liefern eine Vielzahl von Informationen über den Prozessor-Cache und TLB, einschließlich Strukturgröße, Tags und entsprechende Korrelationen, was besonders wichtig für die Entwicklung von Anwendungen mit Leistungsoptimierung ist.
Mit der Popularisierung der Multi-Core-Verarbeitungstechnologie wächst die Nachfrage der Benutzer nach topologischer Intelligenz von Multi-Core-Prozessoren von Tag zu Tag. Die Aufrufe EAX=4 und EAX=8000'001Dh können verwendet werden, um die Cache-Hierarchie und Topologie des Prozessors anzuzeigen und detaillierte Informationen zu jedem Kern bereitzustellen. Diese Informationen sind entscheidend für Multithreading oder Anwendungen, die paralleles Rechnen erfordern.
Durch eine weitere Analyse der Sharing-Situation zwischen Cache- und Ausführungsthreads können Entwickler das Software-Layout optimieren, um die Latenz zu reduzieren und die Zugriffsgeschwindigkeit zu erhöhen.
Der CPUID-Befehl ist in der Tat ein wichtiges Werkzeug zur Entmystifizierung von Prozessoreigenschaften. Durch die Interpretation der von CPUID zurückgegebenen Informationen können Entwickler die Fähigkeiten des Prozessors voll ausnutzen, um die Softwareleistung zu verbessern. Werden zukünftige Prozessoren jedoch neue Funktionen einführen und wird sich die CPUID ändern, um sich an diese Funktionen anzupassen?