CPUID -> CPU MODEL ID
-
Hi Leutz, hab ein kleines Problem!
Schreibe gerade für ein Unix-basiertes System ein C/C++-Prog in dem ich mittels Inline-Assembler und der Funktion CPUID eben die CPU-Informationen auslese. Habe jetzt keine programmiertechnische Frage, weil das prog an sich einwandfrei läuft, nur beid er Verarbeitung der Informationen stellt sich ein Problem:
- Welcher Prozessor hat welche CPU MODEL ID?
- Welcher Prozessor hat welche CPU FAMILY ID?Zu zweiterem habe ich schonmal was gefunden, aber ned viel und ich weiss auch ned, obs richtig is:
Family Id Cpu
4: 486, Am5x86, Cx586
5: Pentium, Nx586, Cx6x86, K5/K6, C6, mP6
6: PentiumPro / II / III, CxMII / MIII, Athlon, C3
F: Pentium 4
Also erstens is diese Aufzählung noch ned ganz vollständig und zweitens weiss ich wie gesagt ned obs stimmt.Sollte jemand irgendwie wissen, wo ich sowas finden kann, oder zufällig selbst über diverse Fachkenntnisse verfügen, bitte posten!
Danke!
Gruß mbP.S.: Die Sache mit der CPU MODEL ID is mir eigentlich wichtiger...nur so als Randbemerkung...;)...Danke
-
Bei Intel gibt's sogenannte "Specification updates" für jeden Prozessor, da stehen sämtliche CPUID-Werte für die jeweilige Familie drin (inklusive Stepping-Bezeichnung).
Wenn du's nicht ganz so genau haben willst, würd ich mal den entsprechenden Code im Linux Kernel anschauen, dort wird so ziemlich alles erkannt, was es gibt.
-
Ringding schrieb:
Bei Intel gibt's sogenannte "Specification updates" für jeden Prozessor, da stehen sämtliche CPUID-Werte für die jeweilige Familie drin (inklusive Stepping-Bezeichnung).
Wenn du's nicht ganz so genau haben willst, würd ich mal den entsprechenden Code im Linux Kernel anschauen, dort wird so ziemlich alles erkannt, was es gibt.
ok...ich hab das nu ma ausprobiert bei intel auf der seite und geschaut, ob ich diese komischen "Specification updates" finde...das doofe daran is nur:
für viele cpus is da tatsächlich was zu finden, aber leider eben ned für alle..:(
ausserdem fehlen dann immernoch die fpus anderer hersteller...danke trotzdem für den tipp...
zu tipp 2:
ich hab leider kein linux vorrätig, dementsprechend auch keinen kernel...und allgemein kenn ich mich mim linux ned so aus. wo bekomm ich also nen entsprechenden kernel her, bzw. hat jemand gerade die sources dazu rumliegen und kann mir das zur verfügung stellen, bzw. die entsprechenden code-stellen extrahieren??danke
gruß
mb
-
-
http://www.visotech.at/~sr/linux/i386/
Schau in kernel/cpu/common.c
-
intel hat nen doc mit Nr 24161825 "Using CPUID"
das aktuelle ist http://www.intel.com/design/xeon/applnots/24161827.pdf
-
Schau mal hier:
http://www.sandpile.org/ia32/cpuid.htmMein Versuch:
http://mastercpp.bei.t-online.de/aci-20040806.tar.gz
-
@ mastercpp:
Also der erste link war wirklich spitze...danke
Hab mir auch ma deine sourcen angeschaut. Die schaun auch ned schlecht aus, a bissl anders als ich des gemacht habe, aber warum auch ned.nur eine frage bleibt noch:
wie unterscheide ich bspw. nen Celeron von nem PII / PIII oder aber nen Athlon von nem Duron?? (wobei zweiteres wie ich gerade sehe des kleiner problem scheint)wenn da noch jemand nen heissen tipp hätte wäre ich überglücklich.
danke schonmal bis hier her...ihr seid echt gut!
dank auch an b7f7...bin noch über der auswertung is aber interessant
und dank an ringding sowie sgt. nukem für die kernel-infogruß
mb
-
Über die Sache mit Celeron und Pentium II habe ich mir auch Gedanken gemacht. Im level eax=1 gibt es in den Bits 0 bis 7 eine "Brand ID", die einem sagt, ob die CPU eine Light- oder Mobile-Version ist. Außerdem kann man mit deren Hilfe diese "Geschwindigkeitsangaben" bei dem Athlon 64 herausfinden. Ich bin da gerade am Implementieren, hab aber noch ein paar kleine Probs mit eben diesen Athlon 64ern.
Da ich aber (noch) kein Celeron oder Athlon64 zum testen hab, konzentrieren sich meine Bemühungen momentan eher darauf den Cache und die Features auch in 'ne Datei zu packen.
Außerdem - fällt mir gerade auf - muss ich ein paar Sachen mal wieder updaten.
Hmmm... und das wo ich doch eigendlich keine Zeit habe...
-
ja da haste schonma was ganz gutes genannt, habe mich nämlich inner zwischenzeit auch nochma a bissl belesen und folgendes herausgefunden:
die sog. "brand id" is schonmal ganz praktisch, die sagt nämlich noch a bissl mehr aus, als nur obs ein light- bzw. mobile-cpu is. die gibts aber erst ab prozessoren mit Modell-ID 8. alles was vorher war kennt diese "brand id" nicht.
für mich insofern schlecht, als dass ich hauptsächlich auf gerade solchen "alten" kisten meine app laufen lassen soll / muss / möchte...:((eine unterscheidung zw. celeron und pII bzw pIII soll auch aufgrund der cache-größen möglich sein. dazu müsste man aber wissen welcher proz welchen cache und wie groß hat(te), denn eine zuordnung wäre dann mittels der informationen aus funktion 02h (eax = 0x02) möglich, da steht ja der ganze zeugs drinne.
aber wie gesagt: dazu müsste man erst ma ne entsprechende zuordnung kennen / wissen...aber die fehlt mir bis jetzt nich gänzlich...:(gruß
mb