Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

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

Re: Schnellster Stringmatching-Algorithmus in ASM übersetzen

  Alt 11. Dez 2007, 11:11
Delphi-Quellcode:
   queryperformancecounter(qpc);
   tsc:=timestamp;
   tick:=GetTickCount;
   sleep(2000);
   queryperformancecounter(qpc1);
   tsc1:=timestamp;
   tick1:=GetTickCount;
so wäre es besser. Der Meßfehler von GetTickCount(), TimeStamp und QPC nivelliert sich so ein bischen, relativ zueinander gesehen.
Einzelmessungen der art

Delphi-Quellcode:
   queryperformancecounter(qpc);
   sleep(2000);
   queryperformancecounter(qpc1);

   tsc:=timestamp;
   sleep(2000);
   tsc1:=timestamp;

   tick:=GetTickCount;
   sleep(2000);
   tick1:=GetTickCount;
wären dagegen falsch. Der Aufrufoverhead jeder Funktion verursacht einen wesentlich kleineren Meßfehler als das Sleep(2000). Dieses kann +-20ms bedeuten.

Noch besser ist es so:

Delphi-Quellcode:
   sleep(0);
   queryperformancecounter(qpc);
   tsc:=timestamp;
   tick:=GetTickCount;
   sleep(2000);
   queryperformancecounter(qpc1);
   tsc1:=timestamp;
   tick1:=GetTickCount;
Das Sleep(0) "erzwingt" einen anstehenden Task/Threadswitch und so reduziert sich die Wahrscheinlichkeit drastisch das innerhalb den nachfolgenden drei Funktionsaufrufen dieser anstehende Switch durchgeführt wird. Dieser würde dann dafür sorgen das die Messung komplett untauglich ist.

Gruß Hagen
  Mit Zitat antworten Zitat