AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Aktuelle CPUFrequenz abfragen (SpeedStep)
Thema durchsuchen
Ansicht
Themen-Optionen

Aktuelle CPUFrequenz abfragen (SpeedStep)

Ein Thema von DelTurbo · begonnen am 10. Nov 2015 · letzter Beitrag vom 15. Nov 2015
Antwort Antwort
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.237 Beiträge
 
Delphi 2007 Architect
 
#1

Aktuelle CPUFrequenz abfragen (SpeedStep)

  Alt 10. Nov 2015, 11:38
Hallo,
ich möchte gerne die Aktuelle CPU Frequenz abfragen. Aber alle Demos die ich gefunden habe zeigen mir nur 4Ghz an obwohl die CPU ohne last auf 0.8Ghz läuft.

Wie kann man die wirklich aktuelle Frequenz abfragen?

Danke im Voraus
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.087 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Aktuelle CPUFrequenz abfragen (SpeedStep)

  Alt 10. Nov 2015, 13:03
Ich mache das so:

Delphi-Quellcode:
FUNCTION TimeStamp:Int64;
asm
   rdtsc
   {$IFDEF CPUX64}
   shl rdx,32
   or rax,rdx
   {$ENDIF}
end;
Delphi-Quellcode:
FUNCTION GetTimeStampFrequency:Int64;
var OldPriority:Word; Q0,Q1,Qf,Ts0,Ts1:Int64; Seconds:Extended;
    PaMask,SaMask,TaMask:NativeUInt;
begin
   // Thread nur auf einer CPU ausführen
   GetProcessAffinityMask(GetCurrentProcess,PaMask,SaMask);
   if PaMask<>0 then begin
      TaMask:=1;
      while TaMask and PaMask=0 do TaMask:=TaMask shl 1;
      SetThreadAffinityMask(GetCurrentThread,TaMask);
   end;
   // Priorität des Threads hochsetzen
   OldPriority:=GetThreadPriority(GetCurrentThread);
   SetThreadPriority(GetCurrentThread,THREAD_PRIORITY_TIME_CRITICAL);
   // QPC- und TimeStamp-Ticks für 10 ms holen
   QueryPerformanceCounter(Q0);
   Ts0:=TimeStamp;
   Sleep(10);
   Ts1:=TimeStamp;
   QueryPerformanceCounter(Q1);
   // Anhand QPF die TimeStamp-Frequenz ermitteln
   QueryPerformanceFrequency(Qf);
   Seconds:=(Q1-Q0)/Qf;
   Result:=Trunc((Ts1-Ts0)/Seconds+0.5); // Ticks/s
   // Priorität des Threads auf alten Wert stellen und Thread für alle
   // CPUs freigeben
   SetThreadPriority(GetCurrentThread,OldPriority);
   if PaMask<>0 then SetThreadAffinityMask(GetCurrentThread,PaMask);
end;
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.237 Beiträge
 
Delphi 2007 Architect
 
#3

AW: Aktuelle CPUFrequenz abfragen (SpeedStep)

  Alt 10. Nov 2015, 14:37
Klappt leider nicht. Egal ob mit Last oder ohne. Die Werte sind schon etwas komig.
Abgefragt mit einem Timer alle 500ms. Getestet auf einem Laptop mit Intel Core2(Duo) P8600.

Ohne Last. (0,8Ghz)
312738611
241239801
266993435
2393030897
2393232643
2393188605
2393225644
2393234530

Mit Last. (2,5Ghz)
137983889
2393447349
2393455115
2393582694
304749688
2393445973
122108721
183223288
90529087
2393630273

Gruß
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.213 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Aktuelle CPUFrequenz abfragen (SpeedStep)

  Alt 10. Nov 2015, 19:11
Es gibt nicht (mehr) die aktuelle CPU-Geschwindigkeit. Jeder Kern kann unterschiedlich getaktet sein.
Ebenfalls wird dein Programm bei einer Messung (wenn du ihn nicht auf einen kern bindest) wild zwischen den Kernen hin und her "geworfen" was die Ausführung betrifft.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#5

AW: Aktuelle CPUFrequenz abfragen (SpeedStep)

  Alt 10. Nov 2015, 19:56
Keine Ahnung, ob das hilft, aber ich verwende in Win7 das Gadget CPU-Meter, das mir die Auslastung aller Kerne sowie den verwendeten RAM anzeigt. Ob die Anzeige dieses Gadgets korrekt ist, vermag ich nicht wirklich zu beurteilen. Zumindest stimmt die Gadget-Anzeige in etwa mit der Anzeige im Ressourcenmonitor überein.

Immerhin zeigt die Existenz dieses Gadgets, daß es irgendwie gehen muß
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.683 Beiträge
 
Delphi 5 Professional
 
#6

AW: Aktuelle CPUFrequenz abfragen (SpeedStep)

  Alt 10. Nov 2015, 20:08
Eine ganz simple Variante ist, die Klasse Win32_Processor via WMI zu befragen (Class property CurrentClockSpeed). Aber wie bereits richtig gesagt wurde, gibt das nur den Takt eines Kerns an, der nicht notwendigerweise mit dem Takt der anderen Kerne übereinstimmen muss. Daher fällt das eher in die Kategorie "CPU-Frequenz auslesen für Arme" .

MfG Dalai
  Mit Zitat antworten Zitat
Antwort Antwort


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:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz