web-dev-qa-db-ja.com

フォートランが科学計算に使用されるのはなぜですか?

Fortranはまだ科学計算に頻繁に使用されていると読みました。 Fortranにすでに多額の投資を行っているコードの場合、これは理にかなっています。

しかし、新しいプロジェクトで他の現代言語よりもFortranを使用する理由はありますか? Fortranには、より一般的な言語(C++、Java、Python、Rubyなど)よりも科学計算にはるかに適した言語設計の決定がありますか?たとえば、Fortranの特定の言語機能により、コンパイラで数値最適化を可能にし、他の言語と比較してはるかに高度なものがありますか?

56
user782220

Fortranは、良くも悪くも、科学的な数値計算のために特別に設計された唯一の主要言語です。配列の処理はニースで、配列全体とスライスの両方で簡潔な配列操作が行われ、matlabまたはnumpyに匹敵しますが、非常に高速です。この言語は、誤って遅いコードを書くのを非常に困難にするように注意深く設計されています-ポインターは、標準的な例のようにエイリアスが存在する可能性があるかどうかがすぐにわかるように制限されているので、オプティマイザーはあなたの町に行くことができますコード。現在の化身にはcoarray fortranのようなものがあり、言語に並行してforallを組み込み、分散メモリと共有メモリの並列化、およびベクトル化を可能にします。

Fortranの欠点は、主に前述の欠点の1つの裏返しです。 Fortranには長い歴史があります。利点:たくさんの素晴らしいライブラリ。欠点:大量の歴史的な荷物。

多くの数値計算を行う必要がある場合、Fortranは依然として最も優れた選択肢の1つであり、Fortranは世界中のスーパーコンピューティングセンターで実行される最も洗練されたシミュレーションコードの多くが記述されている理由です。しかし、もちろん、それはウェブブラウザを書くのにひどい、ひどい言語でしょう。各タスクに対してそのツール。

85
Jonathan Dursi

私の主な理由は、ニース配列表記法、および科学的なコードの記述とデバッグを容易にする他の多くの設計上の決定です。通常、関連するタスク(配列操作)のパフォーマンスの観点から最良の選択であるという事実は、どちらにも害はありません:)

正直なところ、Fortranの本当の競争相手として引用されているほとんどの言語は考慮しません-Java and Rubyは利便性とパフォーマンスの両面ではるかに遅れています、C++は非常に複雑で扱いにくい言語であり、過去数年間の主な仕事がC++での毎日のプログラミング以外である人にはお勧めできない言語です。Python with numpy with options私は個人的にこの言語の大ファンではありませんが、numpyを定期的に使用しており、それに満足している多くの人々を知っています。

私が見る本当の競争はこれらからではなく、Matlab、R、および同様の利便性を提供する多くの標準ライブラリと組み合わせた同様の言語からです。幸いなことに、通常はRまたはMatlabでプロジェクトを開始し、後でパフォーマンスの重要な部分をFortranで書くことができます。

19
laxxy

まったく新しいプロジェクトはほとんどありません。科学的コンピューティングに固有のものかどうかはわかりませんが、少なくともこの分野では、おそらく他のグループ/人によって作成された既存の(科学的)モデルに基づいてアプリケーションを構築する傾向があります。必要かどうかにかかわらず、常にある程度のレガシーコードを処理する必要があります。

Fortranは多くの科学者に教えられてきたものであり、彼らが必要とする多くのライブラリが実装されているものです。それらの多くはコンピューター科学者やIT担当者ではなく、より多くの計算科学者。彼らの主な目標はめったにコンピューティングではなく、彼らの科学が最初です。多くのプログラマーは、機会があればいつでも(空き時間を含む)新しいプログラミング言語やフレームワークを学ぶ傾向がありますが、ほとんどの科学者はその時間を使って科学に関する新しいアイデアを探ります。

Fortran(または任意の言語)のトレーニングを受け、同様の状況にいる人々に囲まれたドメインエキスパートは、Fortranから離れる動機がありません。他の言語がパフォーマンスの点でFortranと同じくらい優れているというだけではなく、muchを向上させる必要があります。あなたが持っているものから離れるには十分な理由が必要です。知っています。

また、ある程度の「悪循環」でもあります。多くのJava科学アプリケーションがJavaの方法でプログラムされていないという理由だけで、JavaとFortranの比較は常に少し難しいと感じています。 Java Grande ベンチマークアプリケーションの一部は、FortranプログラムがCプログラムに変換され、コピー/貼り付け/ Javaプログラムに調整されたように見えます(メソッドで、配列の長さを余分に渡します)よく覚えていれば、配列自体の隣のパラメーターが手がかりを与えます)。このため、 そのパフォーマンスは向上しています にもかかわらず、Java(たとえば)は科学界で大きな評判を得ていません。その結果、たとえば、HPCの専門家とJavaの専門家の間にはほとんど重複がありません。ハードウェアベンダーやライブラリの実装者からであっても、ユーザーからの要求がほとんどないため、サポートがほとんど提供されないため、他の言語への移行に関心があるユーザーを思いとどまらせます。

これは、同じ(または他の)科学者が他の目的(ワークフロー管理、データ管理、Matlab、Numpyによる高速モデリングなど)に他の言語を使用することを妨げるものではないことに注意してください。

16
Bruno

私が理解しているように、利用可能なアルゴリズムの最も効率的な実装のいくつかのライブラリがあり、言語の制限にもかかわらず、Fortranをこの種の作業で人気にしている。

3
Scott Hunter