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 8 von 16   « Erste     678 910     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]
 
Daniel G
 
#71
  Alt 15. Jan 2006, 23:26
Zitat von Luckie:
Beim Start:
Zitat:
---------------------------
CPUiD 3.0
---------------------------
'' ist kein gültiger Integerwert.
---------------------------
OK
---------------------------
Und auch beim Klicken auf aktualisieren.
Hmm... Liegt wohl daran, dass ich den Try..except - Block komplett entfernt hab'.

Zitat von Luckie:
Desweiteren meint dein Programm, mein System läuft schon über fünf Stunden. Vor fünf Stunden war ich aber bei meiner Freundin.
Gegenfrage: Das ist nicht zufällig der Rechner mit diesem Problem, oder? Wenn ja, dann ist mein Programm unschuldig.

Zitat von Luckie:
Unter RAM, BIOS, CPU Flags (AMD) ist auch alles leer.
Liegt an der oberen Exception.

Zitat von Luckie:
Und die scrollenden Kredits würde ich erst starten, wenn der Tab ausgewählt wird, sonst landet man nämlich immer mitten drinne und das ist etwas blöd.
Jupp, ich weiß. Über solche Kleinigkeiten wollte ich mich aber erst kümmern, wenns rund läuft.
  Mit Zitat antworten Zitat
Daniel G
 
#72
  Alt 15. Jan 2006, 23:55
Hmm... fassen wir mal zusammen:

Bei 4 Leuten (2 von silenthardware.de) gibt es dieses Problem mit der negativen bzw. zu geringen Taktfrequenz. Alle 4 nutzen einen P4, von 2 habe ich die Bestätigung, dass es sich um Prozessoren mit Hyperthreading handelt. Daran wird es wohl liegen.

Mal sehen, wie ich dieses Problem umschiffen kann. Hagen, weißt du 'ne Lösung? Ich nutze ja deine Prozedur, von daher...

//Edit

Zitat von MagicAndre1981:
Zitat von Daniel G:
Jupp, hab' ich auch, daran liegts also nicht. Merkwürdig... Und im BIOS wirds auch korrekt angezeigt, ja?
Ja, aber die SMBIOS-Infos sind eh ungenau. Liegt wohl an ASUS, die da was verbockt haben.
Hmm, Schade. Dann wäre mir ein eigener Fehler lieber...
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#73
  Alt 15. Jan 2006, 23:56
Zitat von Daniel G:
Gegenfrage: Das ist nicht zufällig der Rechner mit diesem Problem, oder? Wenn ja, dann ist mein Programm unschuldig.
Doch das ist er, aber davon sollte GetTickCount nicht betroffen sein, da GetTickCount die Anzahl der Millisekinden angibt, die seit dem Systemstart vergangen sind.
Michael
  Mit Zitat antworten Zitat
Daniel G
 
#74
  Alt 15. Jan 2006, 23:59
Zitat von Luckie:
Doch das ist er, aber davon sollte GetTickCount nicht betroffen sein, da GetTickCount die Anzahl der Millisekinden angibt, die seit dem Systemstart vergangen sind.
Und wenn nun GetTickCount auch aus dem Takt geraten ist? Weil anders kann ich mir das nicht erkären...
  Mit Zitat antworten Zitat
scp

 
Delphi 7 Personal
 
#75
  Alt 16. Jan 2006, 00:15
Zitat von MagicAndre1981:
Zitat von Daniel G:
Jupp, hab' ich auch, daran liegts also nicht. Merkwürdig... Und im BIOS wirds auch korrekt angezeigt, ja?
Ja, aber die SMBIOS-Infos sind eh ungenau. Liegt wohl an ASUS, die da was verbockt haben.
Das war vielleicht vor ein paar Jahren, mittlerweile sind sie recht genau, alle bei mir getesteten Systeme lieferten ordentliche Werte. Nur bei [System Information], [Base Board (or Module) Information], [System Enclosure or Chassis Information] und gelegentlich auch [Port Connector Information] gibts Lücken, diese sind aber auch nicht so wichtig. Bei den ersten dreien wird meist für OEMs Platz gelassen.
  Mit Zitat antworten Zitat
Basilikum

 
Delphi 7 Professional
 
#76
  Alt 16. Jan 2006, 00:33
Zitat von Daniel G:
Hmm... fassen wir mal zusammen:

Bei 4 Leuten (2 von silenthardware.de) gibt es dieses Problem mit der negativen bzw. zu geringen Taktfrequenz. Alle 4 nutzen einen P4, von 2 habe ich die Bestätigung, dass es sich um Prozessoren mit Hyperthreading handelt. Daran wird es wohl liegen.
dies hat vermutlich mit der Art und Weise zu tun, wie der/das HT-HAL die QueryPerformance(Frequency|Counter) implementiert....

da es mich nun doch auch wunder nimmt, ein Quick-n-Dirty-Ansatz zum Ermitteln der CPU-Clock-Rate...

funzt einwandfrei auf folgenden Systemen:

Pentium III 500 MHz, WinXP
Pentium IV 2.8 GHz (HT), WinXP
Pentium IV 3.0 GHz (HT), Win2k3
Dual Pentium II 350 MHz, WinNT4
Celeron 735 MHz, WinNT4
Pentium II 333 MHz, WinNT4

