2009-09-13 4 views
9

Ich nehme gerade eine Mathematik-Klasse in der Universität namens "Scientific Computing" und der Professor sagte uns, dass C ist die am häufigsten verwendete Sprache für, nun, wissenschaftliche Computer und frage mich nur, wie genau dieser Professor ist?Wird C wirklich für viele wissenschaftliche Berechnungen verwendet?

+3

Sie könnten auch interessiert sein an http://stackoverflow.com/questions/38239/practices-for-programming-in-a-scientific-environment. – dmckee

+0

[Dies] (http://scicomp.stackexchange.com/questions/5159/do-i-need-to-learn-c) und [ähnliche Fragen] (http://scicomp.stackexchange.com/questions/5135/soft-question-where-does-python-fit-in-the-picture wird häufig in [Computational Science] (http://scicomp.stackexchange.com) diskutiert. Für jeden, der in diesem Thread stolpert, ist es einen Blick wert. – Damien

Antwort

23

In meinem Geschäft (Teilchenphysik) sind wir ziemlich von Fortran 77 direkt nach C++ und Python gewechselt. Diejenigen von uns, die Pflege über die Programmierung alle wissen, c, aber es ist nur für Nischenanwendungen geschrieben (Embedded DAQ-Boards, Spezial-Treiber, ...).

Aber lernen c wird Ihnen eine feste Grundlage für die Programmierung geben, und es ist selten profitabel, mit Professoren zu streiten.

+7

"und es ist selten profitabel, mit Professoren zu streiten" ... lol –

+0

+1 Ich hätte etwas Ähnliches geschrieben (kommt von einem Teilchenphysiker im Training ;-). –

7

Von dem, was ich gehört habe Fortran ist sehr häufig für wissenschaftliche Zwecke, aber C ist allgemein genug, dass für einige es eine gute Lösung für die meisten jede Art von Programmierung ist.

11

Ich glaube nicht, dass die Antwort Ihres Professors Ihnen gut dient, auch wenn es korrekt ist.

Nach meiner Erfahrung als Berater für wissenschaftliche Computer- und Datensysteme wird C sicherlich viel genutzt, aber auch Fortran und C++. Python ist mit Abstand die am häufigsten verwendete Skriptsprache.

Ich denke, das wird sich ändern. Die große Sache ist jetzt Parallel-Computing und das ist schmerzhaft (MPI jemand?) In den traditionellen Sprachen, die ich erwähnt habe. Meine Vermutung ist, dass ein Großteil der Parallelisierung auf virtuelle Maschinen übertragen wird (und sollte): Java oder .NET; Ich denke, dass die Parallelisierung die Aufgabe des JIT sein sollte. Ob das zum Beispiel mit Fortress oder einer der traditionellen Sprachen möglich ist, weiß ich nicht. Intel treibt parallel tools für C/C++, aber ich frage mich, ob etwas wie Terracotta auf lange Sicht besser sein könnte (Ich habe von niemand in der wissenschaftlichen Gemeinschaft gehört, wer es versucht hat --- große Finanzen hat, aber sie sind nicht so offen).

Wenn die Frage ist, was Sie lernen sollten, um einen Job in wissenschaftlichen Computing zu bekommen, dann das erste, was ich sagen würde, dass Sie eher für Ihre wissenschaftlichen Fähigkeiten als Ihre Programmierfähigkeiten eingestellt werden (was teilweise erklärt der traurige Zustand einer Menge wissenschaftlichen Codes, mehr dazu siehe this SO topic). Wenn Sie werden für Ihre Programmierkenntnisse (wahrscheinlich HPC) eingestellt werden, dann bedenken Sie, dass in der Meinung dieses Professors, die für neuere Projekte in nicht allzu ferner Zukunft veraltet sein können. Es würde nicht schaden, etwas Python zu kennen, einschließlich NumPy.

+0

Dies ist eine interessante Vorstellung. Dies ist in meinem Geschäft gerade nicht der Fall. Ein großer Teil unseres großen Knirschens ist IO-gebunden oder fast so (viele Nachschlagetabellen und Schreibergebnisse auf mehreren Stufen) --- aber sehr interessant. Im Moment parallelisieren wir uns auf einer Datei-pro-Datei-Basis und laufen auf lose gekoppelten Clustern. Meine Kristallkugel ist wolkig, also kann ich nicht sagen, wann sich das ändern könnte. – dmckee

4

Eine Menge "wissenschaftliches Rechnen" wird in Mathematica, Matlab und anderen ähnlichen Tools gehandhabt.

Nun ... unter der Haube, Matlab ist in C oder C++ geschrieben, denke ich, aber viele Teile von Mathematica sind in Mathematica selbst geschrieben. Natürlich, aus historischen Gründen, und auch wegen der intrinsischen Eigenschaften von C, sind viele wissenschaftliche und hochtechnologische Computersoftwarebibliotheken und dergleichen in C/C++ geschrieben.

Ich vermute, C/C++ wird weiterhin eine günstige Kante für viele Echtzeit- und Hochleistungsanwendungen genießen, vielleicht nicht so sehr für die rohe Computer selbst (die nicht in höheren Sprachen ausgedrückt werden kann), aber für lokale Optimierung von engen Schleifen und zur Kopplung mit verschiedenen Komponenten, seien es physikalische Geräte oder Softwareelemente wie zum Beispiel parallele Computer-Frameworks.

Wie dmckee darauf hingewiesen hat, bietet das Studium von c eine gute Grundlage für die Programmierung im Großen, zumindest prozedurale Programmierung. Es hat auch praktische Anwendungen, so dass die Meinung Ihres Professors derzeit stark unterstützt wird. Aber, mach!Fordern Sie weiterhin respektvoll die Weisheit heraus, die Sie von Ihren Professoren und Ältesten erhalten haben, und verstehen Sie, dass sie manchmal wie gute Zen-Meister Sie auf einen Pfad bringen, nicht so sehr für das Ziel, sondern für die Reise/den Prozess.

+2

Nun, das gesamte Mathe-Algebra-Mattieren ist an LAPACK delegiert, das auf Fortran basiert. Mit Matlab verwenden Sie implizit Fortran kompilierten Code für die meisten zeitaufwendigen Operationen. –

+0

@TimLin FWIW, MATLABs FFT-Routinen sind zum Beispiel C-Code, der vom OCaml-Quellcode erzeugt wird. –

1

C ist in der Programmierung weit verbreitet. Die meisten von uns Programmierer codieren immer in C, besonders wenn wir auf dem College sind. Es ist nur Ihre Professor Vorliebe, die ich denke :-)

