Heim >Backend-Entwicklung >C++ >Wie greife ich unter Linux mit der Anweisung „cpuid' auf CPU-Informationen zu?

Wie greife ich unter Linux mit der Anweisung „cpuid' auf CPU-Informationen zu?

Linda Hamilton
Linda HamiltonOriginal
2024-10-31 11:56:02989Durchsuche

How to Access CPU Information in Linux Using the `cpuid` Instruction?

Zugriff auf CPU-Informationen unter Linux mithilfe der cpuid-Anweisung

In dieser Frage möchte ein Entwickler mithilfe von a auf CPU-Informationen in einer Linux-Umgebung zugreifen Methode ähnlich der Funktion _cpuinfo() in der Windows-API. Der bereitgestellte Code versucht, Assembleranweisungen (cpuid) zu verwenden, um diese Informationen abzurufen, aber der Entwickler möchte die Notwendigkeit einer manuellen Assemblierung vermeiden.

Die Lösung liegt in der Verwendung der Header-Datei cpuid.h, die beim Kompilieren des Codes mit verfügbar ist GCC. Dieser Header deklariert zwei Funktionen:

<code class="c">unsigned int __get_cpuid_max(unsigned int __ext, unsigned int *__sig);
int __get_cpuid(unsigned int __level, unsigned int *__eax, unsigned int *__ebx, unsigned int *__ecx, unsigned int *__edx);</code>

Die Funktion __get_cpuid_max gibt den höchsten unterstützten Eingabewert für die cpuid-Anweisung zurück. Sie können __ext entweder als 0x0 für grundlegende Informationen oder als 0x8000000 für erweiterte Informationen angeben.

Die Funktion __get_cpuid ruft CPU-Informationen für eine angegebene Ebene ab und gibt die Daten in den Registern eax, ebx, ecx und edx zurück. Bei Erfolg wird ein Wert ungleich Null zurückgegeben, und Null, wenn die angeforderte Ebene nicht unterstützt wird.

Verwendungsbeispiel:

<code class="c">#include <stdio.h>
#include <cpuid.h>

int main() {
  unsigned int eax, ebx, ecx, edx;

  // Get maximum supported CPUID level
  unsigned int max_level = __get_cpuid_max(0x0, NULL);

  // Iterate over different CPUID levels
  for (unsigned int level = 0; level <= max_level; level++) {
    // Retrieve CPUID data for the current level
    __get_cpuid(level, &eax, &ebx, &ecx, &edx);

    printf("Level %u: EAX=%u, EBX=%u, ECX=%u, EDX=%u\n", level, eax, ebx, ecx, edx);
  }

  return 0;
}</code>

Das obige ist der detaillierte Inhalt vonWie greife ich unter Linux mit der Anweisung „cpuid' auf CPU-Informationen zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn