Seite 1 von 1

Anzahl der Taktzyklen von Befehlen ermitteln

Verfasst: 01.07.2011 16:26
von STARGÅTE
Tachchen,

hier mal ein Beispiel von mir, wie man von Befehlen die anzahl der benötigten Taktzyklen ermitteln kann.
Einfach oben die CPU-Geschwindigkeit in Herz angeben (bei mir 2.2e9) und Off-Set Zyklen, ein korrekturwert, sodass bei nichts auch 0 rauskommt.

Code: Alles auswählen

Prototype ClockCyclesFunction()

Global ClockCycles_Error.f = 7 ; Zyklen
Global ClockCycles_CPUFrequency.f = 2.2e9 ; Hz

Procedure.f ClockCycles(Function.ClockCyclesFunction)
	Protected Loops = 10, Start, Time
	Repeat
		Loops * 2
		Start = timeGetTime_()
		For Index = 1 To Loops
			Function()
		Next
		Time = timeGetTime_()
	Until Time-Start > 250
	ProcedureReturn ClockCycles_CPUFrequency*(Time-Start)/Loops*1e-3 - ClockCycles_Error
EndProcedure


Procedure Test()

EndProcedure

MessageRequester("Taktzyklenmessung", "Benötigte Taktzyklen: "+#LF$+StrF(ClockCycles(@Test()),1))
Nun kann man in Test() Befehle hinein schreiben und bekommt dnan nach ca. 1s "Hochrechungsdauer" die Anzahl zurück.

Beispiel:

Code: Alles auswählen

A = 1 ; 1 Taktzyklus

Code: Alles auswählen

A = 1 : B = 2 : C = A+B ; 7 Takzyklen

Code: Alles auswählen

Sin(2) ; ~ 100 Takzyklen
Vielleicht hat ja noch jemand verbesserungen anzubieten

Re: Anzahl der Taktzyklen von Befehlen ermitteln

Verfasst: 07.07.2011 02:15
von Thorium
Möchte nur anmerken das solche Messungen CPU-spezifisch sind. Was auf einem CPU-Model schneller ist, kann auf dem anderen langsamer sein.
Man kann da viel kaputtoptimieren, wenn mans übertreibt.