HPC用のC ++とFortran


56

私の計算科学のPhDプログラムでは、ほぼすべてC ++とFortranで作業しています。一部の教授は他の教授よりも一方を好むようです。特定の状況において、どちらが「優れている」のか、一方が他方より優れているのか疑問に思っています。


12
私の意見では、高レベルと低レベルの言語を混在させる方が、どちらか一方のみを使用するよりも優れています。たとえば、Python + C ++を使用します。
ファヒムミサ

2
この質問に対する答えはほとんど純粋に主観的であり、したがって、この質問が適切かどうかはわかりません。
ジェフ

回答:


61

多くの場合、選択は(1)解決しようとしている問題、(2)持っているスキル、および(3)一緒に働く人々(ソロプロジェクトでない限り)に依存します。(3)は、個々の状況に依存するため、とりあえず残しておきます。

問題の依存関係:Fortranは配列処理に優れています。問題を単純なデータ構造と特定の配列の観点から説明できる場合、Fortranはうまく適応しています。Fortranプログラマーは、非自明な場合(たとえば、グラフの表現など)でも配列を使用することになります。C ++は、複雑で動的なデータ構造により適しています。

スキル依存:優れたFortranプログラムを書くよりも優れたC ++プログラムを書くには、はるかに多くのプログラミング経験が必要です。プログラミングの経験がほとんどなく、仕事のその側面を学習する時間があまりない場合は、C ++を学習するよりも、Fortranを学習する方が投資収益率が高くなる可能性があります。もちろん、あなたの問題がFortranに適していると仮定します。

ただし、プログラミングには、FortranとC ++だけではありません。Pythonなどの動的な高レベル言語から始めることを、計算科学に興味のある方にはお勧めします。あなたの時間はCPU時間よりも価値があることを常に覚えておいてください!


17
「あなたの時間はCPU時間よりも価値があることを常に覚えておいてください!」HPCで働く人として、私はその部分に同意しません。他のすべてがスポットです。
レヴィ・モリソン

19
「あなたの時間はCPU時間よりも価値があることを常に覚えておいてください!」科学研究で働く人として、私はその部分にこれ以上同意できませんでした。
14

3
「あなたの時間はCPU時間よりも価値があることを常に覚えておいてください!」-私は2セントを投入したい-数百のノードを使用し、それぞれが10コア以上で数週間プログラムを実行することは、さらに数週間で最も貴重なリソースの恐ろしい浪費と解釈できる数日で実行されるコード。これらのHPCクラスターは、まれで高価な共通リソースです。
-Dani_l

「あなたの時間はCPU時間よりも価値があることを常に覚えておいてください!」、1週間のコードで1か月実行する、これは非常に普通の先生です!
フロントヘム

6
「あなたの時間はCPU時間よりも価値があることを常に覚えておいてください!」、私は1か月間コーディングし、1週間で実行したいです!-コードが書かれればもっと多くのことができ、他の人もあなたが書いたコードをより便利に見つけるでしょう。
チャールズ

37

C ++とFortranの両方が十分であり、うまく機能すると思います。

ただし、Fortranは数値科学計算、配列を使用して表現できるアルゴリズム、および他の高度なデータ構造を必要としないため、有限差分/要素、PDEソルバー、電子構造計算などの分野で優れていると思います。Fortranはドメイン固有の言語です。特に、科学者(必ずしもコンピューター科学の専門家である必要はない)によって、C ++よりもFortranで高速プログラムを作成する方が簡単だと思います。

C ++は汎用言語なので、その中で任意のアルゴリズムを表現できます。配列を使用して表現できないアルゴリズムには、HPCフィールドから、おそらくいくつかのグラフ、メッシュジェネレーター、シンボリック操作などの方が間違いなく優れています。

C ++で配列アルゴリズムを書くことも可能ですが、私の経験では、より多くのコンピューターサイエンスの知識と一般に多くの作業が必要です(つまり、配列操作のためにクラスを作成または再利用し、メモリ管理を手動またはTrilinosのTeuchosのようなライブラリ)。非専門家はかなり良いFortranプログラムを書く傾向がありますが、恐ろしいC ++プログラム(私自身の経験から話しています)。

