50

C ++コンパイラ、特にIntelコンパイラの急速な発展と、C / C ++コードにSIMD関数を直接適用する機能により、Fortranは数値計算の世界でまだ本当の利点を持っていますか?

私は応用数学のバックグラウンドを持っています。私の仕事には、厳密に定義されたパフォーマンス要件を伴う、多くの数値解析、計算、最適化などが含まれます。

私はFortranについてほとんど何も知りません。私は、C / CUDA / matlabの経験があり(後者を最初からコンピューター言語と見なす場合)、私の日常業務には、非常に大きなデータ(たとえば、10GBの大きなマトリックス)の分析が含まれます。プログラムは少なくともその時間の2/3をメモリアクセスに費やしているようです(そのため、私はその仕事の一部をGPUに送信します)、少なくともFortranルーチンを試してみる価値があると思いますか?プログラムのパフォーマンスを向上させるためのコードのパフォーマンスが重要な部分はありますか?

複雑さと物事はそこで行われる必要があるので、事前のおかげで、そこに大きなパフォーマンス上の利点がある場合にのみ、そのルーチンに進みます。

4

5 に答える 5

59

Fortran は、C++ と比較して厳密なエイリアシング セマンティクスを備えており、数十年にわたって数値パフォーマンスのために積極的に調整されてきました。CPU を使用してデータの配列を操作するアルゴリズムは、多くの場合、Fortran 実装の恩恵を受ける可能性があります。

プログラミング言語の銃撃戦はあまり真剣に受け止めるべきではありませんが、15 のベンチマークのうち、Fortran は4 つのベンチマーク(Intel Q6600 1 コアの場合) で他のどの単一言語よりも速度で第 1 位にランクされています。Fortran が優れているベンチマークは、非常に数値的なものであることがわかります。

反例:

  • k-nucleotide 500% 遅い (このベンチマークは、Fortran の強みではない、より洗練されたデータ構造と文字列処理に重点を置いています)

また、要約ページの「何倍遅いか」を見ることもできます。これは、すべての実装のうち、Fortran コードが平均して各ベンチマークの最速の実装に最も近いことを示しています。 C++ が得意とするいくつかのタスクには適していませんが、そのことは既に知っているはずです。

したがって、自問する必要がある質問は次のとおりです。

  1. この関数の速度は非常に重要なので、Fortran で再実装する価値はありますか?

  2. Fortran の学習への投資が報われるほど、パフォーマンスは重要ですか?

  3. 自分でコードを書く代わりに、ATLAS のようなライブラリを使用することは可能ですか?

これらの質問に答えるには、コード ベースとビジネス モデルに関する詳細な知識が必要になるため、お答えできません。しかし、そうです、Fortran の実装は、多くの場合、C++ の実装よりも高速です。

決定のもう 1 つの要因は、サンプル コードの量と、利用可能な参照実装の量です。Fortran の強力な歴史により、豊富な数値コードがダウンロード可能で、ライブラリにアクセスするだけでも入手できます。いつものように、良いものを見つけるためにそれをふるいにかける必要があります.

于 2012-10-25T23:55:20.867 に答える
16

あなたの質問に対する完全で正しい答えは、「はい、Fortranにはいくつかの利点があります」です。

C++ には、いくつかの異なる利点もあります。Python、R なども同様です。これらは異なる言語です。ある言語でいくつかのことを行い、別の言語でいくつかのことを行う方が簡単で高速です。すべてがコミュニティで広く使用されており、非常に正当な理由があります。

より具体的な質問がない場合、他のものは単なるノイズと言語戦争の餌です.

于 2012-10-26T00:51:25.770 に答える
8

Fortran は、数値プログラミングに自然に適しています。このようなプログラムでは、通常、配置された配列など、大量の数値を使用する傾向があります。配列は Fortran の第一級市民であり、Matlab の数値カーネルを Fortran に変換するのは非常に簡単です。潜在的なパフォーマンス上の利点については、これを非常にうまくカバーしている他の回答を参照してください。ベースラインはおそらく、今日ほとんどのコンパイル済み言語で非常に効率的な数値アプリケーションを作成できるということですが、そこにたどり着くためにいくつかのループを飛び越えるかもしれません。Fortran は、言語機能により、コンパイラが最適化のためのほとんどのスポットを認識できるように慎重に設計されています。もちろん、Fortran を含む任意のコンパイル済み言語を使用して、任意の遅いコードを作成することもできます。いずれにせよ、適切なツールを選択する必要があります。Fortran は数値アプリケーションに適しています。C は、システム関連の開発に適しています。最後に、Fortran の基礎を学ぶことは難しくありません。他の言語を調べることは常に価値があります。これにより、解決したい問題について別の見方が開かれます。

于 2012-10-26T00:18:24.407 に答える
8

また、Fortran は C++ よりもはるかに習得しやすいことにも言及する価値があります。実際、Fortran の言語仕様はプレーンな C よりも短く、構文はほぼ間違いなく単純です。とても早く拾えます。

つまり、現在抱えている特定の問題を解決するために C++ または Fortran を学習することにのみ関心がある場合 (たとえば、プロトタイピング言語で作成したもののボトルネックを高速化するため)、Fortran の方が投資収益率が高くなる可能性があります。 .

于 2016-10-22T12:39:52.850 に答える