Seite 1 von 2
ASM - fyl2x langsammer als Log10 oder Log ?
Verfasst: 17.04.2018 18:55
von STARGÅTE
Hallo Leute,
ich wundere mich gerade etwas über die geschwindigkeit vom ASM Befehl
fyl2x.
Wenn ich diesen für die Log2() Procedure nutzt (
Quelle), ist diese Prozedur langsammer als das Log oder Log10 von PureBasic, obwohl diese ja wohl auch den Basisbefehl fyl2x nutzen und sogar mehrmals, oder?
Code: Alles auswählen
Procedure.d Log2(x.d)
!fld1
!fld qword [p.v_x]
!fyl2x
ProcedureReturn
EndProcedure
Define Time.i, Time2.i, Time10.i, TimeE.i, I.i
#Loops = 10000000
Time = ElapsedMilliseconds()
For I = 1 To #Loops
Log2(I)
Next
Time2 = ElapsedMilliseconds() - Time
Time = ElapsedMilliseconds()
For I = 1 To #Loops
Log10(I)
Next
Time10 = ElapsedMilliseconds() - Time
Time = ElapsedMilliseconds()
For I = 1 To #Loops
Log(I)
Next
TimeE = ElapsedMilliseconds() - Time
MessageRequester("", "Log2() --> "+StrD(1.e6*Time2/#Loops)+"ns"+#LF$+"Log10() --> "+StrD(1.e6*Time10/#Loops)+"ns"+#LF$+"Log() --> "+StrD(1.e6*TimeE/#Loops)+"ns")
---------------------------
---------------------------
Log2() --> 49.9ns
Log10() --> 39.6ns
Log() --> 36.7ns
---------------------------
OK
---------------------------
Re: ASM - fyl2x langsammer als Log10 oder Log ?
Verfasst: 18.04.2018 07:59
von Lord
Hier mal meine Werte:
---------------------------
---------------------------
Log2() --> 24.5ns
Log10() --> 24.5ns
Log() --> 21.5ns
---------------------------
OK
---------------------------
Wobei diese variieren um etwa +- 2ns.
Grundsätzlich ist aber Log() immer etwa 2-3 ns schneller.
Getestet mit PB v5.62(x64).
Re: ASM - fyl2x langsammer als Log10 oder Log ?
Verfasst: 18.04.2018 10:25
von _JON_
PB benutzt die msvcrt.dll Funktionen für Log() und Log10().
Hab mal rein geschaut da ist eine Große Menge Code in den Funktionen,
allerdings kein fld1, fld oder fyl2x.
Re: ASM - fyl2x langsammer als Log10 oder Log ?
Verfasst: 18.04.2018 10:42
von NicTheQuick
Hier mal meine Werte:
Code: Alles auswählen
Log2() --> 22.17ns
Log10() --> 85.98ns
Log() --> 80.24ns
Die sind dann wohl doch deutlich anders.
Mehrfaches Ausführen ändert nicht viel. Ich hab die Loops zwar verzehnfacht, aber das hat auch nicht viel geändert.
Re: ASM - fyl2x langsammer als Log10 oder Log ?
Verfasst: 18.04.2018 11:28
von STARGÅTE
@NicTheQuick:
Ja so in etwa hatte ich mir das vorgestellt. Hast du Intel?
Re: ASM - fyl2x langsammer als Log10 oder Log ?
Verfasst: 18.04.2018 11:34
von NicTheQuick
Jup, den da: Intel(R) Core(TM) i7-3820QM CPU @ 2.70GHz
Mittlerweile uralt, aber im Laptop immer noch rasend schnell
Re: ASM - fyl2x langsammer als Log10 oder Log ?
Verfasst: 18.04.2018 13:16
von STARGÅTE
Komisch.
Ich habe es auch noch mal auf einem Intel(R) Core(TM) i5-4460 laufen lassen und da gibt er mir
Log2() --> 27.2ns
Log10() --> 18.2ns
Log() --> 15.4ns
Re: ASM - fyl2x langsammer als Log10 oder Log ?
Verfasst: 18.04.2018 13:35
von mk-soft
CPU: Intel(R) Core(TM) i7-3615QM CPU @ 2.30GHz
Mac OS 10.13.4
Log2() --> 27.3ns
Log10() --> 14.8ns
Log() --> 13.4ns
(VM) Linux Ubuntu 17.10
Log2() --> 26.2ns
Log10() --> 33.3ns
Log() --> 29ns
(VM) Window 7 Pro
Re: ASM - fyl2x langsammer als Log10 oder Log ?
Verfasst: 04.05.2018 10:49
von Helle
Hey, hier fehlt doch noch mein Senf
! Ich dachte aber, auf den absolut richtigen Hinweis (für Windows) von _JON_ springt jemand an. Dieser Hinweis erklärt ja auch (eventuelle) Unterschiede zwischen den einzelnen Betriebssystemen.
Unterschiede existieren aber (natürlich) auch zwischen den einzelnen Windows-Versionen. FYL2X wird in der msvcrt.dll (Versions-Nr.geschenkt) für Windows7 nur noch für die Funktion "pow" verwendet, in Windows10 (_JON_) schon nicht mehr.
Also: FYL2X hat nichts mit den PB-Funktionen LOG10 oder LOG zu tun! Um das ganz hervorragende (neue) IDA 7 Free zu testen habe ich damit mal die Funktion POW10 aus der msvcrt.dll (Windows7) "extrahiert" (ich Böser!). Da wird (natürlich) keine einzige x87-(FPU-)Instruktion verwendet, dafür aber ca. 1700 Bytes an Daten (Konstanten)
!
Interessant wäre ein Genauigkeits-Vergleich mit den Betriebssystemen, bei denen das FYL2X-Beispiel schneller ist als PB-POWx (oder besser: POW langsamer). Ist da z.B. POW10 genauer als in Windows? Konkretes Beispiel: Windows-PB-Log10(54321.123456789) liefert 4.7349687433423764. Die letzte Dezimal-Stelle (4) ist falsch, es müsste gerundet 3 sein (29...). Liefert z.B.Linux (Distribution?) hier die 3?
Re: ASM - fyl2x langsammer als Log10 oder Log ?
Verfasst: 04.05.2018 15:46
von ccode_new
Linux Mint 18.3 Cinnamon (64 bit)
Log10(54321.123456789)
liefert: 4.7349687433423763849305033
Log2() --> 27.6ns
Log10() --> 103.9ns
Log() --> 96.5ns
An Helle:
Die letzte Dezimal-Stelle (4) ist falsch, es müsste gerundet 3 sein (29...).
Wie kommst du denn darauf ?