Frage:
Warum wird FORTRAN in der Computerchemie so häufig verwendet?
Melanie
2015-02-06 07:58:01 UTC
view on stackexchange narkive permalink

Ich habe Ruby verwendet, um Skripte für Forschungszwecke zu schreiben, aber ich möchte auf einige schwerere Dinge eingehen, für die Ruby einfach zu langsam ist. Ich habe festgestellt, dass einige Dinge in C und C ++ geschrieben sind, aber es gibt einen seltsam großen Anteil an Software, die in der Computerchemie verwendet wird und in FORTRAN geschrieben ist (in der ich keine Erfahrung habe).

Warum ist FORTRAN? in der Computerchemie verwendet? Soweit ich weiß, ist FORTRAN ein bisschen altmodisch ("Lochkarte" alt). Ich war ein bisschen schockiert, als ich vor kurzem geschriebene Tutorials für FORTRAN fand.

Ist es eine Art ", das ist Wie haben wir es immer gemacht? "Was oder gibt es einen Effizienzaspekt bei FORTRAN, den ich übersehen habe?

Hinweis: Möglicherweise hat FORTRAN mit späteren Programmiersprachen mit ähnlichen Namen verwechselt.

Weil die Leute vor langer Zeit angefangen haben, Code zu schreiben, und Fortran stark für die Formelübersetzung (z. B. Berechnungen) optimiert war (und ist).
Denken Sie daran, dass sich das moderne Fortran (95, 2003, 2008) stark von FORTRAN 66 oder 77 unterscheidet.
Ja, du übersiehst etwas. 1) Fortran hat eine etwas andere Semantik. Es gibt keine echten Zeiger, daher kann der Compiler bei Optimierungen etwas liberaler sein. 2) Es gibt viel Legacy-Fortran-Code. 3) Fortran ist verdammt viel einfacher als C und insbesondere "objektorientierte" Sprachen.
Für bestimmte Array-Berechnungen ist Fortran möglicherweise schneller als C / C ++, da [angenommen wird, dass sich Zeiger niemals gegenseitig aliasen.] (Http://stackoverflow.com/questions/146159/is-fortran-faster-than-c)
"nicht ganz Lochkarte"? https://upload.wikimedia.org/wikipedia/commons/5/58/FortranCardPROJ039.agr.jpg
Dieser spezielle Sprachkrieg (http://en.wikipedia.org/wiki/Software_wars) erschien ziemlich oft auf Stackoverflow http://stackoverflow.com/questions/13078736/fortran-vs-c-does-fortran-still- Halten Sie einen Vorteil in der numerischen Analyse? lq = 1 http://stackoverflow.com/questions/31672/learning-fortran-in-the-modern-era/168565#168565 http: // stackoverflow. com / question / 953869 / Ist die Rendite die Investition in das Lernen wert? lq = 1 http://stackoverflow.com/questions/146159/is-fortran-faster-than-c Geplagt von Leute, die 30 Jahre zurück sind und denken, es ist immer noch FORTRAN wie hier geschrieben.
FORTRAN war eine der wenigen verfügbaren Optionen zur Entwicklung berechnungsspezifischer Programme. Bei Lochkarten wurde das Spaltenformat (das Teil der Sprachspezifikation ist) unter Berücksichtigung von Lochkarten entwickelt.
@DavidZhang Das lässt sich leicht mit dem Restrict-Schlüsselwort beheben, das vor 16 Jahren hinzugefügt wurde.
Vergessen wir nicht, dass viele wissenschaftliche Programmierer tatsächlich schreckliche Programmierer sind und es in Fortran viel einfacher ist, etwas Vernünftiges zu schreiben als in C ++.
https://www.quora.com/What-is-the-most-popular-programming-language-used-in-computational-chemistry?share=1
LOL - Schrieb 1971 mein erstes Programm in FORTRAN mit Lochkarten. Ich frage mich, wie viele Leute wissen, wie man die Steuerkarte für einen Keypunch einrichtet. Ein weiteres verlorenes Zeichen dafür, ein Nerd zu sein, war das Wissen, wie man ein Papierband für einen Teletyp-Locher aufwickelt.
Sechs antworten:
#1
+44
Geoff Hutchison
2015-02-06 08:35:30 UTC
view on stackexchange narkive permalink

Ich glaube nicht, dass das mehr stimmt.

Einige Fortran-Anwendungen sind historisch (dh frühe Codes wurden in FORTRAN entwickelt, da dies in den 70er und 80er Jahren die beste Programmiersprache für das Knacken von Zahlen war). . Heck, der Name steht für "Formelübersetzung".

Einige Fortran verwenden ist wegen der Leistung. Die Sprache wurde entwickelt, um:

besonders für numerische Berechnungen und wissenschaftliches Rechnen geeignet zu sein.

Oft finde ich Chemiecodierer, die an Fortran festhalten, weil sie es wissen Es gibt bereits hochoptimierte numerische Codebasen.

Ich denke, die Leistungsseite stimmt nicht mehr, wenn moderne, hochoptimierende C- und C ++ - Compiler verwendet werden.

Ich schreibe a viel Code in C und C ++ für Leistung und viele Dinge mit Python kleben. Ich weiß, dass einige Quantenprogramme ausschließlich oder hauptsächlich in C ++ geschrieben sind. Hier einige Open Source-Beispiele:

  • Psi4 - Geschrieben in C ++ und Python
  • MPQC - Geschrieben in C ++
  • LibInt - Geschrieben in C ++ für effiziente Quantenintegrale.
  • LibXC - Geschrieben in C mit Fortran "Bindungen" für DFT-Austauschkorrelationsfunktionen

Dies ist meine Meinung, aber meine Empfehlung für eine schnellere Leistung in der Chemie wäre Python mit etwas C oder C ++.

Ich finde, ich Ich bin effizienter in Python codieren, teils wegen der Sprache, teils wegen der vielen Pakete, teils weil ich nicht kompilieren muss, und das ist alles wichtig.

Außerdem können Sie Python-Skripte ausführen und funktioniert parallel auf der GPU und kompiliert sie sogar, z mit Numba. Wie gesagt, wenn ich der Meinung bin, dass Leistung entscheidend ist, schreibe ich Stücke in C oder normalerweise C ++ und verlinke nach Bedarf mit Python.

Aufgrund der bloßen Verwendung empfehle ich Python derzeit für die wissenschaftliche Programmierung. Einige Stücke für ein aktuelles Projekt waren bereits als effiziente NumPy- oder SciPy-Funktionen verfügbar. :-)
Ich bin ernsthaft auf Python verkauft. Ich habe nicht viel in Python geschrieben, aber ich habe viele wirklich hilfreiche Skripte gefunden, die darin geschrieben sind. Wenn es um C oder C ++ geht, welche empfehlen Sie? Ich habe Ruby und Perl (und ein bisschen Python) nur wirklich benutzt und Perl war mir wirklich egal.
Mein Vorschlag zum Erlernen von Sprachen ist, ein Projekt dort zu haben, wo Sie es brauchen. Ich habe mir kürzlich in Python beigebracht, einfach die NumPy-Bildverarbeitung zu verwenden. Ich würde vorschlagen, Python für eine Weile zu verwenden. Wenn es dann einen leistungskritischen Teil gibt, versuchen Sie es in C oder C ++. Viele "Learn Language X" -Handbücher existieren online und in Buchform.
@GeoffHutchison, Ich würde * nie * etwas nur wegen seiner bloßen Verwendung empfehlen.
Die meisten weit verbreiteten QC-Pakete sind jedoch in fortran geschrieben.
@Wildcat Es gibt Vorteile in Bezug auf ein schnelleres Prototyping, wenn Sie das Rad nicht neu erfinden müssen.
@permeakra Ich glaube, das liegt hauptsächlich an der Geschichte. Gaussian wurde in den 70er Jahren von Pople gegründet. GAMESS wurde ebenfalls gestartet, lange bevor C viel Akzeptanz fand. Moderne Projekte sind größtenteils gemischt oder C ++.
@permeakra Für das, was es wert ist, weiß ich, dass Pople sich C ++ beigebracht hat, als er Q-Chem startete. Einige der Vorlagen-Metaprogrammierungen in Projekten wie libint lassen sich in Fortran nur schwer oder gar nicht replizieren.
@GeoffHutchison C / C ++ weist einige semantische Besonderheiten auf (insbesondere indirekter Zugriff mit Zeigern und Array-Name = Zeiger), die die Neuordnung von Lese- und Schreibvorgängen im Speicher einschränken. Aus diesem Grund kann fortran Code viel besser optimiert werden. Aus diesem Grund ist Fortran die beste Sprache für die Eingabe von Zahlen aus allen weit verbreiteten Sprachen. In modernen OpenCl-Zeiten wird die Host-Sprache jedoch weniger wichtig, sodass andere Optionen verfügbar werden.
@permeakra Ich stimme zu, aber ich möchte nicht in eine Debatte darüber geraten, welche Sprache die beste ist. Sicherlich werden beide verwendet, um hochleistungsfähige Chemiecodes zu erstellen, und OpenCL und andere Funktionen machen die Wahl der Sprache weniger wichtig.
Fortran verfügt seit langem über native mehrdimensionale Arrays mit Compiler- und Optimierungsunterstützung. C / C ++ simuliert dies dagegen mit Vektoren von Vektoren. Genau aus diesem Grund verwendeten viele Menschen Fortran weiterhin für chemische und andere wissenschaftliche Zwecke.
Eigentlich ist Python eine interpretierte Skriptsprache, was bedeutet, dass Ihr Code zur Laufzeit von einem Interpreter übersetzt wird. Es gibt also einen Kompromiss zwischen Entwicklungszeit und Geschwindigkeit. Für mathematisch / chemische Berechnungen schlägt keine Programmiersprache c / c ++. Wenn Sie Code parallel ausführen möchten, sollten Sie lernen, Ihre Programme mit mehreren Threads zu versehen
Ich sollte zwar erwähnen, dass es eine Lernkurve für effizientes und effektives c / c ++ gibt, aber ich fordere Sie auf, etwas anderes zu demonstrieren.
@AlanZ2223 Wenn das neue Programm auf opencl-fähiger Software ausgeführt werden soll, gibt es keinen großen Unterschied zu der Sprache, in der opencl verwendet werden soll. Und C ++ ist eine der schlechtesten existierenden Sprachen überhaupt.
#2
+30
Wildcat
2015-02-06 15:56:58 UTC
view on stackexchange narkive permalink

Ich denke, es ist sinnvoll, eine etwas alternative Sichtweise zu bieten und die Angelegenheit zu klären.

FORTRAN vs. Fortran

Zunächst muss man das alte FORTRAN von unterscheiden das neue Fortran, wo der Name der alten Sprache üblicherweise in Großbuchstaben geschrieben wird. Das alte FORTRAN (bis FORTRAN 77) wird zwar immer noch wegen Tonnen von Legacy-Code verwendet, aber das neue Fortran (ab Fortran 90) wird hauptsächlich verwendet, weil es eine sehr elegante und einfache, aber leistungsstarke und effizient implementierte Sprache ist zum Knacken von Zahlen .

DSL vs. GPL im Allgemeinen

Beachten Sie insbesondere, dass selbst das moderne Fortran meiner Meinung nach eine domänenspezifische Sprache em ist > (DSL) und hierin liegt seine relative Schwäche im Vergleich zu einigen Allzwecksprachen (GPL) wie dem erwähnten C ++: Fortran ist auf eine bestimmte Aufgabe spezialisiert (Zahlenverarbeitung) und möglicherweise nicht so geeignet für Einige verwandte Aufgaben (z. B. automatisierte Analyse der Endergebnisse, deren grafische Darstellung usw.)

Allzwecksprachen wie C ++ bieten Ihnen mehr Flexibilität (in Sprachfunktionen, in Bibliotheken von Drittanbietern). usw.), damit Sie nicht nur die Hauptaufgabe (Zahlenkalkulation), sondern auch die zugehörige Aufgabe in derselben Sprache lösen können. Wenn Sie jedoch Fortran für die Zahlenverarbeitung auswählen, müssen Sie für diese verwandten Aufgaben häufig eine weitere Sprache (z. B. Python) verwenden. Stellen Sie sich zwei verschiedene DSLs vor: eine für die Hauptaufgabe und eine für verwandte Aufgaben. Natürlich könnten Sie Python auch zusammen mit C ++ verwenden, aber ein erfahrener C ++ - Entwickler (der Sie sein sollten, wenn Sie sich dafür entscheiden, eine Zahl zu knacken) würde nicht unbedingt die Verwendung einer anderen Sprache anstelle seines C ++ - Biests nutzen.