免責事項:私は個人的にFortranが大好きで、数値計算ではC ++よりもFortranを好みます。私は2年以上毎日C ++でプログラミングに費やし、ほぼ1年は現代のFortran(毎日、有限要素領域)でプログラミングしました。私もPythonとCythonをよく使います。


1
バランスの取れた最初の答えに1つ。C ++とFortranだけが、現代のHPCの唯一の可能性ではないと思います。Fortran、C ++、Python(または好きなもの)を決定するとき、長所と短所を知ることは良いことだと思います。1つのファイルに20.000行のFortranがあり、数十年にわたって有機的に成長してきました。私は個人的に、孤立した重いアレイコンピューティング以外には使用しません。出力に関連するものでもありません。これまでの偏ったコメントについて。
shuhalo

6
私はこの反応にこれ以上異議を唱えられませんでした。有限要素コードは、Fortranで記述できませんでした。実際、15年前にプレーンCとFortranの組み合わせとして始まり(後者はメソッドの数値的に集中した部分を対象としています)、徐々に純粋なCに移行し、数年かけてC ++に移行しました。コードは一貫して短く、速く、理解しやすくなり、繰り返しごとに機能が向上しました。私は、C ++があなた自身を撃つためのたくさんのロープをあなたに与えると指摘する他の人たちに同意します。最も使いやすい言語を選択してください。
ビル・バルト

6
ビル、最新のFortran(90以降の追加)を使用しましたか?これは非常に重要です(これについての答えはもっと明確にすべきでした)。もちろん、「Fortranの20.000行」、つまりf77は、よく書かれたC ++よりも優れているわけではありません。
オンドレジ・セティク

1
@OndřejČertík:現代の有限要素プログラムが「単純な」データ構造を使用していると信じているなら、最近それらのどれも見ていないと思います。単純なデータ構造を使用して、非構造化メッシュに適応有限要素、hpメソッド、またはマルチグリッドを実装してみてください。ビルはすぐそこにいます。「現代のFortran」を使用しても、小さな違い以上のことはほとんどないと言って、彼に代わって話すことができると思います。
ウルフギャングバンガース

6
@WolfgangBangerth、たとえばPhaml(math.nist.gov/phaml)を参照して、あなたが言及したほとんどすべてのFortran実装を参照してください。
オンドレジ・セティク

31

あと2セントも投げますが、このスレッドを見たばかりで、後世のために、必死にやらなければならない点がいくつかあると感じています。

以下では、C ++ではなくCについて説明します。どうして?さもなければ、本格的な動的型付けされたオブジェクト指向言語をFortranのような静的なものと比較するのはリンゴとオレンジです。はい、最新のFortran標準の一部の最新の実装はそれ以上のことを実行できますが、実際にそれらを使用する人は非常に少ないため、Fortranについて話すとき、単純で静的で命令型の言語だと思います。ここでCも使用されているため、次の点でCをC ++に置き換えます。

まず第一に、より優れたコンパイラーを持つFortran / Cの議論は議論の余地があります。専用のC / Fortranコンパイラーは過去のものです。gcc / gfortranとicc / ifcはどちらも、同じバックエンドに対する異なるフロントエンドです。つまり、プログラムはフロントエンドによって抽象記述に変換され、その後、バックエンドによって最適化およびアセンブルされます。意味的に、FortranまたはCで同じコードを記述すると、コンパイラーはどちらの場合も同じアセンブリを生成し、同じ速度で実行されます。

これは今、私の2番目のポイントにつながります:なぜまだ違いが見られるのですか?問題は、FortranプログラマーがCで何かを試したり、その逆を行ったりすることで、ほとんどの比較が行われることです。ほとんどの作家や詩人が母国語で書くことを好むことに気付いたことはありませんか?あなたは完全に自信がない、または家にいると感じない言語で詩を書きたいですか?もちろんそうではありません...私自身は、Cを私の「ネイティブ」プログラミング言語だと考えています。ただし、Fortranのみを使用したグループで3年間働き、ある程度の流さを達成しました。ただし、Cの方が使いやすいので、Fortranで自分で何かを書くことは決してありません。その結果、定義するコードはより良くなります。

