Drucken

Google Benchmark: C++ ist am schnellsten

Der Internet-Gigant Google hat nun die Ergebnisse eines Benchmarks veröffentlicht, bei dem ein Loop Recognition Algorithmus in den vier Programmiersprachen C++, Java, der Google-eigenen Sprache Go und Scala implementiert wurde. Die Lösungen wurden hinsichtlich Performanz, Codegröße, Compile Time und memory footprint verglichen und die Ergebnisse in einem Erfahrungsbericht [PDF] veröffentlicht.

Bei den vier Implementierungen haben die Google-Entwickler die in der jeweiligen Programmiersprache bekannten Standard-Idiome, Datenstrukturen, Typen und Konzepte zur Speicherverwaltung benutzt, auf spezielles Tuning durch beispielsweise Multi-Threading und andere High-Level-Konstrukte wurde bewusst verzichtet. Erst nach der internen Veröffentlichung der Ergebnisse bei Google haben sich dort einige Software-Ingenieure daran gemacht, alle Lösungen weiter zu optimieren.

„We find that in regards to performance, C++ wins out by a large margin.“

Hinsichtlich der Dimensionen Code-Komplexität, Compile-Zeit, Größe des erzeugten Artefakts nach der Kompilierung, Performanz zur Laufzeit und memory footprint haben sich einige z.T. überraschende Unterschiede ergeben.

Klarer Sieger in der Disziplin Performance war C++, auch wenn deutlich hervorgehoben wurde, das es von allen vier Kandidaten die Sprache mit der höchsten Komplexität und Lernkurve für Programmierer sei. Scala hingegen konnte in Sachen geringer Code-Komplexität punkten. Die langsame Java-Version hingegen war am einfachsten zu implementieren, aber auch am schwierigsten zu optimieren. Insbesondere das Tuning des JVM Garbage Collectors erwies sich als kniffelige Angelegenheit und erforderte hohes Experten-Know-How. Da Scala-Bytecode auch auf der JVM ausgeführt wird, gilt hier das gleiche. Obwohl Googles Go mit interessanten Sprachfeatures aufwarten kann, leidet die Sprache wohl noch unter der geringen Reife des Compilers: weder in Bezug auf die Größe des Binaries als auch der Laufzeit-Performance konnte der in Go implementierte Algorithmus überzeugen.

Die Chart-Grafik zeigt die Perfomance-Ergebnisse im Vergleich. "C++ Debug" und "C++ Opt" unterscheiden das Debug- bzw. das durch einen optimierenden C++-Compiler erzeugte Release-Build. Die GC-Versionen von Java und Scala benutzen optimierte Garbage Collector Einstellungen. Ausführliche Erklärungen zu dem Benchmark und der Ergebnisse sind in dem Google Whitepaper mit dem Erfahrungsbericht (PDF) zu finden. Alle source codes sind bei code.google.com im Projekt multi-language-bench zugänglich.

Amazon Ads...

Hosted by...

Publicons

Google Ads...

Creative Commons License

Dieses Werk bzw. dieser Inhalt steht unter einer Creative Commons Namensnennung-Nicht-kommerziell-Weitergabe unter gleichen Bedingungen 3.0 Deutschland Lizenz.

Fork me on GitHub