ASM - fyl2x langsammer als Log10 oder Log ?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6826
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

ASM - fyl2x langsammer als Log10 oder Log ?

Beitrag 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
---------------------------
PB 5.73 ― Win 10, 20H2 ― Ryzen 9 3900X ― Radeon RX 5600 XT ITX ― Vivaldi 4.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Lord
Beiträge: 292
Registriert: 21.01.2008 19:11

Re: ASM - fyl2x langsammer als Log10 oder Log ?

Beitrag 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).
Bild
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: ASM - fyl2x langsammer als Log10 oder Log ?

Beitrag 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.
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8398
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 20.10
NVIDIA Quadro P2200
Wohnort: Saarbrücken
Kontaktdaten:

Re: ASM - fyl2x langsammer als Log10 oder Log ?

Beitrag 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. :-D
Mehrfaches Ausführen ändert nicht viel. Ich hab die Loops zwar verzehnfacht, aber das hat auch nicht viel geändert.
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6826
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: ASM - fyl2x langsammer als Log10 oder Log ?

Beitrag von STARGÅTE »

@NicTheQuick:
Ja so in etwa hatte ich mir das vorgestellt. Hast du Intel?
PB 5.73 ― Win 10, 20H2 ― Ryzen 9 3900X ― Radeon RX 5600 XT ITX ― Vivaldi 4.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8398
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 20.10
NVIDIA Quadro P2200
Wohnort: Saarbrücken
Kontaktdaten:

Re: ASM - fyl2x langsammer als Log10 oder Log ?

Beitrag von NicTheQuick »

Jup, den da: Intel(R) Core(TM) i7-3820QM CPU @ 2.70GHz
Mittlerweile uralt, aber im Laptop immer noch rasend schnell :-D
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6826
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: ASM - fyl2x langsammer als Log10 oder Log ?

Beitrag 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
PB 5.73 ― Win 10, 20H2 ― Ryzen 9 3900X ― Radeon RX 5600 XT ITX ― Vivaldi 4.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
mk-soft
Beiträge: 3308
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: ASM - fyl2x langsammer als Log10 oder Log ?

Beitrag 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

Code: Alles auswählen

Log2() --> 26.4ns
Log10() --> 19.1ns
Log() --> 17.7ns
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.7x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf My Webspace
Benutzeravatar
Helle
Beiträge: 566
Registriert: 11.11.2004 16:13
Wohnort: Magdeburg

Re: ASM - fyl2x langsammer als Log10 oder Log ?

Beitrag von Helle »

Hey, hier fehlt doch noch mein Senf :mrgreen: ! 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) :mrgreen: !
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?
ccode_new
Beiträge: 1074
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: ASM - fyl2x langsammer als Log10 oder Log ?

Beitrag 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 ?
Betriebssysteme: MX Linux 19 / Windows 10 / Mac OS 10.15.7 / Android 7.0 ;)

Manchmal muß das Rad neu erfunden werden.
Antworten