AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte CPUiD 3.0 - Ein kleines System - Diagnoseprogramm
Thema durchsuchen
Ansicht
Themen-Optionen

CPUiD 3.0 - Ein kleines System - Diagnoseprogramm

Ein Thema von Daniel G · begonnen am 15. Jul 2005 · letzter Beitrag vom 12. Jun 2008
Antwort Antwort
Seite 5 von 16   « Erste     345 6715     Letzte »    
Daniel G
Tach alle zusammen,

ich dachte mir, vielleicht würde euch dieses kleine Programm gefallen.

Was macht es:

"CPUiD 3.0" liefert euch Informationen zu eurem Prozessor, der in eurem System werkelt.
Derzeit werden ~400 Prozessoren erkannt, darunter auch einige Exoten von NSC oder SiS.


Außerdem zeigt euch dieses Programm noch Informationen zu den im System verwendeten Arbeitsspeicher und BIOS an, sowie einige allgemeine Systeminformationen, wie Betriebssystem, Vergangene Zeit seit Windowsstart u.v.m.


Hätte ich das alles alleine geschrieben, wäre ich vermutlich immer noch am Schreiben.

Deshalb vielen Dank an scp, der mir eine aktualisierte Version seiner Unit "CPUIDEx.pas" zu Verfügung gestellt hat.
Außerdem danke ich noch Nico für seine "BIOSHelp" - Unit, die mir als Grundlage für die neuen Features gedient hat.

Neuste Version:
CPUiD 3.0 (~668 kb)
Screenshot (~60 kb)

DBug - Version:
Falls ihr irgendwelche unerklärlichen Exceptions bekommt, solltet ihr die DBug - Version herunterladen und den Report hier anhängen oder mir per E-Mail schicken.
http://www.danielstools.de/downloads...D_3_0_DBug.exe (~756 kb)

____________________________________
************************************
Version 3.0.3
Datum: 26.01.2006
Changes:


(von mir)
* CPUiD ist jetzt bilingual: Deutsch und Englisch. Diese Sprachen können über das Einstellungenmenü verändert werden.
* Zahlreiche Fehler entfernt
+ "CPU - FLAGS" zum Report hinzugefügt


____________________________________
************************************
Version 3.0.1
Datum: 15.01.2006
Changes:


(von mir)
- Schwere Fehler behoben
____________________________________
************************************
Version 3.0.0
Datum: 13.01.2006
Changes:


(von scp)
* Verbessern der Cache - Erkennung


(von mir)
+ SMBIOS implementiert (Vielen Dank an NicoDE für seine Unit)
+ Daten zum Arbeitsspeicher unter Windows werden angezeigt
+ Es ist nicht mehr möglich, den Report als HTML - Datei zu speichern. Stattdessen wird er
als Plaintext gespeichert.
+ Das Logo des Herstellers wird, falls möglich, angezeigt
+ Das Programm verfügt jetzt über eine Toolleiste, die Zugriff auf einige Features bietet
+ Shortcuts
+ "Über..." - Tab hat jetzt eine scrollende Credits - Liste
+ Im "Über..." - Tab wird ein Logo angezeigt.
+ Die Betriebssystemversion wird angezeigt
+ Der Benutzer- und/oder Computername wird angezeigt (soweit verfügbar)
* Verbesserte CPU - Geschwindigkeitsmessung


Tja, wenn euch gerade langweilig ist, könnt ihr ja mal einen dezenten Blick darauf werfen. Ich wäre euch auf jedenfall für jede Art von Feedback dankbar.

so long,
Daniel

[Edit] Schlechtschreibfehler [/Edit]
 
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#41
  Alt 1. Jan 2006, 16:02
@Luckie :
ich habe es mehrmals messen lassen und es ist definitiv keine der üblichen Schwankungen ... bei diesem Programm wird immer mehr angezeigt.

EVEREST: 1808.46 MHz - 1808.58 MHz
Hagen: 1808.79 MHz - 1808.81 MHz
dieses: 1812,9998 MHz

(wobei es mich hier wundert, daß es keine Differenz gibt, denn rein technisch geht es ja nicht ohne ein kleine Abweichung)
  Mit Zitat antworten Zitat
stefan2005

 
Delphi 6 Personal
 
#42
  Alt 1. Jan 2006, 16:23
hi,
mein CPU wird zwar korrekt als "Athlon 64 X2 DualCore" erkannt, aber unter den AMD-Flags ist kein Häckchen bei "Dual-Core CPU"

mfg,
stefan
  Mit Zitat antworten Zitat
Benutzerbild von MagicAndre1981
MagicAndre1981

 
Delphi 7 Enterprise
 
#43
  Alt 1. Jan 2006, 17:32
Zitat von stefan2005:
mein CPU wird zwar korrekt als "Athlon 64 X2 DualCore" erkannt
Das ist der Brand-String, den die BIOS-Programmieren festgelegt haben (ab dem AthlonXP steht der String nicht mehr fest bei AMD-Prozzis)

Zitat von stefan2005:
, aber unter den AMD-Flags ist kein Häckchen bei "Dual-Core CPU"
weil sein Programm den Prozzi nicht kennt
André
  Mit Zitat antworten Zitat
Daniel G
 
#44
  Alt 1. Jan 2006, 20:24
Zitat von stefan2005:
hi,
mein CPU wird zwar korrekt als "Athlon 64 X2 DualCore" erkannt, aber unter den AMD-Flags ist kein Häckchen bei "Dual-Core CPU"
Dann liegt das daran, dass der Flag, der normalerweise gesetzt ist, in deinem Falle aus irgendeinem Grund nicht gesetzt ist. Entweder hat scp das falsch implementiert, AMD hat den Flag verändert oder aber man hat dich verarscht.


@himitsu: Ja, das ist mir auch aufgefallen. Ich kanns leider nicht mehr ändern.

Mal sehen, eine komplette Neuauflage wäre vielleicht eine gute Idee für das neue Jahr.

I'll keep you posted!
  Mit Zitat antworten Zitat
Ghostwalker

 
Delphi 10.3 Rio
 
#45
  Alt 1. Jan 2006, 22:13
Ok..im Anhang findest du die Daten, die Everest ausspuckt
Angehängte Dateien
Dateityp: txt cpu_192.txt (48,0 KB, 12x aufgerufen)
Uwe
  Mit Zitat antworten Zitat
Thebe

 
Delphi 6 Enterprise
 
#46
  Alt 3. Jan 2006, 10:35
Bei meinem Sockel 478 Northwood wird kein L2 Cache von deinem Programm erkannt, obwohl Everrest da 512 KB zu sehen vermag. Ich häng ma komplett die HTML Datei von CPUiD und die Infos die Everest bei CPU und CPUID ausschmeißt per Anhang an.

Schickes Programm btw

- Thebe
Angehängte Dateien
Dateityp: zip northwood_2_66ghz_cpuid_everest_156.zip (3,0 KB, 5x aufgerufen)
  Mit Zitat antworten Zitat
Daniel G
 
#47
  Alt 3. Jan 2006, 11:56
@ Ghostwalker & Thebe: Danke für eure Dateien, ich arbeite jetzt tatsächlich an einer kompletten Neuauflage. Diesmal übrigens mit der VCL.

@All: Die Sache mit der Geschwindigkeit geht mir nicht mehr aus dem Kopf. Ich benutze folgenden Code, allerdings nicht selbst geschrieben:

Delphi-Quellcode:
//Helping Function for "GetCPUSpeed"
function ActivateTimer: Int64;
asm
   push   eax
   push    edx
   db      0fh
   db      31h
   mov      [esp], eax
   mov      [esp+4], edx
   pop      eax
   pop      edx
end;

// From "CPUID for Delphi" by Ural Gunaydin
function GetCpuSpeed(msTime: DWORD): Double;
var
   llStart, llStop: Int64;
   dwStart: DWORD;
   timecaps: TTimeCaps;
   bf1, bf2, minErr, tErr,
   ratio, bestRatio, bestBf: Double;
begin
   result:= 0.0;
   if (timeGetDevCaps(@timecaps, sizeof(TTimeCaps)) <> TIMERR_NOERROR) then
   Exit;

   timeBeginPeriod(timecaps.wPeriodMax);
   dwStart:= timeGetTime;
   llStart:= ActivateTimer;
   while ((timeGetTime() - dwStart) < msTime) do
   begin
      //
   end;
   llStop:= ActivateTimer;
   timeEndPeriod(timecaps.wPeriodMax);
   result:= (llStop - llStart) / msTime;

   bf1:= 1000*50.00000;
   bf2:= 1000*66.66666;
   minErr:= result;

   ratio:= Round(result / bf1);
   bestRatio:= ratio;
   bestBf:= bf1;
   tErr:= (ratio * bf1) - result;
   if (tErr < minErr) then
   begin
      minErr:= tErr;
      bestRatio:= ratio;
      bestBf:= bf1;
   end;
   ratio:= ratio-1;
   tErr:= result - (ratio * bf1);
   if (tErr < minErr) then
   begin
      minErr:= tErr;
      bestRatio:= ratio;
      bestBf:= bf1;
   end;
   ratio:= Round(result / bf2);
   tErr:= (ratio * bf2) - result;
   if (tErr < minErr) then
   begin
      minErr:= tErr;
      bestRatio:= ratio;
      bestBf:= bf2;
   end;
   ratio:= ratio-1;
   tErr:= result - (ratio * bf2);
   if (tErr < minErr) then
   begin
      bestRatio:= ratio;
      bestBf:= bf2;
   end;
   result:= bestRatio * bestBf;
   //CpuInfo.CPUFreq:= result;
