Autor Beitrag
Kurzer_18
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44

WinXP Pro SP2, WinVista x32
Delphi 7 Enterprise
BeitragVerfasst: So 05.08.07 23:54 
Hallo.... suche jemanden der sich mit den CPU Instructionen wie z.b. MMX SSE EMT64 auskennt.. ich währe sehr verbundenn wen mir da einer helfen könnte bzw. jemand weis wie man z.b. des x86-64 auslesen kann... alle andere funktionieren wie z.b. halt MMX oder SSE und so.. aber mit x86-64 habe ich so bissel probleme


Moderiert von user profile iconGausi: Topic aus Windows API verschoben am Mo 06.08.2007 um 20:00
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mo 06.08.07 19:45 
Bevor Du von einer CPU verstanden wirst, solltest Du es mit dem Standard-Werk für Sprache von Herrn Konrad D. versuchen.

Ferner sollte eine Suche nach 3DNow!, MMX, SSE(1/2/3) genug Tutorials im Internet finden. Ohne ein spezifisches Problem kann man relativ wenig zu sagen, da die Befehlsliste dieser Erweiterungen relativ umfangreich ist.

Außerdem: Was hat MMX, SSE und 3DNow mit den 64-Bit-Erweiterungen (AMD64 und IA64) heutiger CPUs zu tun? Bevor Du über x86 hinaus gehst, solltest Du mit dem reinen x86-Befehlssatz sattelfest sein.

P.S.: Man kann auch mit FPU-Befehlen Leute mit MMX und SSE problemlos schlagen :P

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Kurzer_18 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44

WinXP Pro SP2, WinVista x32
Delphi 7 Enterprise
BeitragVerfasst: Mo 06.08.07 23:12 
@ BenBE

Es geht mir nur darum was ich machen muss. wie z.b.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
function IsMMX: Boolean;
asm
  PUSH    EBX
  PUSHFD                       // Erweiterte Flags holen
  POP     EAX                  // In EAX speichern
  MOV     ECX, EAX             // In ECX speichern
  XOR     EAX, $00200000       // Bit 21 negieren
  PUSH    EAX
  POPFD
  PUSHFD                       // Erweiterte Flags holen
  POP     EAX                  // In EAX speichern
  XOR     EAX, ECX             // Wenn sich BIT 21 schreiben
  JE      @@NoMMX              // Der Befehl CPUID wird
  MOV     EAX, $01             // Feature Flags anfragen
  DB      $0F,$A2              // $0F, $A2 CPUID Befehl
  XOR     EAX, EAX
  TEST    EDX, $800000         // MMX ist vorhanden wenn Bit 23 gesetzt ist
  JZ      @@NoMMX
  MOV     EAX, 1               // True
@@NoMMX:
  POP     EBX
end;


ist ja die reine abfrage ob MMX verfügbar ist oder nicht nur jetzt geht es mir darum zu überprüfen ob "bit 29 (LM) AA-64, Long Mode" verfügbar ist.. Also die extended level 8000_0001h.

die standard level 0000_0001h ist kein problem nur geht es mir jetzt um die extended level 8000_0001h. vielleicht hast du da ja eine idee. bzw. nen keines bsp.

Also:
Kein Problem ist: Basic EDX 0000_0001h und Basic ECX 0000_0001h.

Problem ist: Extended EDX 8000_0001h und Extended EDX 8000_0001h.

Moderiert von user profile iconTino: Delphi-Tags hinzugefügt.
Einloggen, um Attachments anzusehen!
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: Mo 06.08.07 23:53 
Die erweiterte Funktion 8000 0001 muss in das EAX Register und das Ergebniss bekommst du in EDX und dort ist dann das Bit 29 gesetzt.

ausblenden Delphi-Quelltext
1:
2:
MOV EAX, $80000001 // Feature Flags anfragen
DB $0F,$A2 // $0F, $A2 CPUID Befehl


Allerdings steht hier, dass die erweiterten Befehle erst ab dem P4 verfügbar sind.

Es gibt aber von Intel eine sehr (wenn nicht sogar zu) ausführliche Doku zu dem CPUID Befehl aber ich finde den Link gerade nicht.

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
Kurzer_18 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44

WinXP Pro SP2, WinVista x32
Delphi 7 Enterprise
BeitragVerfasst: Di 07.08.07 00:18 
@ Lossy eX

