質問

私は現在、大学で「科学コンピューティング」という数学のクラスを受講しています。教授は、科学コンピューティングに使用される最も一般的な言語は C であると言いましたが、この教授がどれほど正確であるか疑問に思っています。

役に立ちましたか?

解決

私のビジネス(粒子物理学)では、Fortran 77から直接C ++とPythonに移行しました。プログラミングを気にかける人はすべてcを知っていますが、ニッチアプリケーション(組み込みDAQボード、特別な目的のドライバーなど)専用に書かれています。

ただし、cを学習することでプログラミングの強固な基盤が得られ、教授と議論することはほとんど有益ではありません。

他のヒント

たとえそれが正しいとしても、教授の答えがあなたの役に立っているとは思えません。

科学技術コンピューティングおよびデータ システムのコンサルタントとしての私の経験では、C は確かによく使用されますが、Fortran や C++ も同様です。Python は、これまでで最も一般的に使用されるスクリプト言語です。

これは変わっていくと思います。今重要なことは並列コンピューティングですが、これは私が述べた従来の言語では苦痛です (MPI は誰ですか?)。私の推測では、並列化の多くは仮想マシンに移行される (そして移行されるべきである) と考えています。Java または .NET。つまり、並列化は JIT の仕事であるべきだと思います。たとえば、次のようにしてそれが有効になるかどうか。 要塞, 、それとも伝統的な言語の一つなのか、私にはわかりません。インテルが推進している 平行ツール C/C++ 向けですが、長期的には Terracotta のようなものの方が良いのではないかと思います (科学界でそれを試した人は聞いたことがありません。大手金融機関は試していますが、あまりオープンではありません)。

科学技術コンピューティングの仕事に就くには何を学べばよいかという質問であれば、私が最初に言いたいのは、プログラミング スキルよりも科学スキルの方が採用される可能性が高いということです (これが、科学技術コンピューティングの悲惨な状況を部分的に説明しています)多くの科学コード。詳細については、を参照してください。 このSOトピック)。もし、あんたが あなたのプログラミング スキル (おそらく HPC) を求めて採用されるのであれば、この教授の意見では、それほど遠くない将来、新しいプロジェクトではそれらのスキルは時代遅れになる可能性があると考えてください。ただし、Python についてある程度知っていても問題はありません。 ナムピー.

私が聞いたところによると、Fortranは科学的な目的で非常に一般的ですが、Cは汎用性が十分であるため、一部のプログラミングではほとんどの種類のプログラミングに適しています。

バイオインフォマティクスと計算生物学では、Cは非常に人気があります。

多くの「科学計算」 Mathematica、Matlab、その他の同様のツールで処理されます。

まあ...内部では、MatlabはCまたはC ++で書かれていますが、Mathematicaの多くの部分はMathematica自体で書かれています。確かに、歴史的な理由から、またCの本質的な特性のため、多くの科学およびハイテクコンピューティングソフトウェアライブラリなどはC / C ++で記述されています。

C / C ++は、多くのリアルタイムで高性能なアプリケーションに有利なエッジを享受し続けると思われます。おそらく、ローコンピューティング自体(高レベルの言語では表現できない)ではなく、ローカルな最適化のために緊密なループ、およびさまざまなコンポーネントとのインターフェースのために、それらは物理的な機器であっても、たとえば並列コンピューティングフレームワークなどのソフトウェア要素であってもです。

dmckeeが指摘したように、cの研究は、少なくとも手続き型プログラミング全般のプログラミングの優れた基盤を提供します。また、実用的なアプリケーションもあるため、この時点で教授の意見には強い裏付けがあります。しかし、やる!敬意を表して、教授や長老から受け取った知恵に挑戦し続けます。時には、善良なマスターのように、彼らはあなたを目的地ではなく旅行/プロセスのための道に置くことを理解しています。

Cはプログラミングで広く使用されています。私たちのほとんどは、私たちが大学にいるときは特にCでコーディングしているプログラマーです。それはただあなたの教授の好みだと思う:-)

  

Cは本当に多くの科学計算に使用されていますか?

科学計算にはさまざまなものが含まれているため、科学計算にはさまざまなプログラミング言語が使用されています。

従来、科学的計算は高性能計算を意味し、ほとんど線形代数といくつかのスペクトル法(FFTなど)に範囲が限定され、ほとんどはFortranで行われていました。それ以来、科学計算の幅は非常に広がり、多くの人々は現在、技術計算(例:データのマス化、グラフのプロット、プロトタイピング)が同じ見出しになり、他の人々はシンボリック計算などの高性能コンピューティングの新しい形態を採用することを検討しています。 / p>

Python、R、Mathematica、MATLABなどの言語は、一般的に技術計算に使用されます。 C、C ++、Fortranなどの言語は、引き続き数値演算に使用されます。 OCamlのような言語は、大規模な記号計算に使用されます。

科学者やエンジニア向けのソフトウェアを作成するプロのプログラマーとして、私たちの数値的方法論のほとんどすべてがCで書かれていると言えます。 C ++とFortranのポケットがあります。パフォーマンスの点では、適切にコーディングされたCと優れたコンパイラーに勝るものはありません。非常に、非常にまれに、アセンブリに浸ることがあります。

しかし、世界は大きく変わりました。 Pythonは素晴らしい言語です-私の最高の言語であり、ネイティブライブラリを呼び出すことができます。次に、ソース解釈言語であるRがありますが、すべてCまたはC ++でコンパイルされた数値メソッドの膨大なライブラリがあります。次に、openCLや多くのバインディングなど、すべての新しいハードウェアアクセラレーションメソッドを追加します... CまたはFortranだけが唯一の答えではありません。しかし、従来のCPU数の処理では、CとASMがクラス最高です。

さまざまな研究室や研究機関で働いた経験から、コンピューター言語を学習することは、プログラミングの基礎と入門を提供するだけだと思います。 CまたはJavaは紹介として取り上げるのに適した言語であるため、教授はある程度の範囲で修正する必要があります。

1つの言語の知識を別の言語に適用できることが、計算/開発作業環境で成功するための鍵です。さまざまな企業/研究所/ラボグループを移動すると、それぞれが言語/ソフトウェアの好みを持っていることがわかります。特定の言語の構文を覚えようとするよりも、新しいことをすばやく学習できることが重要です。

もちろん、プロジェクトに選択した言語を選択できるようになった場合は、必要なライブラリがある1を選択してください。

はい、ANSI CはMPIを伴います。

「客観的なC」を使用したい場合があります。これは、大きなクラスのメソッドに関数を配置することを意味し、そのすべてのサンプルは別々のコアで実行されます。これはC ++ではなく、「C with objects」であることに注意してください。メソッドオブジェクトモデルを除き、C ++機能は使用されません。これは、同じ古いCを「合理的なオブジェクトモデル」にラップするだけで、中間層などを使用できます。

上記の良い例:LAMMPS。

Charm ++は、「古き良きCを現代的な方法で」取得する別の良い方法です。

他の科学言語の丘には、LISP、Haskell、およびその他のメタ言語グループがあります。これは他の「ソフト」です。時間は問題ではなく、答えの存在である科学プログラミングの世界。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top