主な違いは、言語ではなくプログラマーです。違いはありませんか?まあ、そうではありません。以下に例を示します。

  • SIMD:SSE、SSE3、またはAltiVecのいずれであっても、Fortranで使用したい場合は、コンパイラーが目的を正確に推測、実行することを望みます。幸運を。Cでは、一般に各アーキテクチャの組み込み関数、または最近ではgccの一般的なSIMDベクトル型があります。ほとんどのFortranコンパイラはSIMD命令のみを使用してループを展開しますが、データの短いベクトルで非自明な方法で動作するカーネルを使用している場合、コンパイラはおそらくそれを認識しません。

  • 異なるハードウェアアーキテクチャ:CUDAアーキテクチャ全体がCのカーネルを中心に構築されています。はい、ポートランドグループにはCUDA対応のFortranコンパイラもありますが、商用であり、最も重要なのはNVIDIA製ではありません。同じことがOpenCLにも当てはまります。OpenCLについては、いくつかの基本的な呼び出しのみをサポートする最近のプロジェクトが最高です。

  • 並列プログラミング:はい、MPIとOpenMPの両方がCとFortranの両方で問題なく動作します。ただし、スレッドの実際の制御が必要な場合、つまり、完全に動的な共有メモリ計算がある場合は、Fortranを使用することになります。Cには、標準のpthreadがあります。これは、暖かくあいまいではありませんが、それでも嵐を乗り越えます。一般に、スレッド、プロセス、ファイルシステムなど、オペレーティングシステムへのアクセスに依存するほとんどの計算は、Cを使用したほうが適切です。Fortranで独自のネットワークを作成しようとしないでください。

  • 使いやすさ:FortranはCよりもMatlabに近いです。さまざまなキーワードと変数の宣言方法をすべて理解すると、残りのコードはMatlabのようになり、プログラミングの経験が限られているユーザーにとってアクセスしやすくなります。

  • 相互運用性:Cで構造体を作成すると、実際のデータのレイアウトは単純で決定的です。Fortranでは、ポインター配列または構造化データを使用する場合、データの実際のレイアウトはコンパイラーに強く依存しており、単純ではなく、通常は完全に文書化されていません。CをFortranから呼び出すこともできますが、Cを静的配列以外のものに渡したり戻したりするのは簡単だとは思わないでください。

これはややギークで低レベルなものですが、これは私たちが話している高性能コンピューティングですよね?基盤となるハードウェアパラダイムを最大限に活用する方法、つまり共有/分散メモリ、スレッド、SIMDベクトル化、SIMTを使用するGPUなどに最適なアルゴリズムを実装および/または開発する方法に興味がない場合は、コンピューターで計算するだけです。

これは私が書いたものよりもずっと長くなったので、ここに要約があります-ある種の持ち帰りメッセージのセットです:

  • あなたが最もよく知っている言語であなたができる最高のコード書くでしょう。
  • 同じバックエンドを使用する2つのコンパイラによって生成されるコードの品質に違いはありません。ある言語または別の言語で悪いコードを記述するのは私たちです。
  • より低レベルであるにもかかわらず、Fortranは非常に高レベルの抽象化であり、SIMD、スレッド、ネットワークなどの特定のハードウェア/ OS機能に直接アクセスすることはできません。

5
いい反応。しかし、最終的なコメントは必ずしも真実ではないと思います。私自身はCプログラマですが、優れたプログラミングプラクティスを通じてFortranの低レベルのものにアクセスできます。SIMD opsのようなものを利用する理想的な方法は、それを強く示唆するコードを記述し(例えば、ループをブロックする)、コンパイラーにそれをさせることです。スレッド化には、単にopenMPを使用します(pthreadsは追加の作業を行うことでも使用できます)。Fortranには、一般的なユーザーにとって重要なレベルである数値のみで、言及していないすべてのものがあります。
-Reid.Atcheson

