AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

CPUID

Ein Thema von EarthQuaker · begonnen am 13. Aug 2007 · letzter Beitrag vom 24. Aug 2007
Antwort Antwort
Seite 1 von 2  1 2      
EarthQuaker

Registriert seit: 14. Apr 2007
Ort: Pirna
50 Beiträge
 
Delphi 7 Enterprise
 
#1

CPUID

  Alt 13. Aug 2007, 23:20
Hallo euch zusammen... wollte mal fragen ob mir jemand mal bei einem problem helfen kann... und zwar geht es darum bestimmte bereiche auszulesen.. kleines bsp. ist als anhang... also geht darum de L1 - L2 Cache größe auszulesen. adressen kenne ich alle bzw. sieht man ja auch auf dem bild. aber die frage ist wie kann ich den text abfragen!? danke schonmal an euch allen dir mir da helfen können!!!
Miniaturansicht angehängter Grafiken
cpuid_05-06_174.jpg  
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: CPUID

  Alt 13. Aug 2007, 23:32
Was für einen Text meinst du? Das ist doch nur die Dekodierung des EDX Wertes anhand des Inhalts und unter Beachtung der Dokumentation. Was meinst du in so fern genau?

Anscheinend kennst du es noch nicht, von daher: AMD CPUID Specification
  Mit Zitat antworten Zitat
EarthQuaker

Registriert seit: 14. Apr 2007
Ort: Pirna
50 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: CPUID

  Alt 14. Aug 2007, 01:31
das weis ich ja aber es geht dies zu dekodieren.. also z.b.

auf dem bild die 1024 L2 Cache... würde gerne nur die werte auslesen also jeweils die Level Cache größe

Delphi-Quellcode:
const
   ID_BIT   =   $200000;         // EFLAGS ID bit
type
   TL2CacheSize   = array[1..4] of Longint;

function L2CacheSize : TL2CacheSize; assembler; register;
asm
  PUSH EBX {Save affected register}
  PUSH EDI
  MOV EDI,EAX {@Resukt}
  MOV EAX,$80000006
  DW $A20F {CPUID Command}
  STOSD          {CPUID[1]}
  MOV EAX,EBX
  STOSD {CPUID[2]}
  MOV EAX,ECX
  STOSD {CPUID[3]}
  MOV EAX,EDX
  STOSD {CPUID[4]}
  POP EDI               {Restore registers}
  POP EBX
end;


procedure TDemoForm.GetButtonClick(Sender: TObject);
var
  CPUID : TL2CacheSize;
begin
     Label1.Caption := IntToStr(CPUID[3] shr 16 and $FFFF);
 end;


end.
also das gilt als beispiel ob es richtig ist keine ahnung aber vielleicht weis du jetzt was ich damit meine!!!!
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: CPUID

  Alt 14. Aug 2007, 07:45
Ich weiss nicht, wo das Problem liegt. Du holst dir die ganzen Werte in dein Array. Nun kannst du doch die Bits wie in der verlinkten Anleitung ausmaskieren und die jeweils erhaltenen Werte nach der Anleitung als richtige Cache Grössen ausgeben. Ich kapier wirklich nicht wo das Problem liegt.

Ein Beispiel hatte ich schonmal hier gepostet: L2 Cache Grösse ermitteln bei AMD & Intel

Beachte, das jeder Hersteller bei den CPUID Angaben zum Cache sein eigenes Süppchen kocht. Mit dem Beispiel wirst du den L1 Cache ergänzen können.
  Mit Zitat antworten Zitat
EarthQuaker

Registriert seit: 14. Apr 2007
Ort: Pirna
50 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: CPUID

  Alt 14. Aug 2007, 13:04