Fortran vs. C ++ speziell

Das alles ist etwas subjektiv, aber hier sind meine 5 Cent. Insgesamt ist Fortran einfacher als C ++, aber (und weil) C ++ ist funktionsreicher . Grundsätzlich, weil Fortran DSL ist, während C ++ GPL ist. Und wie gesagt, dies ist bis zu einem gewissen Grad subjektiv, und außerdem ist die Komplexität eines der komplexesten Dinge im Universum, sodass wir eine Debatte darüber beginnen könnten, aber hey, nur ein Wort: Vorlagen und die Diskussion sind in Prinzip vorbei. Vorlagen machen C ++ zum Biest, aber alles hat seinen Preis.

Beachten Sie, dass ich nicht gesagt habe, dass C ++ leistungsfähiger ist, da meiner Meinung nach "funktionsreicher" nicht immer bedeutet " stärker". Es kommt vor allem darauf an, ob Sie diese zusätzlichen Funktionen überhaupt benötigen oder nicht. Im Ernst, benötigen Sie das Maß an Großzügigkeit (und Metaprogrammierung), das C ++ - Vorlagen für die Eingabe von Zahlen bieten? Nicht unbedingt. In diesem Fall wäre C ++ nicht leistungsfähiger als Fortran, obwohl es immer noch funktionsreicher ist.

