Was würden Sie sagen, wären die Vor- / Nachteile zweier Ansätze zur Codierung einer allgemeinen Bibliothek (endliches Volumen, fem, dg) für Computational Continuum Mechanics? So sehe ich die Dinge im Moment. Bitte gib deine eigenen Erfahrungen an und flamme mich nicht für meine :):
1) C ++:
Generisches Programmieren, virtuelle Funktionen, Überladen, Geschwindigkeit ...: Alle verfügbaren Genreic + OOP-Tools, um alles zu erstellen, was Sie wollen
Meistens sind Bibliotheken auf niedriger Ebene verfügbar (keine weit verbreitete Entwicklung wissenschaftlicher und technischer Bibliotheken wie die für Python).
2) Python + Wrapper für Parallel Computing (pyOpenCL und andere)
riesige Menge an unterstützenden Bibliotheken verschiedener Art
Code, was Sie denken: Die Implementierung ist sehr schnell erledigt
langsamere Ausführungszeit
Wenn Sie ein Framework codieren möchten, das verschiedene Methoden unterstützt, mit komplexen Geometrien und Problemen arbeitet, welches würden Sie wählen und warum?
quelle
Antworten:
Ich würde versuchen, das Beste aus beiden Welten herauszuholen und die "Benutzeroberfläche" (dh den Funktionsrahmen, den der Benutzer Ihrer Bibliothek aufruft, um die Geometrie und andere Eigenschaften des Problems zu beschreiben) in Python zu programmieren, um das Schnelle zu erreichen Bearbeitungszeit, dann schreiben Sie die Simulationslaufzeit in C ++.
Tatsächlich würde ich wahrscheinlich sogar die Simulationslaufzeit in Python verspotten und sie dann Stück für Stück durch C ++ - Code ersetzen. Möglicherweise können Sie in Betracht ziehen, dass Ihr Python-Code eine C ++ - Quelle generiert, die kompiliert und online mit Ihrer Laufzeit verknüpft wird, sodass die eigentliche Simulation überhaupt nicht in Python aufgerufen werden muss - sondern nur die Ergebnisse am Ende zurückgibt. Das Schöne an diesem Setup ist, dass es von Natur aus agil ist: Sie beginnen mit der schnellsten und einfachsten Arbeitslösung, Sie finden schnell heraus, was funktioniert und was nicht, und sobald Sie etwas haben, das Ihnen gefällt, können Sie es beschleunigen.
(So funktioniert Maples ODE / DAE-Löser , außer dass Maple anstelle von Python verwendet wird. Vollständige Offenlegung: Ich arbeite für sie.)
quelle
Sie können Cython auch für Ihre Algorithmen verwenden. Es ist im Wesentlichen Python mit zusätzlichen Typinformationen für einige Variablen, die "schnell" sein müssen. Es übersetzt Python-Code in C-Code, der anschließend von Ihrem bevorzugten C-Compiler kompiliert werden kann. Durch vorsichtiges Hinzufügen dieser Typinformationen kann Ihr Code bis zu 150-mal schneller als naiver Python-Code sein.
quelle
Ich denke, es gibt mehr zu dieser Frage. In erster Linie wird ein Entwickler in der Regel bevorzugen, was er / sie kennt, es sei denn, es ergeben sich erhebliche Vorteile (z. B. in Bezug auf Produktivität, Entwicklungszeit und Tools). Persönlich lege ich größten Wert darauf, produktiv zu sein (Zeit ist normalerweise die knappste Ressource!), Und dies begünstigt Entscheidungen, die meiner Erfahrungsbasis nahe kommen.
Vielleicht sind auch relevante zu berücksichtigen
3) Entwicklungszeit
4) Wartung
5) Lizenzproblem
6) Produktivität und Spaßfaktor (oft übersehen!)
quelle
Dies hängt davon ab, ob Ihr Code wie folgt geschrieben werden kann:
oder muss eher so geschrieben werden:
Im ersten Fall wählen Sie aus, was Sie am liebsten einkodieren möchten. Verwenden Sie im zweiten Fall keine Skriptsprache und bereiten Sie sich nicht auf die Ausführungszeit vor.
quelle
Als Folge von Allans Antwort (dass Ihre eigene Entwicklerzeit die wertvollste Ressource ist): Verwenden Sie, was andere bereits getan haben. Sie sagen, Sie möchten eine Bibliothek für die Computerkontinuumsmechanik entwickeln, aber es gibt bereits einige, die so groß sind, dass sie fast immer bereits alles haben, was Sie benötigen. Sehen Sie sich deal.II zum Beispiel für alles an, was als Finite-Elemente-Problem geschrieben werden kann, OpenFOAM für Fluiddynamik oder PyCLAW / CLAWPACK für hyperbolische Probleme. deal.II fordert Sie zum Beispiel auf, in C ++ zu programmieren, aber in Wirklichkeit ist der Programmiergrad oft so hoch, dass man sagen könnte, es sei eine domänenspezifische Sprache für FEM-Codes mit C ++ - Syntax.
quelle