25 Stimmen

Sprachen schneller als C++

Es heißt, dass Blitz++ Folgendes bietet Fast-Fortran-Leistung .

Ist Fortran bei vergleichbaren Aufgaben tatsächlich schneller als normales C++?

Was ist mit anderen HL-Sprachen mit außergewöhnlicher Laufzeitleistung? Ich habe von ein paar Sprachen gehört, die C++ bei bestimmten Aufgaben übertreffen... Objective Caml, Java, D...

Ich denke, GC kann viel Code machen schneller weil es das übermäßige Kopieren auf dem Stapel überflüssig macht? (vorausgesetzt, der Code ist no für die Aufführung geschrieben)

Ich frage aus Neugier - ich bin immer davon ausgegangen, dass C++ so gut wie unschlagbar ist, es sei denn, man ist Experte für ASM-Programmierung.

58voto

David Cournapeau Punkte 74679

Fortran ist schneller und fast immer besser als C++ für rein numerischen Code. Es gibt viele Gründe, warum Fortran schneller ist. Es ist die älteste kompilierte Sprache (viel Wissen über die Optimierung von Compilern). Es ist immer noch DIE Sprache für numerische Berechnungen, so dass viele Compiler-Hersteller vom Verkauf optimierter Compiler leben. Es gibt auch andere, eher technische Gründe. Fortran (zumindest Fortran77) hat keine Zeiger und damit auch nicht die Aliasing-Probleme, die die C/C++-Sprachen in diesem Bereich plagen. Viele Hochleistungsbibliotheken sind immer noch in Fortran kodiert, das eine lange (> 30 Jahre) Geschichte hat. Weder C noch C++ haben gute Array-Konstrukte (C ist zu niedrigstufig, C++ hat so viele Array-Bibliotheken wie Compiler auf der Welt, die alle miteinander inkompatibel sind, was einen Pool von gut getesteten, schnellen Codes verhindert).

22voto

Rook Punkte 57113

Ob Fortran schneller ist als C++, ist eine Frage der Diskussion. Die einen sagen ja, die anderen nein; ich werde darauf nicht näher eingehen. Es hängt vom Compiler ab, von der Architektur, auf der man ihn ausführt, von der Implementierung des Algorithmus ... usw.

Wo Fortran hat Ein großer Vorteil gegenüber C ist die Zeit, die Sie für die Implementierung dieser Algorithmen benötigen. Und das macht es extrem gut geeignet für jede Art von numerischen Berechnungen. Ich werde nur einige offensichtliche Vorteile gegenüber C nennen:

  • 1-basierte Array-Indizierung (enorm hilfreich bei der Implementierung größerer Modelle, und man muss nicht darüber nachdenken, sondern einfach FORMEL TRANslate
  • hat einen Potenzoperator ( ** ) ( Gott, wessen Idee war es, dass eine Leistungsfunktion ausreicht? anstelle eines Operators?! )
  • sie hat, so würde ich sagen, die beste Unterstützung für multidimensionale Arrays von allen Sprachen auf dem aktuellen Markt (und es sieht nicht so aus, als würde sich das so bald ändern) - A(1,2) genau wie in Mathe
  • ganz zu schweigen von der Vermeidung der Schleifen - A=B*C multipliziert die Arrays (fast wie Matlab-Syntax mit kompilierte Geschwindigkeit )
  • er verfügt über eingebaute Parallelitätsfunktionen in die Sprache (Prüfen Sie die neue Norm zu diesem Thema)
  • sehr leicht mit Sprachen wie C oder Python zu verbinden, so dass Sie Ihre anspruchsvollen Berechnungen in Fortran durchführen können, während ... was auch immer ... in der Sprache Ihrer Wahl, wenn Sie sich dazu berufen fühlen
  • Vollständig abwärtskompatibel (da F77 eine Teilmenge von F90 ist), so dass Ihnen ein ganzes Jahrhundert an Kodierung zur Verfügung steht
  • sehr sehr tragbar (dies könnte bei einigen Compiler-Erweiterungen nicht funktionieren, aber im Allgemeinen funktioniert es wunderbar)
  • problemorientierte Lösungsgemeinschaft (da Fortran-Anwender in der Regel keine Informatiker, sondern Mathematiker, Physiker, Ingenieure ... sind, also Menschen, die nicht programmieren, sondern Problemlösungserfahrung haben und deren Wissen über Ihr Problem kann sehr hilfreich sein)

Mir fällt im Moment spontan nichts anderes ein, also muss das hier reichen.

9voto

Pontus Gagge Punkte 16933

Womit Blitz++ konkurriert, ist nicht so sehr die Sprache Fortran, sondern die jahrhundertelange Arbeit an den mathematischen Bibliotheken von Fortran. Bis zu einem gewissen Grad hilft die Sprache: eine ältere Sprache hatte viel mehr Zeit, um optimierende Compiler zu entwickeln (und, seien wir ehrlich, C++ ist eine der komplexesten Sprachen). Andererseits sind C++-Hochsprachenbibliotheken wie Blitz++ y uBLAS erlaubt es Ihnen, Ihre Absichten klarer zu formulieren als bei relativ einfachem Fortran-Code, und ermöglicht ganz neue Klassen von Kompilierzeit-Optimierungen.

Um jedoch eine Bibliothek immer effektiv nutzen zu können, müssen die Entwickler mit der Sprache und der Bibliothek gut vertraut sein. y die Mathematik. Normalerweise können Sie schnelleren Code erhalten, indem Sie eine der drei...

7voto

FORTAN ist bei der Verarbeitung von Arrays in der Regel schneller als C++, da die Sprachen Arrays unterschiedlich implementieren - FORTRAN erlaubt kein Aliasing von Arrayelementen, C++ hingegen schon. Das macht die Arbeit des FORTRAN-Compilers einfacher. Außerdem verfügt FORTRAN über viele sehr ausgereifte mathematische Bibliotheken, an denen seit fast 50 Jahren gearbeitet wird - C++ gibt es noch nicht so lange!

3voto

Grant Peters Punkte 7421

Die Sache mit C++ ist, dass es sehr nah an der Hardware-Ebene ist. Man kann sogar auf der Hardwareebene programmieren (über Assemblerblöcke). Im Allgemeinen leisten C++-Compiler ziemlich gute Arbeit bei der Optimierung (für einen enormen Geschwindigkeitsschub aktivieren Sie "Link Time Code Generation", um das Inlining von Funktionen zwischen verschiedenen cpp-Dateien zu ermöglichen), aber wenn Sie die Hardware kennen und das nötige Know-how haben, können Sie einige Funktionen in Assembler schreiben, die sogar noch schneller arbeiten (obwohl man manchmal den Compiler einfach nicht schlagen kann).

Man kann auch eigene Speichermanager implementieren (was in vielen anderen Hochsprachen nicht möglich ist), so dass man sie an die jeweilige Aufgabe anpassen kann (vielleicht sind die meisten Zuweisungen 32 Byte oder weniger, dann kann man einfach eine riesige Liste von 32-Byte-Puffern haben, die man in O(1)-Zeit zuweisen/freigeben kann). Ich glaube, dass C++ jede andere Sprache schlagen KANN, solange man den Compiler und die verwendete Hardware vollständig versteht. Es kommt vor allem darauf an, welche Algorithmen Sie verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X