Verwendung unkonventioneller Programmiersprachen für wissenschaftliches Rechnen [geschlossen]


22

Hinweis: Der folgende Beitrag kann kontroverse Meinungen enthalten. Bitte beachten Sie, dass dies nur meine Meinung ist und nicht dazu gedacht ist, jemanden zu beleidigen.

Ich programmiere in der einen oder anderen Form seit ungefähr 1999. Ich habe zuerst R verwendet und dann später, ungefähr 2004, hauptsächlich auf Python umgestellt.

Für viele wissenschaftliche Anwendungen, zum Beispiel für die Simulation, einschließlich MCMC, sind sowohl R als auch Python zu langsam und müssen beschleunigt werden. Die übliche Vorgehensweise ist das Erweitern mit C oder C ++. Das habe ich sowohl für R als auch für Python getan, indem ich die C-API von R mit C ++ und die Boost-Python-Bibliothek mit Python verwendet habe.

Aus verschiedenen Gründen ist diese Kombination jedoch nicht die ideale Lösung. Was ist bei der Programmierung wichtig, insbesondere bei Algorithmen? Ausdruckskraft und Schnelligkeit, die natürlich zusammenhängen. Je ausdrucksvoller eine Sprache ist, desto schneller kann man darin schreiben.

1) Was die Ausdruckskraft angeht, sind meiner Meinung nach weder R noch Python wirklich ideal, um wissenschaftliche Algorithmen zu schreiben. Sie sind nicht eng mit dem zugrunde liegenden Algorithmus verknüpft. Beide sind jedoch deutlich besser als C ++.

2) Ich schreibe gerne in Python, einer angenehmen Sprache, obwohl sie, wie oben erwähnt, nicht ideal für algorithmische Arbeiten ist. Wenn man jedoch aufgrund von Geschwindigkeitsproblemen mit einer Python / C ++ - Kombination arbeiten muss, wird diese Mischung erheblich unangenehmer. Was normalerweise passiert ist, dass ich zuerst in Python schreibe und wenn ich etwas habe, das gut funktioniert, stelle ich oft fest, dass es zu langsam ist (für einen subjektiven Wert von zu langsam). Ich stehe dann vor der Entscheidung, ob ich unangemessen viel Zeit damit verbringen soll, es in C ++ umzuschreiben oder die Langsamkeit in Kauf zu nehmen. Im Nachhinein habe ich oft das Gefühl, ich hätte die Langsamkeit besser ertragen können, zumal die erzielten Beschleunigungen unvorhersehbar sind. Auch die Boost Python-Schnittstelle zwischen den beiden ist ein erheblicher Wartungskopfschmerz, und Code in zwei sehr unterschiedlichen Sprachen zusammenzukleben, lenkt nur ab. Keine Kritik an Boost Python beabsichtigt, es ist so mächtig wie man es sich vorstellen kann und funktioniert die meiste Zeit ziemlich einfach.

In einer idealen Welt mit unbegrenzter Zeit und unbegrenzten Ressourcen wäre keines dieser Probleme eine große Sache. In wissenschaftlichen Projekten, an denen ich gearbeitet habe, habe ich jedoch die folgenden Erfahrungen gemacht.

Unabhängig davon, ob ich Mitarbeiter an dem Projekt habe oder nicht, scheine ich immer den größten Teil des Computing zu erledigen. An insgesamt 5 bedeutenden Projekten war nur eine Person maßgeblich an einem Projekt beteiligt. Diese eine Person hat mehr getan, als an sich zu ziehen. er tat so viel wie ich oder mehr. In allen anderen Fällen, einschließlich Projekten mit mehreren Mitarbeitern, habe ich (praktisch) die gesamte Rechenarbeit erledigt. Obwohl ich sagen kann, dass ich nicht mit den besten Mitarbeitern gesegnet bin (es scheint eine Mischung aus Faulheit und Inkompetenz zu sein), ist mir nicht klar, ob sich diese Situation in Zukunft ändern wird.

