2011-04-04 11 views
5

私はいつもFortranの使用がスーパーコンピューティングにあると考えていたので、ちょっと疑問に思いました。しかし、私はしばしば、CコンパイラがFortranほど高速にCを作ることができると聞いています。fortranが冗長な言語になっているような良いCコンパイラはありますか?

さらに、これが真であれば、最も速いCコンパイラは何ですか?

ありがとうございます。

答えて

2

Fortranには、より高速なプログラムを可能にするいくつかのプロパティがあります。 Espポインタは、コンパイラがコードを最適化するのを止めます(配列はCのポインタとして渡され、配列はHPCのデータ構造です)。ここで問題となるのは、2つのポインタがエイリアスできることです。新しいC99では、restrictでコンパイラにヒントを与えたように、このようなエイリアスが発生しないようにすると、この問題は軽減されます。

しかし、企業では非常に古いfortranコードがあるので、fortranは近い将来に廃止されることはありません。

+6

私は、12歳の標準が新しいと呼ばれるたびに面白いと感じます。 –

+0

だから、fortranはまだまだ高速だと言えますか? – James

+1

FortranとCの方が高速であることはあまりありません。すでに書かれているコードは高速です。人々が細かく調整されたFortranコードをC言語で書き直すには、かなりの努力を払うつもりだ。 – nos

2

すぐには、Fortranはすぐに外に出ることはありません。すべての種類のことを実行するための高速で信頼性の高い、よくテストされたルーチンと、あまりうまく設計されていないが、動作し、Cで書き換えが困難なプログラムであるFortranコードがあまりにも多い。

さらに、Fortran高性能コンピューティングを中心に設計された言語であり、最適化への障壁はほとんどなく、Fortranコンパイラは通常、高性能コンピューティングのために設計されています。

+0

私は質問が既存のFortranコードをC.最新のFortran標準が最新のC標準よりも新しいコードのために提供する可能性のあるパフォーマンス上の利点は何ですか? –

+0

ありがとうございましたMatthew – James

+1

利用可能なライブラリは、ある言語を別の言語よりも選択するための非常に有効な理由です。図書館が最高のパフォーマーになる可能性が高い場合は、勝利を得ることができます。 –

1

2語。レガシーコード。 COBOLがたくさんあるように、Fortranはまだ20年もたっています。そして、私の心は、それを維持しなければならない人に出て行きます。

2

Fortran 90/95/2003/2008はCより上位の言語です。私は、エンベデッドプログラミングやデバイスプログラミング、そして科学的プログラミングのための最新のFortranを選択します。

11

Argh!いいえ、それはありません。そして関連ニュースでは、FortranはいくつかのOOP /多態的なものを増やしていますが、C++を廃止していません。ErlangはHaskellを余分にしませんし、Pythonはbashスクリプトを殺していない、PHPはjavascriptの必要性を取り除いてはいません。 Javaなどをオフにするなど、さまざまなプログラミング言語があります。特定の仕事に適したツールを見つけられるプログラマーがいます。それが真実であるために、あなたはそれらを気に入る必要はありません。

Cは、基本的にシステムプログラミング言語です。計算科学のようなものを書き込むのは悲惨なことです。 C++はより豊かであるために優れていますが、多次元配列がファーストクラスの型ではないという事実から批判的に苦しんでいます(いいえ、そうではありません)、テクニカルコンピューティングはすべて多次元配列に批判的です。 C/C++用の単一の標準多次元配列パッケージがないと、その言語用の最適化されたライブラリを書くことが非常に難しくなり、一度パッケージ化するとデータ構造全体を使用する必要があります。 Pythonは同じ問題を抱えており、NumpyがPythonコアの一部になるまでそうするでしょう。

Fortranは、すべての欠陥に対して、科学プログラミング専用に設計された唯一の言語です。 PythonやMatlabに似た配列演算子やスライスが可能になり、科学プログラマーの人生が楽になります。それでも、科学プログラマーの多くはfortranが好きではありません。彼らは、他の言語で利用可能なツールセットまたはライブラリを好む。それは大丈夫です。

ちょうどあなたの次の質問を控えて - いいえ、私たちは編集者にも同意する必要はありません。

+0

"[C++]は、ファーストクラスの型として多次元配列を持たないという事実から非常に苦しんでいます"。最後のビットは真ですが、結果は何ですか? 'std :: complex <>'(ライブラリタイプ)もどちらも、誰もそれについて不平を言うことはありません。 – MSalters

+2

@MSalters:いくつかのサードパーティライブラリを使いたいと思う重要なプロジェクトでは、相互に互換性のない多次元配列クラスをいくつか扱い、何らかの方法でそれらの間でデータをシャッフルする必要があります。 std :: complex、OTOHは標準ライブラリにありますので、world + dogは常にそれを再開発するつもりはありません。それではまた、疎な配列が必要な場合は、Fortranはあなたを助けません。同じ問題があります。その場合、C++は、テンプレートや演算子のオーバーロードにより、Fortran – janneb

+0

よりもユーザー定義の配列クラスを簡単にすることができます。Fortranには演算子のオーバーロードやパラメータ化された型があります(テンプレートではありませんが、さまざまな種類の真理のために)これもできます。しかし、はい、私はスパースなものは難しく、あなたは同じもの(例えば、Petsc)を見ることに同意します。 C/C++での密度の高い行列の欠如は、他のものでも起こります。多次元配列を扱うSOのほとんどのMPIに関する質問では、Cのプログラマに連続的に作成する方法が示されていますマルチアレイ。それはちょうどあなたのプログラミング言語があなたのためにするものでなければなりません。 –

関連する問題