Frage

Ich besprach neuronale Netze (NN) mit einem Freund über Mittag den anderen Tag und er behauptete, die die Leistung eines NN in Java geschrieben zu einer wäre ähnlich in C ++ geschrieben. Ich weiß, dass mit ‚just in time‘ Compilertechniken Java sehr gut tun können, aber irgendwie habe ich es einfach nicht kaufen. Hat jemand eine Erfahrung hat, das Licht ins Dunkel bringen würde? Diese Seite ist das Ausmaß meiner Lektüre zu diesem Thema.

War es hilfreich?

Lösung

Die JIT-Hotspot können nun Code erzeugen schneller als C ++. Der Grund hierfür ist die Laufzeit empirische Optimierung.

Zum Beispiel kann es sehen, dass eine bestimmte Schleife dem „false“ Zweig 99% der Zeit in Anspruch nimmt und neu ordnet die Maschinencodeanweisungen entsprechend.

Es gibt viele Artikel darüber. Wenn Sie alle Details wollen, lesen Sie Sun ausgezeichnete White Paper . Weitere informelle Informationen, versuchen Sie dieses .

Andere Tipps

ich in einem Vergleich zwischen Hotspot JIT und Interesse hätte Profil-geführte Optimierung optimierte C ++.

Das Problem, das ich mit dem Hotspot JIT sehen (und jedem Laufzeit-profile-optimierte JIT-Compiler) ist, dass die Statistiken gehalten werden müssen und Code geändert. Zwar gibt es vereinzelte Fälle sind diese in schneller laufenden Code führen wird, bezweifle ich, dass Profil-optimierte JIT Compiler schneller als gut optimierte C laufen oder C ++ Code in den meisten Fällen. (Natürlich könnte ich falsch sein.)

Wie auch immer, in der Regel wirst du an der Gnade des größeren Projektes sein, die gleiche Sprache verwendet es geschrieben ist. Oder Sie werden von der Gnade der Wissensbasis Ihrer Mitarbeiter sein. Oder Sie werden von der Gnade der Plattform sein, Sie sind Targeting (eine JVM auf die Architektur Sie Targeting?). Im seltenen Fall, haben Sie die volle Freiheit und Sie sind vertraut mit beiden Sprachen, tun einige Vergleiche mit den Tools, die Sie zur Verfügung haben. Das ist wirklich der einzige Weg, um zu bestimmen, was das Beste ist.

Die einzig mögliche Antwort ist: einen Prototyp und Maßnahme für sich selbst machen. Wenn meine Erfahrung von Interesse ist, Java und C # immer viel langsamer als C ++ für die Art der Arbeit war ich tat - ich glaube, vor allem wegen des hohen Speicherverbrauches. Natürlich können Sie zu einem ganz anderen Schluss kommen.

Dies ist nicht unbedingt über C ++ vs Java-Performance, aber dennoch interessant in diesem Zusammenhang: Ein Papier über die Leistung von Programmen in einer Garbage Collection-Umgebung ausgeführt werden.

Wenn übermäßige Garbage Collection ein Problem ist, können Sie immer wieder verwenden ungenutzt High-Churn-Objekte.

Erstellen Sie eine Fabrik, die eine Warteschlange von SoftReferences recycelten Objekte hält, mit denen, die vor Erstellung neuer Objekte. Dann in Code, der diese Objekte verwendet, explizit zurückgeben diese Objekte in die Fabrik für das Recycling.

Wahrscheinlich C ++, obwohl ich glaube, dass Sie den Unterschied kaum neben einer langsamen Anlaufzeit auffallen wird. Java jedoch macht die Entwicklung schneller und Wartung zu erleichtern.

In dem großen Plan der Dinge, die Sie diskutieren vielleicht 5% Performance-Unterschied in dem Sie mehrere Größenordnung erhöhen bekommen durch CUDA oder spezielle Hardware zu bewegen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top