Das rechnergestützte wissenschaftliche Arbeiten ist ein enormer Aufwand, und wenn ich das Verhalten meiner Mitarbeiter nicht ändern kann, kann ich meine Arbeitsweise ändern. Die wichtigste Verbesserung wäre, die Dinge schneller zu erledigen. Das bringt mich hier zu der Hauptüberlegung, dass ein Sprachwechsel zu etwas weniger Orthodoxem hilfreich sein kann. Basierend auf früheren Untersuchungen sind Common Lisp und Ocaml die wahrscheinlichsten Kandidaten in der Reihenfolge ihrer Wahrscheinlichkeit. Ich habe jahrelang darüber nachgedacht, aber in letzter Zeit ernsthafter darüber nachgedacht.

Soweit ich weiß, verwenden nur wenige Leute entweder CL oder Ocaml für wissenschaftliche Berechnungen. Bei der Suche auf dieser Website habe ich zwei Verweise auf CL (einer war meiner) und einer auf Ocaml (meiner) gefunden. Ich hatte im Laufe der Jahre ein paar ermutigende Kontakte zu abenteuerlustigen Menschen, die am Rande arbeiten. 2008 stieß ich auf eine Rezension von Peter Seibels "Practical Common Lisp" (das ich besitze) von Tamas K. Papp. Dies erregte meine Aufmerksamkeit, da es für Lisp eine der wenigen Erwähnungen des wissenschaftlichen Rechnens war, die mir im Internet begegnet waren. Ich schrieb an Tamas, der sofort hilfsbereit und ermutigend antwortete. Um ihn zu zitieren

Meine Programmierproduktivität hat sich mit Lisp wahrscheinlich verzehnfacht, aber das hat ungefähr ein Jahr gedauert und ich lerne immer noch (es ging mir aber nach 2 Monaten ganz gut). Wenn Sie also an etwas zeitkritischem arbeiten, verschieben Sie den Wechsel.

Sie sollten überlegen, Leute zu fragen, ich bin nicht der einzige, der über diese Dinge Bescheid weiß, andere machen wissenschaftliches Rechnen mit Lisp.

Er hat auch einen Blog und eine GitHub-Seite .

Eine andere Person, mit der ich kurz korrespondierte (im Dezember 2006), war Ira Kalet , die Common Lisp im Kontext der Radioonkologie verwendet hat.

Vielleicht gibt es andere, die wissenschaftliches Rechnen mit Lisp betreiben, aber ich kenne niemanden.

Das häufigste Problem, das Menschen mit CL anführen, ist das Fehlen von Bibliotheken. Dies ist ein schwerwiegendes Problem beim Allzweck-Computing, aber möglicherweise nicht so sehr beim wissenschaftlichen Computing, insbesondere von Grund auf, wenn Algorithmen implementiert werden. Insbesondere kann ich die meiste Zeit mit einer grundlegenden Mathematikbibliothek auskommen, einschließlich Wahrscheinlichkeitsverteilungsfunktionen, einer mehrdimensionalen Arraybibliothek und einem grundlegenden Satz von Containern, z. B. Map, Set, List usw., wie sie in den C ++ und Python-Standardbibliotheken enthalten sind.

Ich weiß noch weniger über Ocaml als über CL, habe das aber als Alternative reingeworfen. Es ist angeblich sehr schnell, wird von französischen Forschern einmalig kostenlos implementiert und scheint die beste der ML-Sprachfamilie für das wissenschaftliche Rechnen zu sein.

Abschließend frage ich mich, ob andere Erfahrung damit haben und welche Gedanken sie haben, wenn überhaupt.

BEARBEITEN: Ich interessiere mich hauptsächlich für Erfahrungen aus erster Hand im Zusammenhang mit den Themen, die ich oben besprochen habe. Wenn Sie z. B. Python und C ++ (oder R und C ++) verwendet haben und auf eine dunkelere Sprache umgestiegen sind, würde mich Ihre Erfahrung am meisten interessieren.


2
Stapelaustausch dient zum Stellen von Fragen, nicht zum Posten von Lebensgeschichten! Ihre Frage scheint zu lauten: "Gibt es wissenschaftliche Computerprojekte mit Common Lisp oder OCaml?"
Khinsen

4
Einverstanden, das liest sich ein bisschen mehr wie ein Blog-Post, aber ich mag die Prämisse. Könnten Sie versuchen, dies auf 2-3 Absätze zu reduzieren?
Aron Ahmadia

1
Auch vereinbart. Kommentare und persönliche Erfahrungen sind gut, wenn sie die Hauptfrage unterstützen. Zu viele Details können die Hauptpunkte überdecken. Wenn Sie Ihre Frage zusammenfassen können, ist es meiner Meinung nach einfacher zu lesen und es werden gezieltere und qualitativ hochwertigere Antworten angezeigt.
Geoff Oxberry

1
@FaheemMitha: In der "idealen Welt", die Sie auf halbem Weg erwähnen, wäre alles handoptimierte Montage ... Klingt für mich düster!
Meawoppl

3
@FaheemMitha: Das Beste, was Sie tun können, um Ihre Frage zu verbessern, ist, die Frage, die Sie stellen, klar zu machen. Es scheint, als würden Sie eine Geschichte über Ihre Erfahrungen erzählen (was in Ordnung ist), und am Ende begraben Sie die Frage als Aussage am Ende Ihrer Geschichte. ("Abschließend wundere ich mich ...") Das Beste, was Sie tun können, ist, diesen Teil zu einer Frage zu machen, damit die Leute, die Ihre Frage überfliegen, leicht identifizieren können, was Sie fragen. Ich musste ein paar Mal zurückgehen, um es herauszufinden.
Geoff Oxberry

Antworten:


18

Wir entwickeln Julia für genau die erhöhten Gründe. Es gab einfach keine gute wissenschaftliche Computersprache auf hohem Niveau, die auch eine ausreichende Leistung erbrachte, sodass Sie nicht ständig Teile Ihres Codes in C / Fortran neu schreiben mussten. Das Design von julia hat ein wenig lispigen Einfluss, so dass Sie es nach Ihren Wünschen finden können, während Ihre Mitarbeiter es einfach wie ein Matlab oder R behandeln können, wenn sie sich nicht für die Funktionsteile interessieren. Der Nachteil ist, dass die Sprache neu ist und noch nicht alle Bibliotheken enthält, die für den täglichen Gebrauch benötigt werden.

Mark, würde gerne Julia zu deinem Benchmark hinzufügen, um zu sehen, wie es uns geht. Schauen Sie doch mal auf unsere Mailingliste und lassen Sie uns wissen, was Sie in Julia sehen möchten, damit es für Sie nützlicher ist.


Das sieht wunderschön aus! Ich werde dies auf jeden Fall für meine eigene Arbeit überprüfen. Momentan benutze ich Python für all meine Arbeiten in theoretischer kondensierter Materie, nur weil die Zeit, die ich durch schnellen C ++ - Code gewonnen habe, durch die Zeit negiert wird, die
ich

9

Die Geschwindigkeit, Größe und Zuverlässigkeit von Programmiersprachen leistet einen wirklich guten Beitrag, um viele verschiedene Bedenken, die in Ihrer "Frage" zum Ausdruck gebracht wurden, zum Abschluss zu bringen. Es vergleicht die Geschwindigkeit und Codebasisgröße einer Reihe von Implementierungen derselben Benchmarks in 33 Sprachen!

Ich bin ein Python-Liebhaber geworden, vor allem, weil es viel häufiger ist, übermäßige Rechenzeit zu haben als übermäßige Programmierzeit. Ich bin mehr als bereit, CPU-Zyklen zu verschwenden, als einen Zeitkeil zu opfern, der etwas Interessanterem gewidmet sein könnte.

Auch +1 auf Julia. Ich denke, ich kann es ändern, wenn es ein bisschen stabiler und allgemeiner unterstützt wird, dh wenn Standardmodule für die Arbeit, die ich gerne mache, verpackt werden.


4

Für wissenschaftliche Anwendungen von OCaml siehe zum Beispiel

Für Lisp in der Wissenschaft siehe zum Beispiel

Ich bin mir sicher, dass es noch viele weitere Referenzen gibt. Ich kann jedoch kein großes Forschungsprojekt nennen, bei dem Computerarbeit in OCaml oder Lisp geleistet wurde. Wenn Sie sich für eine entscheiden, arbeiten Sie relativ isoliert.

Sie könnten auch an Julia interessiert sein , einer neuen Sprache für wissenschaftliches Rechnen, die sich derzeit in der Entwicklung befindet und deutliche Lisp-Einflüsse aufweist.


1
Ich hätte vielleicht deutlicher machen sollen, dass ich hauptsächlich an Erfahrungen aus erster Hand interessiert bin. Ich werde meine Frage bearbeiten, um dies widerzuspiegeln.
Faheem Mitha
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.