;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
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
@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
> 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.
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