end;
Aufgerufen wird er mit:

something := Format('%.2f MHz', [GetCpuSpeed(1000) / 1000]); Erkennt ihr irgendeinen Stolperstein?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#48
  Alt 3. Jan 2006, 14:17
Was ich aber mal denken würde, ist daß in folgendem Code die Reinfolge der Timer nicht stimmt ... denn um die unterschiedlichen Start-/Endzeiten der einzelnen Timer zu vernachlässigen, müssen diese in der selben Reinfolge beendet werden, wie sie auch gestartet wurden.
(timeXXXPeriod und ActivateTimer direkt aufeinander folgend ... und timeGetTime innerhalb der Schleife)
Delphi-Quellcode:
timeBeginPeriod(timecaps.wPeriodMax); <<<
llStart:= ActivateTimer; <<<
dwStart:= timeGetTime;
while ((timeGetTime() - dwStart) < msTime) do
begin
   //
end;
timeEndPeriod(timecaps.wPeriodMax); <<<
llStop:= ActivateTimer; <<<
result:= (llStop - llStart) / msTime;


Dann ist dein ActivateTimer etwas umständlich geschrieben.
(was aber zu keiner Messverfälschung führen wird ... jedenfalls, wenn die Timer in der richtigen Reinfolge gestartet/beendet werden)
Denn du holst dir den TSC-Wert, lädst diesen in den Stack und holst ihn zurück.
Aber wenn du genau hinsiehst, dann wirst du merken, daß sich nach dem Aufruf von RDTSC (DW $310F) die Werte in EAX und EDX nicht verändern.

Du lädst also z.B. EAX per mov [esp], eax in den Stack und holst ihn dann vom Stack wieder per pop eax in EAX zurück ... also "sinnloses" Hinundhergeschiebe.

Es würde also Folgendes vollkommen ausreichen:
Delphi-Quellcode:
function ActivateTimer: Int64;
asm
   db 0fh
   db 31h
end;

Und dann kannte ich deine MultimediaTimerFunktionen (timeBeginPeriod, timeEndPeriod) noch nicht ... weiß einer, wie genau die sind?
Und ob die Intern auch gleichschnell arbeiten und an der selben Stelle die Zeit messen, denn dieses könnte auch noch Fehler in die Gesamtmessung bringen.
Eventuell solltest du es mal mit einem Timer versuchen, bei welchem man die selbe Funktion für den Begin und das Ende der Messung verwenden kann ... z.B. QueryPerformanceCounter.


Und natürlich kann auch ein Fehler in der anschließenden Berechnung sein ... wozu soll daß denn eigentlich diehnen ... ich vermute ja dahinter mal die Tatsache, daß sich der Wert bei mehreren Messungen nicht ändert, denn es wird ja immer ein paar kleine Unterschiede geben, schon alleine dadurch, daß es sich um kein RealTimeSystem beim PC handelt und wie Luckie nachfolgend schon sagt, sich auch leicht andere Prozesse einschleichen und den Wert etwas verändern können.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#49
  Alt 3. Jan 2006, 14:20
Vor der Messung sollte die Priorität des Prozess auf TIME_CRITICAL gesetzt werden und danach natürlich wieder zurück. Ich habe festgesttelt, dass dies bei CPUID wohl nicht passiert, zumindest zeigt der Taskmanager nichts an in dieser Richtung.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#50
  Alt 3. Jan 2006, 14:25
CPUID? ... du meinst wohl RDTSC (RealTimeCPUCounter)?

Und nein, da wird sowas nicht gemacht, der Befehl kopiert einfach nur den aktuellen Wert des RealTimeCPUCounter in EAX/EDX.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 5 von 16   « Erste     345 6715     Letzte »    


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 07:00 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