Und die mache ich des genau? dein bsp zeigt zwar schon was aber was z.b. mit dem rest dann? dumm gefragt.... könntest nen kleinen source hochladen.. wo z.b. L1-L2 Size, associativity, lines/tag, linesize dabei ist`? kenne mich da nämlcih ne wirklich so guddi aus mit dem array!

Bin ja auch kein Super progger... ander sind ne so guddi und andere sind halt besser und haben mehr erfahrung
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#6

Re: CPUID

  Alt 14. Aug 2007, 13:19
Zitat von EarthQuaker:
Und die mache ich des genau?
Befasse dich mit den logischen Operatoren AND, OR, SHR, SHL. Damit bekommst du alles raus, was du brauchst.

Ansonsten nutze fertiges: JEDI TCPUID Klasse
  Mit Zitat antworten Zitat
EarthQuaker

Registriert seit: 14. Apr 2007
Ort: Pirna
50 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: CPUID

  Alt 14. Aug 2007, 18:11
Danke dir... leider lassen sich die JEDI Komponenten nicht installieren. also wenn ich die install.bat ausführe komt ein fehler das er eine datei namens jediinstaller.exe nicht finden kann
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#8

Re: CPUID

  Alt 14. Aug 2007, 19:44
Ok, dann mache es doch selber. Du hast in dem Array nach dem Aufruf von CPUID die Inhalte der Register EAX, EBX, ECX und EDX. In der oben verlinkten Dokumentation findest du zu jedem CPUID Aufruf die entsprechende Dokumentation der Bits.

Ok, nun zu dem auslösen der Bitinformationen.

Beispiel: Im Register EAX steht eine Information in den Bits 14 bis 17 - also 4 Bits (ein Nibble). Diesen Wert willst du nun erhalten, dazu gehst du wie folgt vor:

Du schiebst (english: shift) die Bits runter zu Bit 0, also 14x schieben. Dies kannst du mit dem SHR (shift right) Befehl erledigen. Wenn du also den Wert mit shr 14 um 14 Bits geschoben hast, dann stehen die ehemals Bit 14 bis Bit 17 an Stelle von Bit 0 bis 3 (da wir die ja runtergeschoben haben). Danach sind die Bits 18 bis 32 auch noch vorhanden und mit runtergerutscht und liegen nun auf Bit 4 bis 18. Diese wollen wir aber nicht haben und von daher maskieren wir diese aus. Dazu dient uns eine logische UND Operation. Dabei wird der Wert mit AND und der Maske verarbeitet, wobei die Maske an den Bits eine 1 enthalten muss, wo das vorhandene Bit unverändert bleiben soll und eine 0 an den Bits, welche ausgeblendet (auf 0 gesetzt) werden sollen. Für unser Beispiel würde sich somit eine Maske ergeben, welche Bit 0 bis 3 auf 1 gesetzt hat und alle restlichen Bits auf 0. Diese binäre Schreibweise in Hexadezimalschreibweise ergibt $f. Also mit AND $f arbeiten und du hast im Endeffekt direkt Bit 14 bis 17 nun in deiner Variable:

Delphi-Quellcode:
var
  lDWORD: LongWord;
begin
  lDWORD := Random(MaxInt);

  lDWORD := lDWORD shr 14; // runterschieben um 14 Bits
  lDWORD := lDWORD and $f; // auskommentieren der anderen Bits ab Bit 4

  ShowMessage(Format('bit 14 bis 17 enthielten: %d', [lDWORD]));
end;
oder einzeilig:  lDWORD := ( lDWORD shr 14 ) and $f; Ich denke mal, damit kannst du es probieren (und höchstwahrscheinlich auch schaffen) die Daten zu ermitteln. Probiere es und bei Problemen melde dich hier.
  Mit Zitat antworten Zitat
EarthQuaker

Registriert seit: 14. Apr 2007
Ort: Pirna
50 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: CPUID

  Alt 14. Aug 2007, 20:14
Also irgendwie Stelle ich mich grade zu dumm an keien ahnung wieso aber grade ist es so.. kannst eventuell etwas für den L2 fertig machen? geht des? währe dir damit sehr verbunden... danke schonmal
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#10

Re: CPUID

  Alt 14. Aug 2007, 20:50
Zitat von EarthQuaker:
Also irgendwie Stelle ich mich grade zu dumm an keien ahnung wieso aber grade ist es so..
Ich stell mich auch gerade an - von daher nein. Grundlegend die Berechnung der L2 Grösse ist in dem o.g. Link schon zu finden. Das anpassen bzw. ermitteln der anderen Informationen habe ich beschrieben. Und falls der Groschen heute noch nicht fällt, morgen nochmal lesen und probieren. Probier es einfach schrittweise. Wenn du dabei dann auf Probleme stösst, helfen wir dir gerne hier weiter.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz