[inzw. uninteressant] Benchmark tests: C vs. Python vs. Java

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • hallo,
    mich würde jetzt wirklich mal interessieren, wie schnell der RPI bei benchmark-Tests abschneidet, und zwar
    1x unter C
    1x unter Python - und, wenn möglich,
    1x unter Java.


    Einen Benchmark Test für verschiedene MCUs habe ich schon - jetzt müsste man ihn nur für den RPi anpassen.

    http://www.mindstormsforum.de/viewtopic.php?f=71&t=8095&start=60#p64772


    Wenn Python nämlich WIRKLICH geschwindigkeitsmäßig an C herankommt, wäre es ja wirklich eine Alternative.
    Wer hat Lust und traut sich?

    Der C-Code ist vorhanden und sicher leicht portierbar, mit Python und Java kenne ich mich (noch) nicht aus.
    Den Grafik-Teil kann man notfalls (erstmal) weglassen und evtl später nachreichen.

    Hier ist der C-Referenz-Code (danach auch einige Adaptationen, u.a. für Java, aber hier ist ein kleiner Fehler drin):

    http://www.mindstormsforum.de/viewtopic.php?f=71&t=8095&start=60#p64494

    wem die Arduino-Portierung besser als Basis gefällt, kann stattdessen auch diese verwenden:
    http://www.mindstormsforum.de/viewto...tart=60#p64772
    - sie enthält allerdings nicht den Display -Test-Teil, da ich selber noch kein Arduino-TFT mit entspr. Libs besitze). Diese Portierung stammt von mir selber und ist ansonsten 100% vergleichbar.

    Weitere Portierungen, z.B. für C# und Java, finden sich oberhalb oder unterhalb dieses Links - diese stammen allerdings nicht von mir selber und können durchaus Fehler enthalten. Für Java wurde das berichtet, aber noch nicht korrigiert. Hier würde Java nach Berichtigung sogar etwas besser abschneiden.

    Einmal editiert, zuletzt von HaWe (9. Dezember 2014 um 08:42)

  • [inzw. uninteressant] Benchmark tests: C vs. Python vs. Java? Schau mal ob du hier fündig wirst!

  • also 1:100 hätte ich vom Gefühl her für meinen Rechentest auch aktuell vermutet, und damit wäre Python für meine rechenintensiven Anwendungen es nicht wert, sich überhaupt damit zu beschäftigen und dafür Zeit für die Einarbeitung zu verschwenden.

    Ich hätte es nur gern vorher sicher gewusst, bevor ich die Python Sache möglicherweise unbegründet als zu lahm abtue. Es ist eine wichtige Kaufentscheidung für mich, mir überhaupt den RPi anzuschaffen. Der obige Test hat ja auf einem entfernt ähnlichen Linux System (EV3 mit TI DaVinci oder ev3dev Debian) und einigen anderen Roboter-Bastel-Plattformen bereits eine gute Vergleichsmöglichkeit bezüglich Tests von Executables vs. Interpreter-Plattformen.

    Den obigen auf gpp C für EV3 adaptierten Code könnte man doch sicher leicht mit gpp C auch für Rpi übersetzen, oder? Dann hätte man ja immerhin schon mal einen Executable-Vergleich.

    Und dann kommt halt die Gretchenfrage, wie sich Python damit verhält. Leider habe ich ja noch keinen RPi und Python selber ist mir noch völlig unbekannt.
    Code-Optimierungen durch externe Libs sind für array-sort-Operationen erlaubt, ansonsten nicht.

    Ich verstehe ntl, wenn einzelne oder mehrere hier den Test für sich selber für nicht wichtig halten, aber darüber und über Test-Details möchte ich jetzt auch gar nicht diskutieren. Wer hier Hilfe anbietet und Interesse hat, das mal zu machen, dem aber an dieser Stelle schon einmal ein Dankeschön im Vorraus, es wäre mir eine große Hilfe.

    Und wie auch immer die Tests auch ausfallen mögen: sicher auch ein Augenöffner für manche andere hier in der RPi-Gemeinde. 8-)

    Einmal editiert, zuletzt von HaWe (7. Dezember 2014 um 10:38)


  • also 1:100 hätte ich vom Gefühl her für meinen Rechentest auch aktuell vermutet, und damit wäre Python für meine rechenintensiven Anwendungen es nicht wert, sich überhaupt damit zu beschäftigen und dafür Zeit für die Einarbeitung zu verschwenden.

    Eigentlich gibst Du Dir die Antwort bereits selbst. Ein Test wird insbesondere bei rechenintensiven Anwendungen eindeutig zugunsten von C ausfallen - wie sollte auch eine interpretative Sprache wie Python zum Winner werden?

    Ok, Du willst es (einmal mehr) testen. Irgendwas zwischen 25x und 100x schneller wird dann sicher herauskommen, wenn der Test 'vernünftig' angelegt wird. Viele Testergebnisse im Netz taugen nichts, da z.B. ständige Ausgaben auf die Konsole die Aussagekraft erheblich verfälschen.

    Gerade für Deine rechenintensiven Anwendungen ist C unter den höheren Programmiersprachen absolut empfehlenswert, da gibt es für mich gar keinen Zweifel. ;)

    Gruß, mmi

  • Hallo zusammen,

    den Quellcode des Benchmark-Programmes habe ich kurz überflogen.

    Meines Erachtens ist er zu "Mathe"-lastig.

    Ein guter Benchmark-Test enthält beispielsweise noch Text suchen, Text ersetzen, Text sortieren, Binäre Suche (Suche in sortierten Listen), Erzeugen, Ersetzen, Suchen in Records, ..., mehr dateibasierte Operationen (Dateien erzeugen, kopieren, löschen), rekursive Funktionen (Fakultät, Fibonacci, ...) ...

    Interessant finde ich die Aussage 1:100 beim Vergleich C:Python.

    Dies macht Python meines Erachtens wirklich nur zur Einsteigersprache (Erste Programmiersprache) und zur Programmierung von nicht-zeitkritischen Operationen.

    Dazu fällt mir gerade etwas Interessantes ein. Ich hatte mal versucht, auf einem VC-20 (Vorgänger vom C-64 - um 1981 herum) ein Programm zur Berechnung von Energieniveaus einfachster Atome zu programmieren. Abgesehen von der Rechenzeit waren die Ergebnisse verblüffend genau.

    Dann habe ich die rechenintensivsten Vorgänge (Matrizenmultiplikationen) in Assembler programmiert. Das Programm wurde dann um den Faktor 100 - 200 schneller.

    Ein anderes Beispiel sind die Fibonacci-Zahlen. Verwendet man den herkömmlichen rekursiven Algorithmus, dann erhält man gewisse Laufzeiten (z.B. bis 30 mehrere Sekunden). Optimiert man aber den Algorithmus, indem bereits berechnete Ergebnisse "gemerkt" werden, dann braucht man für die ersten 100 nur den Bruchteil einer Sekunde.

    Die meisten zeitintensiven Berechnungen lassen sich durch konsequente Code-Optimierung nach meinen Erfahrungen um den Faktor 3 bis 5 schneller ausführen.

    Weitere Beschleunigung ist dann nur noch durch die Programmiersprache (Wechsel von Interpreter- zu Compiler-Umgebungen) sowie durch schnellere Prozessoren und weiteren Prozessoren - und letztlich durch Programmierung von Parallelprozessen möglich.

    Beste Grüsse

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • hallo,
    schon klar, jeder Benchmark hat seine eigenen Schwerpunkte.
    Meiner hat diese, andere haben andere.

    Meiner ist "Mathe-lastig", weil ich viel Arithmetik und Algebra benutze (für inverse Kinematik, Navigation, FFT, Kalman-Filter, Monte-Carlo-Filter, Astar, Neuronale Netze).
    (Übrigens sind gerade die Determinanten- und die Sortier-Tests rekursiv angelegt!)

    Deswegen und weil bereits recht genaue Daten für andere Plattformen vorliegen, interessiert mich halt speziell dieser "Benchmark" mit genau diesen Einzel-Tests und keine anderen.

    Mir kommt es auch nicht auf eine Schätzung an (1:10 oder 1:100), sondern auf exakte Daten und Fakten (genaues Laufzeitverhalten in ms).
    Daten ähnlich wie EV3-Java oder EV3-C# wären akzeptabel, besser wäre ntl. besser. ;)
    http://www.mindstormsforum.de/viewtopic.php?…start=60#p64772

    Einmal editiert, zuletzt von HaWe (8. Dezember 2014 um 11:12)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!