AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Zeit für Sortieralgos

Zeit für Sortieralgos

Ein Thema von Nikolas · begonnen am 17. Mai 2004 · letzter Beitrag vom 18. Mai 2004
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#11

Re: Zeit für Sortieralgos

  Alt 18. Mai 2004, 05:12
GetTickCount ist gänzlich ungeeignet solche Messungen durchzuführen. Der Grund ist der, dass GetTickCount nicht die tatsächliche Zeit messen kann die ein Thread wirklich an Rechenzeit zugeteilt bekommen hat. Es misst nur den zeitlichen Abstand zweier Punkte so zu sagen. Nehmen wir mal folgen den Code:
Delphi-Quellcode:
Start := getTickCount;
// aufwendige Berechnungen
Ende := GetTickCount;
Der Scheduler von Windows weißt nun deinem Thread jeweils eine Rechenzeiut von ca. 22 ms zu. Da dein Thread aber nicht der einzigeste im System ist und es Threads mit gleicher oder höherer Priorität gibt, wird im für eine unbstimmte Zeit Rechnezeit entzogen und der Thread und wird in den "zuteilungsfähigen" Zustand versetzt, das heißt er wartet darauf, dass er wieder "an die Reihe" kommt.

Will man nun ermitteln wie lange der Thread tatsächlich an einer Aufgabe "rechnet", muss man die Zeit ermitteln, die der Thread wirklich Rechnezeit zugeteilt bekommt und auch wirklich Code von der CPU ausgeführt wird und das kann man nur mit der API-Funktion MSDN-Library durchsuchenGetThreadTimes. Ein Beispiel dafür findet man auch in meinem Threading-Tutorial.

Eine andere Möglichkeit die Geschwindigkeit zu ermitteln, ist das Zählen der tatsächlich von der CPU benötigten Taktzyklen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#12

Re: Zeit für Sortieralgos

  Alt 18. Mai 2004, 05:20
Zitat:
auch wirklich Code von der CPU ausgeführt wird und das kann man nur mit der API-Funktion GETTHREADTIMES.
Das ist besser als GetTickCount(), ist aber denoch nicht 100%'tig exakt unter Windows. Interuptroutinen, von denen es ne Menge gibt mit sehr kurzen periodischen Intervallen, werden dem aktuelle Thread "gutgeschrieben" ohne das GetThreadTimes() dies berücksichtigen kann. Desweiteren der Overhead des Threadwechsels der alleine schon aus Sicht der CPU mindestens 200 Taktzyklen dauert, wird ebenfalls dem Threadcontext gutgeschrieben.

Will man exakte Messungen dann gibt es nur zwei Alternativen:
1.) ein spezielles OS das ALLES blocken kann
2.) eine spezieller Realtime Simulator der den zu analysierenden Code in einer virtuellen und vom OS unabhänigen Box simuliert. Ähnlich dem Intel VTune.

Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#13

Re: Zeit für Sortieralgos

  Alt 18. Mai 2004, 13:20
wenn man aber nicht einen einzelnen zyklus sodern sagen wir 10.000 misst, dann sollte sich das relativ egal bleiben...
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#14

Re: Zeit für Sortieralgos

  Alt 18. Mai 2004, 13:26
Ich würde einfach eine riesige Anzahl (n > 1.000.000) unter Berücksichtigung der genannten Vorschläge sortieren. Hierbei dürften die paar ms Abweichung das Endergebnis nicht allzu sehr verfälschen.

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#15

Re: Zeit für Sortieralgos

  Alt 18. Mai 2004, 16:29
Danke schon mal für alle Vorschläge. Nur hab ich leider noch nicht mit Threads gearbeitet und werde mir da wohl noch ein paar Sachen beibringen müssen um eine halbwegs exakte Zeitmessung hinzubekommen.

THXbyTOX
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 22:35 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