Ich habe 2 Fragen: 1. Kann eine Maschine zwei oder mehr CPUs haben, die sich im Modell unterscheiden? 2. Wenn ich die CPUID-Anweisung aufruft, wird es anders sein, wenn verschiedene CPUs es ausführen? (Wenn die Antwort auf Fragen1 richtig ist, ist dies offensichtlich). Wenn ja, wie kann ich die Informationen aller CPUs durch CPUID-Anweisungen erhalten.
Dazu müssen Sie zwischen "Sockets" und "Kernen" unterscheiden, da der Begriff "Prozessor" mehrdeutig ist.
CPUID gibt Ihnen Informationen über den aktuellen Socket , dh den Socket, auf dem sich der Kern befindet, in dem der aktuelle Thread ausgeführt wird (der Thread, der den CPUID-Opcode enthält).
Verschiedene Sockets können leicht unterschiedliche Hardware enthalten, solange sie kompatibel sind, also:
Um Informationen über einen anderen Socket zu erhalten, müssen Sie sicherstellen, dass Ihr Prozess auf dem betreffenden Socket ausgeführt wird: Sie können Ihr Betriebssystem so bestellen, dass Ihr Thread auf einem bestimmten Socket ausgeführt wird, der jedoch betriebssystemspezifisch ist. Suchmaschine: Einstellen der Prozessor-Affinität für einen Thread in Ihrem Betriebssystem.
CPUID sagt Ihnen alles, was Sie über den aktuellen Socket wissen müssen, einschließlich der Anzahl der "logischen Prozessoren" : Die Anzahl der logischen Prozessoren entspricht der Anzahl von Kerne, wenn Ihre Kerne nicht hyperthreaded sind, wenn sie Hyper-Threading sind, dann ist die Anzahl der logischen Prozessoren doppelt.
Ja und nein. Es gibt viele Systeme, die mehrere Prozessoren und sehr unterschiedlich sind. Der Gameboy Advance, hat sowohl den armbasierten als auch den z80 basierten Gameboy (kann nicht beide gleichzeitig verwenden). aber die nds hat einen arm9 und arm7 (kann beide gleichzeitig benutzen). Das Omap, das Sie in einem Beagleboard finden würden, hat einen Arm und ein TI dsp (kann beide gleichzeitig benutzen). Ich nehme an, Sie sprachen über x86-Systeme. Die meisten Desktops sind nur ein x86. Ihre Maus und Tastatur und solche Dinge haben wahrscheinlich 8051s oder andere verschiedene Arten von Mikrocontrollern. Aber es ist Ihnen egal, weil dies nur USB-HID-Geräte oder CD-ROM-Laufwerke oder Festplatten sind. Sie können nicht wirklich auf den Prozessor zugreifen, so dass es egal ist, dass es auftaucht. Laptops und High-End-Server-Systeme und wahrscheinlich Dekstops haben bald einen zweiten Prozessor oder Computer drin, für den Laptop ist es wahrscheinlich ein Arm, deutlich weniger Strom, so dass das x86 im Standby-Modus ausgeschaltet werden kann, der Arm hält Dinge am Leben, Du weckst es auf, es kommt sehr schnell auf. Auf einem Server ist das andere System als kugelsicherer Watchdog, überwacht den Server, bietet Überwachung und einige Remote-Reset und andere Funktionen. Ebenso kann man bei diesem Prozessor nicht ankommen, also ist es egal, ob man nicht in einem CPUID Deal findet. Ein anderes ist Ihre Grafikkarte, Hunderte bis Tausende von GPUs. Sie können auf diese mit Ihren Programmen zugreifen, wie mit dem omap dsp, aber Sie führen keine allgemeine Verarbeitung durch, so dass die CPUID diese Information nicht erneut bereitstellen müsste.
Also ja und nein. Ihr Computersystem als Ganzes, einschließlich der Peripheriegeräte, weist viele verschiedene Prozessoren auf, aber die Verarbeitung für allgemeine Zwecke ist gewöhnlich ein einzelnes oder mehradriges System der gleichen Familie, die sich normalerweise auf demselben Chip befinden. Also muss CPUID nur wirklich diesen Core / diese Familie geben.
Ich nehme an, dass das Vorhandensein von cpuid in Ihrer Frage einen x86 / x64-Kontext bedeutet.
Ein Motherboard mit mehreren Sockeln (eigentlich BIOS) benötigt normalerweise alle installierten Prozessoren, um die gleichen CPU-Informationen zu melden, die genau gleich sind. Ich denke, es könnte möglich sein, Prozessoren zu haben, die architektonisch gleich sind, aber mit unterschiedlichen Frequenzen, aber dann müsste der Hersteller angeben, welche Kombinationen funktionieren und welche nicht und endlose E-Mails darüber beantworten, warum diese oder jene vermeintlich kompatible Kombination nicht funktioniert .