Vorlagen sind nicht die einzige Funktion von C ++, die Fortran nicht bietet. Ausnahmen und Standardbibliothek - sind zwei weitere auffällige Funktionen, die Fortran nicht bietet. Auch hier ist es nicht so wahrscheinlich, dass Sie von diesen Funktionen für die Zahlenverarbeitung stark profitieren. Bei einigen anderen Aufgaben können sie jedoch sehr hilfreich sein, sodass C ++ als GPL sie enthält, Fortran als DSL für die Zahlenverarbeitung jedoch nicht. Denken Sie an Fortran als eine "Koffersprache" nur zum Knacken von Zahlen und an C ++ als eine "Amtssprachensprache" für alles.

Es gibt auch eine großartige Funktion der Fortran-Sprache, die C ++ immer noch nicht einholen konnte: Module. Ich meine, echte Module und keine alten Präprozessor-Maschinen, die mich mehr als alles andere irritieren.

C ++ hat echte Module; Wenn Ihnen die Implementierungsdetails nicht gefallen, verwenden Sie #pragma nur einmal.
#3
+17
Jonathon
2015-02-06 08:38:05 UTC
view on stackexchange narkive permalink

FORTRAN hatte früher einen Vorteil in Bezug auf die Geschwindigkeit, da Compiler viel besser optimiert wurden, was zum Teil auf die relative Einfachheit zurückzuführen ist. Jetzt, da C- und C ++ - Compiler nahezu gleichwertig (und gelegentlich besser) sind, spielen andere Faktoren wie die Programmierbarkeit eine Rolle. Es gibt jedoch auch viel Legacy-Code.