@ Reid.Atcheson:コンパイラーがキャッチするようにすべてをブロックアウトすると、CとFortranの両方で自動的に動作します。問題は、コンパイラをどこまで信頼したいですか?そして、あなたが何をしたいのかを正確に知っている場合、なぜあなたはそれを信頼しなければならないのですか?OpenMPはスレッド化を実行します、はい、しかしブロック単位です。さまざまなことを行うためにさまざまなスレッドプールを取得するように仕向けることができますが、それはOpenMPの誤用です。FortranのPthreadは、C関数の単なるラッパーです。ただし、詳細に興味がない場合は、Fortranの方が簡単です。
ペドロ

1
確かに、コンパイラに依存して本格的な99%のピーク効率を達成することはできませんが、簡単に非常に近くなることができます。さらに、組み込み関数またはインラインASMを使用する必要があります。プログラマーの全体的な効率のためにどこかに譲歩する必要があります。そもそもプログラミング言語が存在するのです。あなたが実際に組み込み関数やASMの詳細に触れるほど正気でない段階では(私は数回来ました)、Fortranは松葉杖ではありません。とにかく、あなたの組み立てられた手で最適化されたコードをリンクする方法を知っているでしょう。
-Reid.Atcheson

@ Reid.Atcheson:並列HPCアプリケーションの場合、99%のピーク効率をはるかに下回る可能性があると主張します。gccベクタータイプにより、組み込み関数の使用は問題になりません:)
Pedro

1
@Pedro、素晴らしい投稿。絶対に素晴らしい。投稿してくれてありがとう。おもしろいスレッドをランダムに調べながら見つけました。
審問

16

科学ソフトウェアについての15年間の考えから:Fortranで記述したためにコードの実行が25%速くなったが、記述に4倍の時間がかかった場合(STLなし、複雑なデータ構造の実装の難しさなど)、Fortran 1日のかなりの部分を親指をいじり、計算が完了するのを待っている場合にのみ勝ちます。ほとんどすべての人にとって最も価値のあることは私たち自身の時間であるということを考えると、結論は次のとおりです。コードを開発、デバッグ、テストできる言語を使用します。 Fortranで作成しました。


13

私のアプローチは、通常はアセンブリで作成するのが最適な計算カーネル以外のすべてにC ++を使用することでした。これにより、従来のHPCアプローチのすべてのパフォーマンスが得られますが、たとえばSGEMM / DGEMM / CGEMM / ZGEMMなどの計算カーネルを単一のルーチンにオーバーロードするなどして、インターフェイスを簡素化できます。明らかに、生のポインタを避け、不透明なクラスに切り替えることで、抽象化レベルをはるかに高くすることができますが、それは素晴らしい最初のステップです。

C ++の最大の欠点は圧倒的にコンパイル時間の増加ですが、私の経験では、開発時間の節約はそれを補う以上のものです。もう1つの欠点は、ベンダーのC ++コンパイラーがベンダーのCおよびFortranコンパイラーよりも多くのバグを持つ傾向があることです。過去1年で、C ++コンパイラの10個近くのバグに遭遇したと思います。

以上のことから、低レベル言語(およびFortran)で作成された科学パッケージを取り消すことは、洗練されたデータ構造の便利なインターフェイスを公開することに抵抗があると思います。ほとんどの人は、Fortran BLASインターフェイスに満足しているだけです。ポインターと主要な次元を使用して行列を記述しますが、通常の40整数Fortranスパースダイレクトソルバーインターフェイスは便利に近いと主張する人はほとんどいません(UHM、SuperLU、PETSc、Trilinosを参照)。

要約すると、低レベルの計算カーネルにはアセンブリを使用しますが、特に重要なデータ構造を操作する場合は、他のすべてに高レベルの言語を使用することをお勧めします。

y:=αバツ+y


2
小さなカーネルをコンパイルするために適切な最適化が有効になっている標準のCコンパイラを信頼しないのはなぜですか?そのレベルのコードサイズと複雑さでは、コンパイラが何を引き出すことができるかの違いは明確ではありません。
ピーターブルーン

1
私は、適切な制限使用法でさえ、FortranはCおよび/またはC ++コードよりも高速であり、明示的な行列転置のような操作を行うと私に言った数人と話しました。CやC ++のコードを高速にすることは不可能だと言っているわけではありませんが、Fortranコンパイラはより良い仕事をする傾向があります。
ジャックポールソン

「restrict」キーワードでも同じ経験があります(私の単純なFortranコードは常に少し高速でした)。しかし、私の専門知識は限られており、gccから生成されたアセンブリの理解に投資する時間はありません。だから私は単純にFortranを使用します。それはシンプルで高速です。
オンドレジ・セティク

@JackPoulson:コンパイラーの議論は、Fortranコミュニティーから多くのことを聞いています。残念ながら、gccやifc / iccなどのほとんどのコンパイラは、同じバックエンドに対して異なる言語のフロントエンドを使用します。最適化とコード生成を行う機構は同一であるため、結果の違いはおそらく、プログラマーが基礎となる言語に精通していることの違いによるものです
Pedro

1
Fortranが数値カーネル上で高速であるという、頻繁に繰り返され、めったに検証されない主張について少しだけ説明するために、しばらく前に、TrilinosのEpetraパッケージのスパース行列ベクトル乗算が、取引II 前者は単純なFortran 77で記述され、後者は「restrict」を使用しない単純なC言語で記述されています。両方とも約10〜15行のコードがありました。現在、Trilinosはdeal.IIから引き上げられたコードを使用しています。F77がCよりも高速であるケースをたくさん見つけることができると確信しています。ポイントは、普遍的ではないということです。
ウルフギャングバンガース

8

私はここに新しいので、私は古い質問を探していて、これを見つけました。古いものに答えることはタブーではないことを願っています!

他の誰もこれに言及していないので、私はそう思いました。Fortran 2003は、ほとんどの主要コンパイラ(intel、ibm、cray、NAG、PCG)でほぼ完全にサポートされており、最新のリリース4.7のgccもサポートしています。Fortran 2003(および2008)はオブジェクト指向言語ですが、C ++より少し冗長ですが。Fortranの良い点の1つは、標準委員会が科学コンピューティングを主な対象と見なしているという事実です(先日、これを指摘してくれたDamian Rousonに感謝します)。

これをすべて取り上げて、C ++プログラマーがFortranプログラマーになるのではなく、Fortranの人々が、C ++に切り替えるか、Fortran 90/95でオブジェクト指向の概念をエミュレートする以外に、より多くのオプションがあることを知っているようにします。

私が付け加える一つの注意点は、コンパイラーに実装されているものの最先端にいるためのコストがあるということです。現在Fortran 2003で主要なプロジェクトに着手している場合、バグに遭遇し、コンパイラを更新する必要があります(特にgccを使用している場合)。ただし、過去数か月で大幅に改善されました。


7

C ++の問題は、たとえばSTL、例外、クラス(仮想オーバーヘッドに加えてアライメントの問題)、オペレーターのオーバーロード(冗長な新規/削除)またはテンプレート(終わりのないコンパイルと不可解なエラー)良さそうに見えますが、この方法で何時間も無駄にすることができます。

ただし、一般的なライブラリへのアクセスが向上し、コードの可視性が向上する可能性が高くなります(ただし、これはフィールドに大きく依存しますが、純粋なCが残っています)。また、R、Lush、Matlab / Scilab、さらにPython、Ruby、Luaなどのスクリプト言語でコードをラップすることで、Fortranの柔軟性の欠如を補うことができます。


1
一般に、高レベル言語で低レベルのテクニックを適用することは悪い考えです。たとえば、STLは非常に抽象的なレベルで動作するように設計されています。インターフェイスが何のために設計されているかを認識し、それをこのタスクに使用してから、コンパイラーの方法から抜け出す必要があります。
shuhalo

2
mbqとMartinのポイントはどちらも不公平だと思います。はい、std :: list <double>を使用して線形代数の目的で数値ベクトルを実装しようとすると、自分自身を撃つ方法があります。しかし、それは馬鹿げた議論です。少なくともC ++に、使用できるリンクリストクラスがありますが、Fortranにはありません。「車は非常に高速で走行するので、壁にぶつかってけがをする可能性があります。代わりに馬車を使用してください。」高レベルの機能を持つために低レベルのもの(C ++など)もサポートする高レベル言語を破棄するのは、ばかげた考えです。
ウルフギャングバンガース

@WolfgangBangerthいいえ、今あなたはFortranを傷つけています-それはバクテリアが人間ほど進化していないのと同じくらい「低レベル」です。車のアナロジーが必要な場合は、「ジープとレクサスの両方を使用して沼地の小道を渡ることができますが、最初のものを使用する方が痛くない」ということです。
mbq

1
あなたの意見に感謝しますが、FortranはC ++ほど進化していません:
Wolfgang Bangerth

7

3つの事実:

  • CのF77スタイルのn次元配列:CnD(恥知らずなプラグイン)を使用しても問題ありません

  • F90のモジュールシステムは設計が不十分で、環境を構築するのに敵対的です。(モジュールの名前はそのファイル名と一致する必要はありません、例えば)

  • Fortranはリファクタリングをうまくサポートしていません。関数からいくつかの機能を引き出すには、実際のコード、変数宣言、引数宣言、引数リストの4つの場所に触れる必要があります。Cは2箇所のタッチでうまくいきます。これは、データをうまく管理できなかった場合の影響をさらに悪化させます(以下で説明します)。

個人的な印象:

  • Fortranは、データの管理には適していません。F77またはF90でユーザーが不透明なデータ構造へのポインターを返してみてください。(transfer()、ここに来る)

こんにちは、アンドレアス!CnDは興味深いです、私はそれについて知りませんでした。ああ、あなたはそれを書いた。:)(f90は、スライス、配列の割り当て可能、そして最も重要なこと-乗算、加算などの配列構文もサポートしています。)私は、FortranでCMakeを使用し、モジュールでうまく動作します。「引数リスト」とは正確には何ですか?これらを使用するとは思わないので、変更するのに必要な場所は3つだけです。Cでは、通常、実際のコード、パラメーター、ヘッダーファイルを変更する必要があるため、3箇所にもなります(ほとんどの場合C ++で)。はい、transfer()はそれほど良いものではありませんが、通常は実際には必要ありません。
オンドレジ・セティク

3
最新のFortranのリファクタリングは、日食のPhotranのような適切なIDEでは簡単です。

2
「モジュールの名前は、そのファイル名と一致する必要はありません。例えば」冗談を言っているに違いありません。1つのファイルに多くのモジュールを含めることができます。それらのいくつかは数行にまたがっています。各ファイルを作成する必要がない場合は、作成がはるかに簡単です。
ウラジミールF

1
@ user389が言ったことに加えたかったのですが、Photranは優れており、リファクタリングを許可する唯一のFortran IDEですが、パーサーは常に失敗します。一方、Eclipseはメモリを大量に消費するという事実についてコメントする必要はありません。
アストロフアンル

5

Fortranは配列/行列の計算用に最適化されており、あらゆる種類のテキスト解析で作業するのは大変な苦痛です。CおよびC ++は数値計算でFortranと一致しない場合があります(近い)が、C / C ++でテキストを処理し、データ(カスタムデータ構造)を整理する方がはるかに簡単です。

他の人が述べたように、動的なインタプリタ言語を数えないでください(Pythonなど)。Fortanの顔を溶かす速度を前もって提供することはできませんが、実装のすべての詳細よりも、計算の問題を解決することに集中することができます。多くの場合、ソリューションをPythonで実装できます。パフォーマンスが許容できない場合は、プロファイリングを行い、問題領域を特定し、Cythonを使用してそのコードを最適化するか、プログラム全体をコンパイル済み言語で再実装します。問題解決ロジックを具体化したら、残りは単なる実装であり、コンピューティングの基礎を十分に理解していれば、さまざまなプログラミング言語で簡単に表現できます。


