Javascript erreicht 50% von C++ Performance



  • Es geht doch um eine Grafikdemo, oder? Damit sind die Ergebnisse schon aussagekräftig, aber halt in einem gewissen Rahmen und nicht allgemein.


  • Mod

    Mechanics schrieb:

    Es geht doch um eine Grafikdemo, oder? Damit sind die Ergebnisse schon aussagekräftig, aber halt in einem gewissen Rahmen und nicht allgemein.

    Gerade dann ist es doch eher ein Grafikkartenbenchmark. Eine Grafikanwendung rechnet typischerweise eher wenig auf der CPU und macht die meiste schwere Arbeit in Form von Aufrufen an die Grafikschnittstelle. Das hieße dann, dass das Javascript diesen kleinen Teil derart vermasselt, dass es insgesamt deutlich langsamer ist als C. Oder dass die Grafikschnittstelle der JVM erstaunlich gut ist. Oder ganz was anderes. Ohne eine etwas umfangreichere Analyse kann man hieraus keine Schlüsse ziehen, außer dass diese Javascriptengine halbwegs gut für 3D-Grafik geeignet ist. Aber nicht solche Bildschlagzeilen wie der Threadtitel.



  • Mechanics schrieb:

    Es geht doch um eine Grafikdemo, oder? Damit sind die Ergebnisse schon aussagekräftig, aber halt in einem gewissen Rahmen und nicht allgemein.

    Nein. Es ist egal, wie gut die Programmiersprache optimieren kann, wenn das Programm den Großteil der Zeit auf die Grafikkarte warten muss. Der eigentliche Algorithmus wird auf der Grafikkarte ausgeführt und das Programm muss selber nur Daten laden, die Eingeb verarbeiten, die Transformationsmatrizen verechnen und schließlich die richtigen Daten rendern lassen. Ich weiß nicht, wieviel Javascript überhaupt macht, aber ich weiß, dass bei einfachen 3d-Szenen, das Bottleneck meistens der Grafikkartenbus oder der Rendervorgang selbst sind.
    Würde man ein paar andere Menschen einfügen, für die Kollision, Animationen und KI berechnet werden muss, würde die Performance möglicherweise ziemlich in die Knie gehen.
    Ich habe nichts gegen das Projekt, es wird aber geschlossen, dass Javascript 50% langsamer als C++ ist, obwohl die Messungen gar nicht aussagekräftig sind.

    Wenn schon, dann sollten für so eine Aussage verschiedene Berechnungen für z.B. Sortieralgorithmen, Gaussian Blur auf ein Bild, A*-algorithmus, etc gegeben und dann die Geschwindigkeit verglichen werden.



  • naja, für mich klingt das erstmal garnicht so abwegig. asm.js ist eben ein JIT-compilat JS->LLVM. Da passt shcon, dass die performance gleichauf mit Java ist. Und Java ist nunmal keine lahme Schnecke



  • SeppJ schrieb:

    Gerade dann ist es doch eher ein Grafikkartenbenchmark.

    Und ich glaube, darum gings denen vor allem auch. Also, nicht um einen Grafikkartenbenchmark, sondern um deren Engine. Die wollten doch eigentlich nur zeigen, dass man deren Engine auch im Browser betreiben kann und die Performance durchaus akzeptabel ist (trotz dem, dass JavaScript hier so langsam ist oder wie auch immer).


  • Mod

    Mechanics schrieb:

    SeppJ schrieb:

    Gerade dann ist es doch eher ein Grafikkartenbenchmark.

    Und ich glaube, darum gings denen vor allem auch. Also, nicht um einen Grafikkartenbenchmark, sondern um deren Engine. Die wollten doch eigentlich nur zeigen, dass man deren Engine auch im Browser betreiben kann und die Performance durchaus akzeptabel ist (trotz dem, dass JavaScript hier so langsam ist oder wie auch immer).

    Das haben sie dann auch erreicht. Aber es stößt keine Sprachdiskussion an, was der TE wollte.



  • Ich versteh das gerade eh nicht ganz:
    Ist 50% gut?


  • Mod

    Nathan schrieb:

    Ich versteh das gerade eh nicht ganz:
    Ist 50% gut?

    Zumindest dann, wenn man vorher in dem Ruf stand, eher 0.5 % zu haben.



  • SeppJ schrieb:

    Marthog schrieb:

    Ich wüsste gerne, wie das gemessen wurde.

    Das hier. Eine Nebebemerkung, dass irgendwas in irgendeiner Sprache 50% schneller oder langsamer ist, ist recht wertlos. ...

    +1

    Weiters: da geht's nicht um JavaScript, sondern um ein stark eingeschränktes Subset von JavaScript.

    Und dass das gleich schnell wie C# sein soll, das glaub ich auch erst wenn ich entsprechende Benchmark-Ergebnisse + verwendetem Code sehe.

    Davon abgesehen... dass JavaScript (das vollständige) für ne Skriptsprache sauschnell ist, ist eh schon lange bekannt.



  • Lustig, was für Abwehrreflexe sowas auslösen kann ...

    Marthog schrieb:

    Wenn schon, dann sollten für so eine Aussage verschiedene Berechnungen für z.B. Sortieralgorithmen, Gaussian Blur auf ein Bild, A*-algorithmus, etc gegeben und dann die Geschwindigkeit verglichen werden.

    Wie wärs damit:
    https://github.com/dvander/arewefastyet/blob/master/benchmarks/asmjs-ubench/primes.cpp
    http://arewefastyet.com/#machine=11&view=breakdown&suite=asmjs-ubench

    hustbaer schrieb:

    Weiters: da geht's nicht um JavaScript, sondern um ein stark eingeschränktes Subset von JavaScript.

    Es ging noch nie darum, asm.js von Hand zu schreiben. Dafür gibt es C++-zu-asm.js-Compiler (C++->LLVM->asm.js) und so. asm.js selbst ist eine Art menschenlesbarer Bytecode. Und wie im Benchmark zu sehen ist, ist das effektiv genauso schnell. Und ich würde sogar behaupten, es wird noch schneller, da sie sinnigerweise auf einen GC verzichtet haben.



  • Der Titel des threads ergibt, wenn man den Artikel gelesen hat, keinen Sinn. Die Unreal Engine ist doch sicherlich mit c oder c++ geschrieben. Dann hat man das statt direkt in Maschinencode eben über den Umweg von llvm bytecode in asm.js compiled. Und jetzt braucht es anscheinend "nur" doppelt so lang für gleiche Berechnungen, als wenn man es direkt in Maschinencode compiled hätte.
    Von Hand geschriebenes Javascript wäre sehr wahrscheinlich deutlich langsamer.


Anmelden zum Antworten