(Angabe stimmt jeweils mit CPU-Z überein)

// siehe übernächsten Post
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH
 
#77
  Alt 16. Jan 2006, 06:02
@Basilikum:

das was du da machst ist wieder eine Absolutmessung die ungenau sein wird. Nur diesesmal wird in der Wartschleife nicht per Sleep(x) X Millisekunden gewartet sondern eben PerformanceFrequency / 8 Takte lang gewartet.

Was passiert aber während dieser Schleife im restlichen Teil deines Rechners ? Dort laufen Interrupts, andere Processe, Kernel Task mit hohen Prioritäten ab. D.h. wenn deine Schleife PerformanceFrequency / 8 Takte dauern soll so wird sie dies niemals können da dein Code nich sicherstellen kann das aer der EINZIGSTE im gesammten System ist der zu diesem Meßzeitpunkt ausgeführt wird !

So wäre es richtiger

Delphi-Quellcode:

  C1 = RDTSC;
  C2 = PerformanceCounter;

  Sleep(x);

  C1 = RDTSC - C1;
  C2 = PerformanceCounter - C2;
  
  F = C2 / PerformanceFrequency * C1;
Egal was nun alles im Sleep(x) passiert und wie lange diese Wartezeit dauert wir benutzen zwei zueinandner absolute Hardwarecounter. Den RDTSC der die Anzahl der Takte der CPU ermittelt und den "Maßstab" über den PeformanceCounter bei dem wir über PerformanceFrequency auch dessen Auflösung ermitteln können.

Das Verfahren ist als echt simpel. Du hast zwei Uhren. Die eine Uhr misst in einer uns bekannten Genauigkeit, zb. 1 Sekunde. Die zweite Uhr können wir ablesen aber wir wissen nicht ihre Auflösung/Genauigkeit. Wir starten nun beide Stopuhren synchron, warten eine gewissen Zeit (mindestens > Auflösung unserer Refernezuhr, also hier > 1 Sekunde). Wir wissen dann also das die Zweite Uhr zb. in 10 Sekunden exakt 500 Schritte weitergezählt hat. Also dividieren wir 500 / 10 Sekunden und kommen so auf den Sekundentakt der zweiten Uhr von 50, eg. 50 Hz.

In diesem Moment ist es nun egal ob wir 10 Sekunden lang messen oder 100 Sekunden oder nur Millisekunden lang. Wir sind also komplett unabhängig vom restlichen Betriebsystem oder anderer Sofwtare da wir ja beide "Uhren" in Hardware vorliegen haben.

Gruß Hagen
  Mit Zitat antworten Zitat
Basilikum

 
Delphi 7 Professional
 
#78
  Alt 16. Jan 2006, 08:27
@Hagen:
ich sehe gerade, zur späten Stunde haben meine Finger nicht das implementiert, was ich mir im Kopf vorgestellt hatte.........

eigentlich wollte ich es so (MinPerformanceCounter habe ich nächtens etwas übereilig wegoptimiert):
Delphi-Quellcode:
Var
  PerformanceFrequency,
  ClockCounter1,
  ClockCounter2,
  PerformanceCounter1,
  PerformanceCounter2,
  MinPerformanceCounter : Int64;
begin
  SetThreadAffinityMask(GetCurrentThread(),1);

  QueryPerformanceFrequency(PerformanceFrequency);

  QueryPerformanceCounter(PerformanceCounter1);
  ClockCounter1:=RDTSC;

  MinPerformanceCounter:=PerformanceCounter1 + (PerformanceFrequency div 8);

  // hier könnte man noch diverse andere Dinge erledigen... Zeitverbrauch spielt keine Rolle - Messung würde sogar eher genauer

  Repeat
    QueryPerformanceCounter(PerformanceCounter2);
  Until (PerformanceCounter2 >= MinPerformanceCounter);

  ClockCounter2:=RDTSC;

  WriteLn((ClockCounter2 - ClockCounter1) / ((PerformanceCounter2 - PerformanceCounter1) / PerformanceFrequency) / 1000000000:1:4,' GHz');
end.
eigentlich deinem Vorgehen recht nahe, ausser dass ich die CPU während der Schlaufe künstlich beschäftigt halte (damit er nicht plötzlich aus langeweile irgend welche Pausen einlegt und nicht die volle Takt-Zahl gemessen wird)...

das einzige - jedoch unlösbare - Problem ist, dass man die beiden Operationen "RDTCS" und "QPC" nicht atomar durchführen kann... sobald sich ein anderer Thread zwischen diese beiden Operationen schiebt, entstehen Fehler...
  Mit Zitat antworten Zitat
Daniel G
 
#79
  Alt 16. Jan 2006, 14:24
Soo... Ich hab' mal deine obige Erweiterung eingebaut, Basilikum. Ich hoffe mal, dass es jetzt keine Probleme mehr mit HT - Prozessoren gibt.
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

 
Delphi 2010 Professional
 
#80
  Alt 16. Jan 2006, 14:29
Hi,

Bei mir der Wert von meinem Prescott 640 nun korrekt mit ~3211,44 Mhz beziffert

Ansonsten scheinen die anderen Werte auch zu stimmen

mfG
mirage228
David F.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 8 von 16   « Erste     678 910     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 01:27 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