Sebe hat geschrieben:Interessant wäre der Speedtest nochmal mit Double/Float Werten. Da wird sich das Bild dann evtl. wieder relativieren, wobei ich >gehört< habe, dass .Net 2.0 auch mit Float/Doubles recht schnell sein soll (im Gegensatz zu 1.x).
Den Test kannnst du haben:
Code: Alles auswählen
#r = 100000000
Delay(0)
time = ElapsedMilliseconds()
For i = 1 To #r
f.f+0.1
Next
time = ElapsedMilliseconds()-time
time2 = ElapsedMilliseconds()
For i = 1 To #r
d.d+0.1
Next
time2 = ElapsedMilliseconds()-time2
MessageRequester("",Str(time)+" / "+Str(time2))
(PB.Net-Exe)
http://www.deeem2031.de/PB.Net/SpeedTest02.exe
Die Ergebnisse sind aber noch erschreckender...:
PB.Net: 156 - 174 / 140 - 157 (mit .Net v1.1)
PB: 900 - 960 / 1656 - 1680
Ich kann euch aber auch sagen warum das so ist: PB ließt jedes mal die Variable und die Konstante (0.1) aus dem Speicher und speichert die Variable wieder im Speicher. Was ja auch nicht falsch ist, es ist eben "nur" handoptimiert. Diese Speicherzugriffe passieren aber als .Net Exe nur einmal, nämlich vor bzw. nach der Schleife. (-> handoptimiert mag vielleicht bei Libraries gut sein, im Hauptcode sind optimier-algos aber wesentlich wichtiger, die PB nunmal nicht/kaum hat)
Sebe hat geschrieben:Noch eine Frage: Wird der PB.net Compiler auch alle Vartypen unterstützen (bool, alle unsigned Typen und decimal)?
Ich denke schon, das ich die noch einbau, noch sind die allerdings nicht drin. (mal abgesehen von boolischen Ausdrücken)
RaVeN99 hat geschrieben:Wenn dem so ist, sollte doch theoretisch bei einem speedtest, welcher eine operation beinhaltet die mittels eines solchen befehlssatzes in nur einem durchlauf berechnet wird, das Ergebnis nochmal ne ganze ecke deutlicher ausfallen oder?
Mag ja sein, nur wie willst du die Schleife mit den Befehlen noch weiter optimieren. Da ist doch nicht viel dran zu drehen. Die einzige Möglichkeit, die ich sehe, das ganze noch weiter zu optimieren wäre, die ganze Schleife durch ein einzelnes "a+#r*1" zu ersetzen. Dazu braucht man aber kein MMX...