5

Für Bioinformatik und Bioinformatik ist C sehr beliebt.

1

Wird C wirklich für viele wissenschaftliche Berechnungen verwendet?

Wissenschaftliches Rechnen umfasst viele verschiedene Dinge und folglich werden viele verschiedene Programmiersprachen für das wissenschaftliche Rechnen verwendet.

Traditionell bedeutete wissenschaftliches Rechnen Hochleistungsrechnen und war im Umfang auf hauptsächlich lineare Algebra und einige spektrale Methoden (z.B. FFTs) beschränkt und wurde meistens in Fortran gemacht. Seither hat sich die Breite des wissenschaftlichen Rechnens enorm erweitert, und viele Leute denken jetzt darüber nach, wie technisches Rechnen (z. B. Massendaten, Graphplotten, Prototyping) unter die gleiche Überschrift fällt und andere Menschen neue Formen des Hochleistungsrechnens wie symbolische Berechnungen aufgreifen.

Sprachen wie Python, R, Mathematica und MATLAB werden häufig für technische Berechnungen verwendet. Sprachen wie C, C++ und Fortran werden immer noch für Zahlenverarbeitung verwendet. Sprachen wie OCaml werden für groß angelegte symbolische Berechnungen verwendet.

0

Aus meiner Erfahrung in verschiedenen Labors und Forschungsinstituten würde ich sagen, dass das Erlernen einer Computersprache nur eine Grundlage und eine Einführung in die Programmierung bietet. C oder Java wären eine günstige Sprache, die Sie als Einführung aufnehmen könnten, also ist Ihr Professor zu einem gewissen Grad korrekt.

Die Möglichkeit, Ihr Wissen in einer Sprache in einer anderen Sprache anzuwenden, ist der Schlüssel zum Erfolg in der Arbeitsumgebung von Computer- und Entwicklungsumgebung. Wenn Sie sich durch verschiedene Firmen/Institute/Laborgruppen bewegen, werden Sie feststellen, dass jeder von ihnen seine eigenen Präferenzen in Sprache/Software hat. In der Lage zu sein, schnell neue Dinge zu lernen, ist wichtiger als zu versuchen, sich die Syntax einer bestimmten Sprache zu merken.

Wenn Sie eine Sprache Ihrer Wahl für ein Projekt auswählen möchten, wählen Sie natürlich 1 mit den Bibliotheken, die Sie benötigen.

1

Als professioneller Entwickler von Software für Wissenschaftler und Ingenieure kann ich sagen, dass fast alle unsere numerischen Methoden in C geschrieben sind. In unserem Fall ist es also wahr. Wir haben Taschen von C++ und Fortran. In Sachen Leistung ist es schwer, gut codiertes C und einen guten Compiler zu schlagen. Sehr, sehr gelegentlich könnten wir in die Versammlung eintauchen.

Aber die Welt hat sich sehr verändert. Python ist eine wunderbare Sprache - die netteste Sprache IMHO und kann native Bibliotheken aufrufen. Dann gibt es R wieder eine Quelle interpretierte Sprache, aber mit einer massiven Bibliothek von numerischen Methoden alle kompiliert C oder C++. Fügen Sie dann alle neuen hardwarebeschleunigten Methoden wie openCL und die vielen Bindungen hinzu ... C oder Fortran ist nicht mehr die einzige Antwort. Aber für traditionelle CPU-Zahlen sind C und ASM die Klassenbesten.

0

Ja, ANSI C begleitet von MPI.

Manchmal wollen Leute "objective C" verwenden, was bedeutet, dass sie Funktionen in Methoden der großen Klasse einfügen, und jedes Beispiel davon wird auf einem separaten Kern laufen. Beachten Sie, dass dies nicht C++ ist, sondern "C mit Objekten". Keine der C++ - Funktionen wird verwendet, mit Ausnahme des Methodenobjektmodells.Dies bringt nur das gleiche alte C in ein "rationales Objektmodell", erlaubt es Zwischenschichten zu verwenden und so weiter.

Gute Beispiele für oben: LAMMPS.

Charm ++ ist ein weiterer guter Weg, um "gutes altes C in moderner Manier" zu erhalten.

Auf anderen Hügel der wissenschaftlichen Sprachen sind LISP, Haskell und andere Meta-lang-Gruppen. Dies ist eine andere, "weiche" Welt der wissenschaftlichen Programmierung, in der die Zeit kein Problem ist, sondern die Existenz der Antwort.

Verwandte Themen