Einzelnen Beitrag anzeigen

Amateurprofi

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

Re: Schnellster Stringmatching-Algorithmus in ASM übersetzen

  Alt 9. Dez 2007, 22:20
Zitat von Muetze1:
Zitat von Amateurprofi:
Ich verwende dagegen den TimeStampCounter, der mit der CPU-Taktfrequenz tickt, was deutlich präzisere Messungen ermöglicht als GetTickCount oder QueryPerformanceCounter.
Der QPC greift intern bei einem vorhandenen TSC auf diesen zu (ausser es wird explizit verboten, u.a. durch den boot.ini switch /usepmtimer). Wenn kein TSC vorhanden ist wird versucht HW Timer2 zu nutzen, aber das ist nicht immer möglich. Von daher kann es sehr gut vorkommen, dass die Funktion false zurück gibt, wenn kein TSC auf der CPU vorhanden ist und der Timer2 benutzt wird.

Timer1 wird (warum auch immer) weiterhin seit IBM's Massenverkauf mit seinen 18,2 IRQs pro Sekunde.
@Mütze1:
Ja, das mag so sein.
Das ändert aber nichts an der Richtigkeit meiner Aussage, daß der TSC deutlich schneller tickt, als QPC.

qpc tickt (auf meinem Rechner) mit ca. 3.58 MTicks/s
tsc tickt (auf meinem Rechner) mit ca. 2.65 GTicks/s, also 740 mal so schnell wie qpc

Delphi-Quellcode:
PROCEDURE TMain.Test;
var tick,tick1:cardinal; tsc,tsc1,qpc,qpc1:int64;
FUNCTION TimeStamp:int64;
asm
   rdtsc
end;
begin
   queryperformancecounter(qpc);
   tsc:=timestamp;
   tick:=GetTickCount;
   sleep(2000);
   tick1:=GetTickCount;
   tsc1:=timestamp;
   queryperformancecounter(qpc1);
   tick:=tick1-tick;
   tsc:=tsc1-tsc;
   qpc:=qpc1-qpc;
   ShowMessage('ticks '+IntToStr(tick)+#13+
               'qpc '+IntToStr(qpc)+' '+IntToStr(qpc*1000 div tick)+' ticks/s'#13+
               'tsc '+IntToStr(tsc)+' '+IntToStr(tsc*1000 div tick)+' ticks/s');
end;
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat