Seite 1 von 1

geschwindikeitsvergleich der variablen

Verfasst: 24.08.2006 19:55
von Gorf
ich habe auf die schnelle ein programm geschrieben um die berechnungszeiten der einzelnen variablen zu messen.

Code: Alles auswählen

;geschwindigkeitstest
EnableExplicit

Define TESTl.l=0;long
Define TESTq.q=0;quad
Define TESTf.f=0;fload
Define TESTd.d=0;double

Define RESULTl.l
Define RESULTq.q
Define RESULTf.f
Define RESULTd.d

Define Loop.l
Define timerStart.l
Define timerl.l
Define timerq.l
Define timerf.l
Define timerd.l

timerstart = ElapsedMilliseconds()
For Loop=0 To 90000000
	TESTl +1
	RESULTl=TESTl*TESTl
	RESULTl=RESULTl/TESTl
	RESULTl=TESTl+TESTl
	RESULTl=RESULTl-TESTl
Next
timerl = ElapsedMilliseconds()-timerstart

timerstart = ElapsedMilliseconds()
For Loop=0 To 90000000
	TESTq +1
	RESULTq=TESTq*TESTq
	RESULTq=RESULTq/TESTq
	RESULTq=TESTq+TESTq
	RESULTq=RESULTq-TESTq
Next
timerq = ElapsedMilliseconds()-timerstart

timerstart = ElapsedMilliseconds()
For Loop=0 To 90000000
	TESTf +1
	RESULTf=TESTf*TESTf
	RESULTf=RESULTf/TESTf
	RESULTf=TESTf+TESTf
	RESULTf=RESULTf-TESTf
Next
timerf = ElapsedMilliseconds()-timerstart

timerstart = ElapsedMilliseconds()
For Loop=0 To 90000000
	TESTd +1
	RESULTd=TESTd*TESTd
	RESULTd=RESULTd/TESTd
	RESULTd=TESTd+TESTd
	RESULTd=RESULTd-TESTd
Next
timerd = ElapsedMilliseconds()-timerstart

OpenConsole()
PrintN("long   "+Str(timerl))
PrintN("quad   "+Str(timerq))
PrintN("float  "+Str(timerf))
PrintN("double "+Str(timerd))
Input()
das ergebnis bei mir war

long 2469
quad 6063
float 1140
double 1344

das quad langsamer als long ist leuchtet mir ein
aber das die fließkomma variablen schneller sind als die integer sind versteh ich nicht. ich dachte immer integer sind schneller???
das auch noch kaum ein unterschied zwischen float und double gibt, ist mir auch nicht klar. 2byte gegen 4byte beim integer ist der unterschied sehr gross

Verfasst: 24.08.2006 20:01
von remi_meier
Ich werde jetzt nicht gross auf Details eingehen, aber hier mal ein paar
Hinweise:
- Kommentier mal überall die Division aus, da siehst du einen der Haupt-
gründe.
- PB ist langsam in Integerberechnungen
- PBs System für Rechnungen ist ziemlich gut auf die FPU angepasst
- Die FPU rechnet intern mit 80bit. Das Laden von 32bit- oder 64bit-Floats
macht fast keinen Unterschied

Verfasst: 24.08.2006 23:56
von Frogger
Bei mir:
long 1922
quad 8125
float 1344
double 1328

System:
Pentium 4 3.00GHz
1GB ram
XP Home

Seltsam, dass quad 2 Sek. mehr braucht als bei dir aber long schneller ist.

Verfasst: 25.08.2006 03:39
von Gorf
@remi
ich hab mal wie du vorgeschlagen hast, die division rausgenommen

long 657
quad 2046
float 844
double985

lustig. jetzt ist wie ich es fast eigendlich erwartet hätte. long am schnellsten und quats brauchen NUR 2mal statt über 4mal so lange. anscheinend ist das dividieren bei integer sehr aufwendig

wenn die fpu immer mit 80bit rechnet wär es nicht logisch auch 80bit floats zu verwenden. schliesslich spart man sich das umwandeln in 32 oder 64bit???
gibts sowas vielleicht in anderen programmiersprachen?? ich kenn mich da nicht so gut aus.


@frogger
hmmm auch komisch vielleicht weil ich ein amd hab??
genauer athlon64 3700

Verfasst: 25.08.2006 08:33
von NicTheQuick
Bei mir siehts so aus:

long: 5638
quad: 12638
float: 1983
double: 2133

Und ohne Divisionen:

long: 1041
quad: 2846
float: 1963
double: 1602

Jetzt sind die doubles sogar noch schneller als die floats.


Vielleicht wäre der Test besser, wenn man ihn in Realtime-Priorität testet.

Verfasst: 25.08.2006 17:32
von remi_meier
> wenn die fpu immer mit 80bit rechnet wär es nicht logisch auch 80bit
> floats zu verwenden. schliesslich spart man sich das umwandeln in 32
> oder 64bit???
Ja, wobei natürlich mehr Daten transportiert werden müssten, aber die
Geschwindigkeit sollte etwa gleich sein.

> gibts sowas vielleicht in anderen programmiersprachen?? ich kenn
> mich da nicht so gut aus.
Ja gibt es (Bsp. C++).

> Vielleicht wäre der Test besser, wenn man ihn in Realtime-Priorität testet.
Vermutlich, jedoch würde es ev. auch schon reichen, die Instruktionen
in den Schleifen zu vervielfachen (mehrmals das gleiche hintereinander),
da die Sprünge der Schleifen immer noch viel ausmachen.

Verfasst: 28.08.2006 15:42
von Gorf
Vermutlich, jedoch würde es ev. auch schon reichen, die Instruktionen
in den Schleifen zu vervielfachen (mehrmals das gleiche hintereinander),
da die Sprünge der Schleifen immer noch viel ausmachen.
hehe ich habs halt auf die schnelle gemacht. wollt nur mal die groben geschwindigkeitsunterschiede ermitteln. es ging darum ob ich in einem programm das ich mal machen will fixkomma oder float verwende :)
ich werd wohl gleich doubel verwenden :)

danke an alle