Danke. aber das habe ich schnmal versucht und klappt nicht ganz so wie es soll.. auf nem AMD64 sollte es doch schon möglich sein da dieser ja auch den befehlssatz AA64LM besitzt und laut www.sandpile.org/ia32/cpuid.htm sollte es ja auch möglich sein. nur klappt es nicht so wie ich das will.. die Extended ECX klappt inzwischen wie ich mitbekommen habe. aber die EDX nicht. vielleicht hat ja auch einer einen kleinen source.

habe meine Unit mal als anhang dran gehängt.
Einloggen, um Attachments anzusehen!
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Di 07.08.07 00:54 
Bei meinen Experimenten mit den Zusatzfunktionen auslesen aktueller Prozessoren ist mir aufgefallen, dass einige Flags zwischen Intel und AMD verschieden zu interpretieren sind. Dies ist insbesondere für die Extended Level Abfragen der Fall.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Kurzer_18 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44

WinXP Pro SP2, WinVista x32
Delphi 7 Enterprise
BeitragVerfasst: Di 07.08.07 01:10 
@ BenBE

Stimmt aber heutzutage gibt es doch immer eine möglichkeit ^^ habe mich nochmal ran gesetzt und de frage ist ob es so geht oder eher nicht ich denke eher es sind immernoch irgendwie probleme dabei weil de Extended gehen nicht wirklich aber zum test habsch des einfach man mit drann gehangen des tool und de unit dazu vielleicht findet ja jemand den fehler.
Einloggen, um Attachments anzusehen!
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Di 07.08.07 10:22 
In Bezug auf die CPUID-Befehlsausführung schau Dir mal die Function ExecCPUID in der Unit OHWProcessors.pas an.

Die klappt nämlich problemlos mit allen Levels; Einzig die CPUInfo-Unit ist noch nicht ganz korrekt (da sind genug Fehler noch drin(, für die Basic-Infos stimmt's aber IIRC.

Ach ja: Dein Programm kann vom Source her wesentlich optimiert werden, wenn Du nicht für jedes Flag gleich wieder die gesamten CPU-Infos auslesen würdest. Ansonsten: Netter Spaghetti-Source :mrgreen:

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Kurzer_18 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44

WinXP Pro SP2, WinVista x32
Delphi 7 Enterprise
BeitragVerfasst: Di 07.08.07 13:27 
@ BenBE

Ja ich weis. habe mir auch schon mal alle omorphia runter geladen.. aber ich kann die noch nichtmal importieren also die komponenten hinzufügen da es guten frage bei einer datei habert :-D keine ahnung wieso das so ist

und ich werde mich nochmal ransetzen und des bissel optimieren :-)

Bin ja schließlich auch nicht der beste auf dem gebiet ^^


PS. Es sollen nicht gleich alle Featuren ausgelesen werden nur de interessantesten also wie bei CPU-Z sonst wird en bissel zu viel *g* und tool war nur ein test :-) um dahinter zu kommen ob de featuren abgefragt werden :-)
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Di 07.08.07 21:03 
Das macht man dann aber über Caching der Informationen, d.h. alles was mit einmal gelesen wird abfragen und dann wenn man's bereits abgefragt hat, nur noch die Auswertung zurückgeben. CPUID ist nämlich nicht grad schnell.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: Di 07.08.07 22:44 
behnbe: Natürlich sollte man das Ergebniss von CPUID cachen aber wenn man das mal im Gesamten betrachtet, dann landet das Ergebniss des Tests in einem Bool (sollte zu mindest immer so sein) weswegen die paar Codezeilen nicht wirklich viel ausmachen. Vor allem, da solch ein Code nur ein Mal beim Initialisieren aufgerufen wird. Da gibt es nun wirklich ganz andere Stellen auf die man sich konzentrieren sollte. ;)

kurzer: So gut kenne ich mich damit auch nicht aus. Und das was ich gesehen hatte sollte das in der Tat damit gehen. Es gibt eine AMD aber eine Seite mit einigen Dokumenten über 64 Bit. www.amd.com/us-en/Pr...252_739_7044,00.html
In dem Volume 3 steht auch etwas über CPUID. Aber nichts wirklich neues. Evtl hilft es ja doch irgendwie.

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.