Fibonacci-Folge / Benchmarks

Pascal, Basic und andere nicht aufgelistete
Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8462
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Fibonacci-Folge / Benchmarks

Beitrag von Xin » Mi Okt 03, 2018 10:40 am

So... nachdem das Jahr programmiertechnisch eigentlich ereignislos war (bis auf die Tatsache, dass wir proggen.org nach endlosen Vorbereitungen quasi neugeschrieben und umgezogen haben ^^) habe ich mich am Sonntag erstmals wieder an den Computer gesetzt, einfach um mal wieder etwas Spaß zu haben. Und damit auch an dieses Projekt, mich wieder eingelesen, ein paar Bugs entfernt und heute den erstmals seit Ewigkeiten wieder eine Kleinigkeit hinzugefügt: Eine kleine, aber feine Optimierung zum Addieren und Subtrahieren von Werten: Inc und Dec, bzw. Werte können direkt mit add und sub addiert werden. Vorher konnte der Renderer nur Register addieren und subtrahieren, der Wert musste also erst in ein Register geladen werden und dann wurde der geladene Wert aus dem Register verrechnet.
Das wirkt sich aus: von 0,029 Sekunden geht's runter auf 0,024 Sekunden.

Das sind nur 0,005 Sekunden. Oder eben 17%. 17% ist heftig. ^^

Womit die Konkurrenz zu Java wieder interessant wird...

Code: Alles auswählen

          Java       Genesys     C (optimiert)
fib(30):   0,170s     0,024s     0,013s
fib(35):   0,262s     0,137s     0,079s
fib(40):   1,181s     1,383s     0,767s
fib(45):  10,657s    13,708s     7,649s
Was interessant ist... ich bekomme die ursprüngliche Zeit von fib(30) mit 0,139s mit Java nicht mehr bestätigt!? Hatten wir ein Java-Update bzw. Downgrade?

Anyway, ich vermute, ich habe möglicherweise noch eine größere Bremse im JIT-Compiler. 30% müssten also auch noch zu machen sein, C zeigt schließlich an, wo die Meßlatte am Ende zu hängen hat. ^^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

koshamo
Beiträge: 13
Registriert: Sa Aug 11, 2018 5:38 pm
Wohnort: Heidelberg

Re: Fibonacci-Folge / Benchmarks

Beitrag von koshamo » Fr Okt 05, 2018 9:53 pm

Welche Java-Version hattest du denn die ganze Zeit und welche jetzt? Die schrauben nämlich ständig an der JVM und am JIT rum und haben mit Java 9 einen neuen GC eingeführt, der andere Schwerpunkte setzt.
Optimierung ist halt immer so ein Problem: für welche Anwendungssituation soll optimiert werden? Optimierung in die eine Richtung bedeutet meist Verschlechterung in der anderen Richtung....
Nur an einer einzigen Problemstellung Performance zu testen zeigt auch nur die Leistungsfähigkeit der Sprachen / Compiler an dieser einzigen Stelle. Leider.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8462
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Fibonacci-Folge / Benchmarks

Beitrag von Xin » Sa Okt 06, 2018 10:13 am

koshamo hat geschrieben:
Fr Okt 05, 2018 9:53 pm
Welche Java-Version hattest du denn die ganze Zeit und welche jetzt? Die schrauben nämlich ständig an der JVM und am JIT rum und haben mit Java 9 einen neuen GC eingeführt, der andere Schwerpunkte setzt.
Gute Frage...
Aktuell war es die 10.0.2. Vor einem Jahr wird es entsprechend eine 9er gewesen sein.

Da Fibonacci aber nur rekursiv sich selbst aufruft und darin nur Vergleiche und Schleifen ablaufen, dürfte der GC gar nicht zum Zuge kommen. Es werden ja keine Objekte erzeugt.
koshamo hat geschrieben:
Fr Okt 05, 2018 9:53 pm
Optimierung ist halt immer so ein Problem: für welche Anwendungssituation soll optimiert werden? Optimierung in die eine Richtung bedeutet meist Verschlechterung in der anderen Richtung....
Nur an einer einzigen Problemstellung Performance zu testen zeigt auch nur die Leistungsfähigkeit der Sprachen / Compiler an dieser einzigen Stelle. Leider.
Zweifelsohne.
Für mich bedeutet dieser Benchmark vorrangig erstmal: Es funktioniert. Ich hatte eigentlich überhaupt nicht vor in Konkurrenz mit Java oder gar C zu treten. Erstmal wollte ich mit meiner Sprache leichtere Ziele angreifen. Ich wollte einfach nur an PHP und Python vorbei. Und da bin ich "versehentlich" derart dran vorbeigeschossen, dass die beiden Sprachen für mich komplett aus dem Fokus gerutscht sind.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

koshamo
Beiträge: 13
Registriert: Sa Aug 11, 2018 5:38 pm
Wohnort: Heidelberg

Re: Fibonacci-Folge / Benchmarks

Beitrag von koshamo » So Okt 07, 2018 9:00 am

Du hattest irgendwo vorne nach Beispielen in weiteren Sprachen gefragt, u.a. Haskell. Hier kommen Codebeispiele:

Code: Alles auswählen

fib :: Int -> Int
fib n 
    | n <= 1 = 1
    | otherwise = fib (n-1) + fib (n-2)

main = do
    let x = [fib x | x <- [1..30]]
    print x
Da aber gerade funktionale Sprachen in aller Regel eine Endrekursionsoptimierung mitbringen (jede endrekursive Funktion lässt sich als while-Schleife darstellen), sollte man da natürlich auch eine endrekursive Variante anbieten. Wenn schon, dann echter und sprachtypischer Benchmark :P

Code: Alles auswählen

fib :: Int -> Int -> Int -> Int
fib n acc prev
    | n <= 1 = prev
    | otherwise = fib (n-1) prev (acc+prev)

main = do
    let x = [fib x 1 0 | x <- [1..30]]
    print x

Antworten