AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Zeitmessung mit dem RealTimeCounter
Thema durchsuchen
Ansicht
Themen-Optionen

Zeitmessung mit dem RealTimeCounter

Ein Thema von tb99de · begonnen am 14. Jan 2004 · letzter Beitrag vom 22. Jan 2004
Antwort Antwort
Seite 1 von 2  1 2      
tb99de

Registriert seit: 14. Jan 2004
17 Beiträge
 
#1

Zeitmessung mit dem RealTimeCounter

  Alt 14. Jan 2004, 11:33
Hallo,

die Zeitmessung mit dem RealTimeCounter (http://www.delphipraxis.net/internal...ect.php?t=8102) funktioniert leider nicht unter Windows XP und Intel-CPU's mit Hyperthrading Technologie.

Die Funktion QueryPerformancecounter liefert falsche Ergebnisse (je nach CPU-Auslastung).

Kennt jemand eine Lösung ?

tb99de
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Titel: Zeitmessung mit dem RealTimeCounter

  Alt 14. Jan 2004, 11:40
Hi,

vorweg: Das Titel: in Deinem Titel ist wohl recht überflüssig. Nimm das doch mal raus

Anschließend suche hier mal nach Hier im Forum suchenGetThreadTimes

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
tb99de

Registriert seit: 14. Jan 2004
17 Beiträge
 
#3

Re: Titel: Zeitmessung mit dem RealTimeCounter

  Alt 14. Jan 2004, 12:01
ich habe die Überschrift einfach aus eurer Code-Library kopiert.

Statt auf die Suchfunktion zu Verweisen solltet ihr vieleicht eurer Code-Library überarbeiten.

tb99de
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#4

Re: Titel: Zeitmessung mit dem RealTimeCounter

  Alt 14. Jan 2004, 12:26
Hallo tb99de,

zunächst einmal ein herzliches Willkommen in der Delphi-PRAXiS!

Zitat von tb99de:
ich habe die Überschrift einfach aus eurer Code-Library kopiert.
Wenn Du Tippfehler oder andere Dinge, die Du (oder ein Mod) nachträglich anders haben möchtest, kannst Du das über den Edit-Button im ersten Eintrag machen.

Zitat von tb99de:
Statt auf die Suchfunktion zu Verweisen solltet ihr vieleicht eurer Code-Library überarbeiten.
Dafür benötigen wir ersteinmal an "besseres Stück Code".

Falls Du Dich für die Prozessorauslastung interessieren solltest, findest Du im Suchergebnis durch sakuras Link einen Thread, in dem genau dieses Problem erfolgreich gelöst worden ist. Dies jedoch ohne Verwendung der API-Funktion QueryPerformanceCounter, zu der Microsoft im MSDN schreibt
Zitat von MSDN:
On a multiprocessor machine, it should not matter which processor is called. However, you can get different results on different processors due to bugs in the BIOS or the HAL
Vielleicht würde es helfen, wenn Du einmal beschreibst, welche Ergebnisse Dich unter welchen Umständen irritieren? Anschließend könnten wir an einer Lösung arbeiten. Sollte letztlich eine gelungende Lösung entstanden sein, könnte sie (vielleicht sogar als Ersatz für den von Dir referenzierten Beitrag) in die Code-Library gepostet werden
gruß, choose
  Mit Zitat antworten Zitat
tb99de

Registriert seit: 14. Jan 2004
17 Beiträge
 
#5

Re: Zeitmessung mit dem RealTimeCounter

  Alt 14. Jan 2004, 12:40
Also nochmal Hallo zusammen und danke für den Empfang

Ich benutze die Funktionen QueryPerformanceFrequency(f) und QueryPerformanceCounter(c1) um eine sehr genaue Zeitmessung durchzuführen.

Start:
QueryPerformanceFrequency(f);
QueryPerformanceCounter(c1);

Stop:
QueryPerformanceCounter(c2);
sek := (c2 - c1) / f;

Läuft auch wunderbar, nur ist die Zeit nicht korrekt wenn man einen Intel Processor mit HT hat.
Das Ergebnis schwankt mit der Prozessorauslastung.
Bsp: Messung über 1s-Timer
im Leerlauf = 0.52 sek. --> falsch
Vollast = 1 sek --> richtig

Habe deshalb euren Code ausprobiert um zu sehen ob dieser funjtioniert. Tut's aber auch nicht Ergebnis = -1;
Selbst wenn ich den Process und den Thread nur auf einem Prozessor lege (SetMask sowiewo) sind die Ergebnisse falsch.

Wäre schön Ihr wüßtet eine Lösung.

tb99de
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Zeitmessung mit dem RealTimeCounter

  Alt 14. Jan 2004, 13:06
Ich habe hier auch einen P4-HT, aber ich kann Dein Problem nicht nachvollziehen. Bist Du Dir sicher, daß Du keinen Denkfehler machst?

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#7

Re: Zeitmessung mit dem RealTimeCounter

  Alt 14. Jan 2004, 13:16
Mit Bei Google suchenqueryperformancecounter hyper threading konnte ich unter den ersten drei Treffern die Aussage
Zitat von JSI FAQ:
Some programs, mostly games, run incorrectly on the subject platforms [WinXP with HT].

This problems occurs if the program uses the QueryPerformanceCounter and QueryPerformanceFrequency functions to generate time code, as the output of these functions may be incorrectly interpreted.
sowie diesen Beitrag
Zitat von Ken Hagan:
There's QueryPerformanceCounter, but this may occasionally jump by
several seconds because of workarounds for some chipsets (Q274323). [..]On multi-processor (including hyper-threaded P4) systems, it [the frequency] is the processor clock speed [..].
[..]
In all cases, I suppose the workaround is to use the low resolution
clock to sanity-check the high resolution values.
finden.

Mit Multiprozessorsystemen hatte ich im Zusammenhang mit QueryPerformanceCounter bisher keine Schwierigkeiten. Ein Prozessor mit HT steht mir leider nicht zur Verfügung.

EDIT: Kleine Korrektur im zweiten Zitat
gruß, choose
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Zeitmessung mit dem RealTimeCounter

  Alt 14. Jan 2004, 13:19
Hm, interessant, aber wer nutzt schon Windows XP Ist aber gut zu wissen, wie dem auch sei, was hat die Suche und der Test von GetThreadTimes ergeben?

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
tb99de

Registriert seit: 14. Jan 2004
17 Beiträge
 
#9

Re: Zeitmessung mit dem RealTimeCounter

  Alt 14. Jan 2004, 13:36
GetThreadTimes:
Nicht viel.
Bei einer Thread+User-Time vom 100ms pro Sek. messe ich 0.5s pro Sek.
Bei einer Thread+User-Time vom 0.9-1s pro Sek. (Vollast) messe ich genau 1s pro Sek.

Denkfehler fast ausgeschlossen. Die Software ist schon älter und zigfach eingesetzt.
Habe zwei Rechner:
P2 650MHz - QueryPerformanceFrequency = 3.579.545 (paßt zu eurer Code-Lib.) --> OK
P4 HT 3.02 GHz - QueryPerformanceFrequency = 3.056.560.000 --> f

Übrigens "Some programs, mostly games, run incorrectly on the subject platforms [WinXP with HT]" bezieht sich hauptsächlich auf die Verwendung von 32 Bit Integerwerten mit Vorzeichen. Man muß 64 Bit ohne Vorzeichen benutzen.


Ich hoffe euch fällt noch etwas ein.

tb99de
  Mit Zitat antworten Zitat
tb99de

Registriert seit: 14. Jan 2004
17 Beiträge
 
#10

Re: Zeitmessung mit dem RealTimeCounter

  Alt 14. Jan 2004, 13:39
Sorry, hatte Probleme die Message zu senden.
Lösche Bitte einer die zwei überflüssigen.

tb99de
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 18:51 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