Ich arbeite in der Quantenchemie, und viele der Programme, mit denen ich arbeite, haben eine Mischung, beginnen jedoch, mehr C ++ zu integrieren. Das PSI4-Paket mischt sogar Python und C ++, um die Vorteile der Geschwindigkeit und Benutzerfreundlichkeit der einzelnen Programme zu nutzen.

Hier finden Sie eine Liste verschiedener Programme und der von ihnen verwendeten Sprache (n).

  • MPQC - C ++
  • PSI4 - C ++, Python
  • PySCF - Python
  • Q-Chem - FORTRAN, C ++
  • CFour / ACES - FORTRAN, kürzlich einige C ++
  • NWChem - FORTRAN, C
  • GAMESS (USA) und GAMESS (UK) - FORTRAN
  • Gauß - FORTRAN
  • Molpro - FORTRAN
  • Dalton - FORTRAN, einige C
  • MRCC - FORTRAN
  • MOLCAS / OpenMOLCAS - FORTRAN
  • DIRAC - FORTRAN
  • ADF - FORTRAN
  • CASINO - FORTRAN
  • COLUMBUS - FORTRAN
  • CP2K - FORTRAN
  • TURBOMOL - FORTRAN

Quantenchemie-Pakete

C / C ++ - Code im Computersprachen-Benchmark-Spiel ist sehr "hackig" geschrieben. Niemand wird dies "in der Produktion" tun, da ein solcher Code fast nicht zu warten ist. Wartbares C / C ++ würde das Fortran nicht schlagen.
Leider ist das manchmal wahr. Da jedoch C- und C ++ - Optimierungs-Compiler aufgeholt haben, gibt es andere Überlegungen wie die Benutzerfreundlichkeit.
@Wildcat Ich bin anderer Meinung; Bibliotheken wie Blitz ++, die Ausdrucksvorlagen verwenden, sind weder hackig noch nicht wartbar. Sie sind sehr einfach zu bedienen und zu warten und schlagen FORTRAN regelmäßig in der linearen Algebra.
@Alice, zuerst habe ich kein Wort über die Komplexität von C ++ - Bibliotheken gesagt. Und zweitens sind sie in der Tat sehr komplex. Wenn Sie 10 Jahre C ++ -Entwicklung haben, könnten Sie möglicherweise Ausdrucksvorlagen verstehen, aber schauen Sie, wo Sie sind: Es ist eine Chemieseite da draußen.
@Alice: Ich habe noch nie von Blitz ++ gehört. Vielleicht ist es gut, aber eine große Benutzerbasis ist auch wichtig.
@Alice: Können Sie ein Beispiel nennen, in dem Blitz ++ FORTRAN schlägt?
#4
+13
Cort Ammon
2015-02-06 11:30:43 UTC
view on stackexchange narkive permalink

FORTRAN ist eine weniger ausdrucksstarke Sprache als C ++, wodurch ältere Compiler viel effizienter optimieren konnten. Bei modernen Compilern gibt es kaum oder gar keinen Unterschied in der Leistung. Es gibt nur wenige Stellen, an denen die schwächeren Sicherheitsgarantien von FORTRAN extremere Optimierungen ermöglichen. Sie werden den Unterschied wahrscheinlich erst bemerken, wenn Sie 6 bis 10 Jahre mit der Entwicklung von FORTRAN verbringen.

Im Allgemeinen ist es einfacher, die Entwicklung in den neueren Sprachen durchzuführen, da diese die modernen Computerfunktionen besser nutzen. FORTRAN ist in seinem Format sehr streng, da es Mitte der 1970er Jahre von Computern kompiliert werden musste. Sie sagen dem Computer genau, was in seiner Sprache zu tun ist, anstatt ihm zu sagen, was Sie in einer besser lesbaren Sprache tun möchten.

FORTRAN wird immer noch aus zwei Hauptgründen verwendet, die ich aufdecken kann:

  • Einige Probleme sind einfach genug, wenn die Ausdruckskraft von C ++ verschwendet wird, und Sie können mit dem einfacheren FORTRAN tatsächlich ein klareres Programm erstellen.
  • Viele Programme werden von der vorherigen Generation erstellt. FORTRAN war in der Vergangenheit einfach besser für die Computerarbeit.
Als Entwickler, der in vielleicht einem Dutzend Sprachen entwickelt hat, gibt es keinen Grund, FORTRAN für jeden Entwickler für eine Aufgabe zu empfehlen, es sei denn, es gibt eine ältere FORTRAN-Codebasis, mit der eine Schnittstelle hergestellt werden kann. Die Leute lernen die Sprache einfach nicht mehr, was bedeutet, dass Sie jeden Code, den Sie schreiben, für immer beibehalten müssen. Es wird schwer sein, an irgendjemanden weiterzugeben.
@CortAmmon Dies ist so weit von der Wahrheit entfernt, dass es intellektuell unehrlich ist. Modernes FORTRAN wird im CERN auf dem LHC verwendet, um Gottes Willen, und kein neuer Code, der eine Legacy-Basis verwendet. Viele Dinge wurden umfassend umgeschrieben oder von Grund auf neu geschrieben. FORTRAN ist nicht annähernd weniger ausdrucksstark als C ++, wie die Vielzahl von Bibliotheken und Aufgaben zeigt, für die es verwendet wurde. Darüber hinaus lernen es immer noch Tonnen von Menschen; In einigen Umgebungen (meistens wissenschaftlich) ist dies eine erforderliche Programmiersprache.
Dies wurde positiv bewertet, was meine Aufmerksamkeit wieder darauf lenkte.Ich hielt es für nützlich, einen Link zur [Umfrage des StackExchange-Programmierers von 2019] (https://insights.stackoverflow.com/survey/2019#technology) zu veröffentlichen.Zu Alices Gunsten kann es kleine eng verbundene Populationen geben, die FORTRAN entwickeln, und in diesen Populationen kann es sich um eine wartbare Sprache handeln.In der größeren Entwicklerpopulation ist es jedoch so unbeliebt, dass es nicht einmal die Liste der Sprachen erstellt, mit denen Menschen entwickeln (der niedrigste Wert auf der Liste war WebAssembly mit 1,1%).
#5
+12
Buttonwood
2017-05-31 18:18:22 UTC
view on stackexchange narkive permalink

Ich bin auf einen Artikel in J gestoßen. Appl. Kristall. , der teilweise mit der ursprünglichen Frage zusammenhängt. Der Vergleich von Fortran mit anderen Programmiersprachen im Kontext kristallografischer Algorithmen in einem wiederverwendbaren Software-Framework ergibt dieses komprimierte Diagramm:

enter image description here

() doi 10.1107 / S0021889801017824)

Es sollte hinzugefügt werden, dass sich der Artikel auf Softwarepakete bezieht, die im alten Fortran 77-Dialekt geschrieben wurden.

Während Sprachen wie Python nicht besonders schnell sind (es wird im Grunde genommen nicht kompiliert interpretiert), ist dies irreführend. Python erleichtert den Zugriff auf hochoptimierte kompilierte Bibliotheken für bestimmte Rechenaufgaben. So können Sie die einfache Programmierung kombinieren und dennoch eine Hochgeschwindigkeits-Zahlenverarbeitung erzielen. Das ist ein Grund für die wachsende Beliebtheit.
#6
+6
Pierpy
2017-04-03 01:39:44 UTC
view on stackexchange narkive permalink

Ich glaube, es gibt zwei Hauptgründe für den breiten Einsatz von Fortran in der Computerchemie. Das erste war wegen seiner Effizienz: FORTRAN bedeutet Formelübersetzer und die wissenschaftliche / numerische Berechnung war der Hauptgrund für die Entwicklung dieses Codes.

Heutzutage ist Fortran immer noch sehr effizient, jedoch einige andere Sprachen (C ++ für Beispiel) sind so effizient wie Fortran. Aber warum codieren wir immer noch in Fortran? Grundsätzlich ist der Großteil der Software für elektronische Strukturen in Fortran geschrieben, und niemand ist so verrückt, Millionen von Zeilen zu übersetzen. Deshalb schreiben wir es in Fortran, wenn wir Codeblöcke hinzufügen! Wenn andererseits eine neue Software geschrieben werden müsste, gäbe es keine praktischen Gründe, Fortran als Sprache zu wählen. Beispielsweise wurde die neuere Software MIDAS (Universität Aarhus) zum Erhalten von Kernwellenfunktionen vollständig in C ++ geschrieben. Persönlich benutze ich Fortran90 als Sprache und es ist nicht so starr wie das alte FORTRAN77 ... und ich mag es! :) Ich habe mir tatsächlich dieselbe Frage gestellt, die Sie zu Beginn meiner Promotion gestellt haben.

+1. Sehr gute Antwort. Zumal es Ihre erste und einzige Antwort hier war. Diese Antwort sollte weitaus mehr Stimmen haben als sie.


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...