そのとおり。テキストの解析には、Pythonも使用します。
オンドレジ・セティク

また、C ++などのコンパイル済み言語でPythonスクリプトの一部を実装し、フックすることもできます。たとえば、Python、SwigなどのBoost Python
Faheem Mitha

4

私は現在、国立研究所のいずれかで働いています。私の周りの人々のほとんどは機械エンジニアです。HPCグループの何人かの人々とおしゃべりして、彼らはほとんどがLinuxで、ほとんどがC ++です。私が現在所属しているグループは、主にデスクトップアプリケーションを実行しており、C#、FORTRAN、Python、VBAおよびVB(.NETではなく6)の降順でWindowsを使用しています。使用するシミュレーションエンジンの一部は、FORTRANの他の国立研究所で作成されました。


4

古いスレッドを掘り下げてすみませんが、2015年でもFortranが多く使用されているようです。

私はちょうどこの(代替リンク)リストに出会いました。これは基本的に、2018年に研究者が利用できる300ペタFLOPSサミットマシンで実行するためにDOEのOCLF施設によって承認された13コードのリストです。コード(クイックGoogle検索に基づいて)のために、ここに私が見つけたものがあります:

XGC Fortran

SPECFEM Fortran

ACME Fortran (Bunch of climate codes)

DIRAC Fortran (Mostly)

FLASH Fortran

GTC Fortran

HACC C/C++

LS-DALTON Fortran (some C)

NAMD C/C++

NUCCOR Fortran

NWCHEM Fortran

QMCPACK C++

RAPTOR Fortran

したがって、13のコードのうち、少なくとも10(私のクイック検索に基づく)はFortranで書かれているようです。50歳の言語にとって悪くない。

注:言語比較は役に立たないことはよく知っていますが、Fortranの口数の少ない人(特にC ++ユーザー)を考えると、言及する価値があると思いました。


3
国立研究所での私の経験は、どちらかといえば反対だったので、私は同意しません。Lawrence Livermoreで見たほとんどの新しいプロジェクトはC ++で書かれており、ODEソルバー、FEM離散化、および汎用科学計算ライブラリの新しい(またはアクティブに維持された)最新のオープンソースライブラリのほとんどが書かれています。 CまたはC ++のようです。Fortranは、主に既存/レガシーライブラリを使用するプロジェクトで使用されるようです。私が言語について考えていることとは無関係に、Fortranを使用した大きな新しいプロジェクトはあまり見かけません。
ジェフオックスベリー

Fortranで記述された密度汎関数理論コードにはVASPCASTEPが含まれますが、@ GeoffOxberryが指摘するように、新しいプロジェクトはおそらくC ++に向かう傾向があります。
dr.blochwave

@blochwaveリンクからわかるように、プロジェクトは2018年にオンラインになる新しいマシン(アクセラレータなどを使用)向けです。したがって、25年のコードを取得してコンパイルすることはできません。パフォーマンス。上記のリストのコードの大部分は、新しいコードのように書き換えられているか、書き換えられていると確信しています。多くの「新しい」気候コードもFortranにあり、多くの国の多くの機関で使用されています。
stali

0

Jack P.が言おうとしていることは、あなたはミックスとマッチをすべきだということです。優れたソフトウェアは慎重に階層化されています。異なるレイヤーは、より自然に、または効率的に、異なる言語にマッピングできます。各レイヤーに最適な言語を選択する必要があります。また、言語がどのように相互運用できるかを理解する必要があります。これは、どのレイヤーでどの言語を選択するかに影響する可能性があります。

より良い質問は、優れた設計のソフトウェアの例があり、階層化されたソフトウェアの設計方法を学ぶために勉強する価値があるものです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.