Erstmal, Sorry für den Bluescreen. Ist halt für Core Prozessoren.
Wobei, verstehen kann ich auch das nicht. Das Programm prüft erst ob die CPUID unterstützt wird, wenn nicht bricht es ab.
Wenn CPUID unterstützt wird, dann wird auf den Vendor geprüft, ist dieser nicht GENUEINTEL wird das Programm abgebrochen.
Beim AMD Duron sollte dort eigentlich AUTENTICAMD stehen.
Vielleicht liegt es am statischen Einbinden der
DLL, wobei, das sollte eigentlich auch nix machen, das vor der Überprüfung auf den Prozzessor keine
DLL Aufrufe erfolgen.
Wie dem auch sei, ich habe, um der Sache auf den Grund zu kommen:
1. Eure Tips beachtet, shl 32 müsste übrigens richtig sein, was bin ich für ein Depp.
2. Ich habe die Ausgaben im Memo erweitert.
3. Nun funktioniert es.
Ich habe nun folgendes gemacht:
Delphi-Quellcode:
type
UInt64 = packed record
Lo, Hi : DWord;
end;
.
.
.
// Realtime Counter abfragen und merken
Rdtsc(EAX,EDX);
UInt64(T_Count).Lo := EAX;
UInt64(T_Count).Hi := EDX;
// IA32_APERF_MSR abfragen und merken
Rdmsr(IA32_APERF_MSR,EAX,EDX);
UInt64(A_Count).Lo := EAX;
UInt64(A_Count).Hi := EDX;
// IA32_MPERF_MSR abfragen und merken
Rdmsr(IA32_MPERF_MSR,EAX,EDX);
UInt64(M_Count).Lo := EAX;
UInt64(M_Count).Hi := EDX;
//Warten ohne CPU-Last, die Genauigkeit steigt mit steigender Wartezeit
Sleep(250);
// Performance Counter und Delta berechnen
QueryPerformanceCounter(P_Delta);
P_Delta := P_Delta-P_Count;
// Realtime Counter abfragen und Delta berechnen
Rdtsc(EAX,EDX);
UInt64(T_Delta).Lo := EAX;
UInt64(T_Delta).Hi := EDX;
T_Delta := T_Delta-T_Count;
// IA32_APERF_MSR abfragen und Delta berechnen
Rdmsr(IA32_APERF_MSR,EAX,EDX);
UInt64(A_Delta).Lo := EAX;
UInt64(A_Delta).Hi := EDX;
A_Delta := A_Delta - A_Count;
// IA32_MPERF_MSR abfragen und Delta berechnen
Rdmsr(IA32_MPERF_MSR,EAX,EDX);
UInt64(M_Delta).Lo := EAX;
UInt64(M_Delta).Hi := EDX;
M_Delta := M_Delta - M_Count;
.
.
.
Die Ausgabe sieht nun so aus:
T_Delta : 499578708 T_Count : 443978902840440
M_Delta : 7999140 M_Count : 75242284529760
A_Delta : 3998292 A_Count : 47422740994605
P_Delta : 894070 P_Count : 794571775763
Nomineller Prozessortakt : 2000
Aktueller Prozessortakt : 1000
T_Delta : 499655388 T_Count : 443980903020900
M_Delta : 7133940 M_Count : 75242391276468
A_Delta : 3565674 A_Count : 47422794368151
P_Delta : 894208 P_Count : 794575355381
Nomineller Prozessortakt : 2000
Aktueller Prozessortakt : 1000
T_Delta : 499559364 T_Count : 443982903294864
M_Delta : 22331856 M_Count : 75242513536524
A_Delta : 11165232 A_Count : 47422855498137
P_Delta : 894036 P_Count : 794578935166
Nomineller Prozessortakt : 2000
Aktueller Prozessortakt : 1000
Danke für die Hilfe.