F#のパフォーマンスとC ++のパフォーマンスの比較に興味がありますか?
アプリケーションによって大きく異なります。マルチスレッドプログラムで高度なデータ構造を多用している場合は、F#が大きなメリットになる可能性があります。ほとんどの時間が配列を変更するタイトな数値ループに費やされている場合、C ++は2〜3倍高速になる可能性があります。
ケーススタディ:レイトレーサーここでの私のベンチマークでは、階層的なカリングにツリーを使用し、光線と球の交差コードを数値化して出力画像を生成します。このベンチマークは数年前のものであり、C ++コードは何十年にもわたって改善され、何十万人もの人々に読まれてきました。MicrosoftのDonSymeは、MSVCでコンパイルし、OpenMPを使用して並列化した場合、最速のC ++コードよりもわずかに高速なF#実装を作成することができました。
F#はよりスケーラブルでパフォーマンスが高いと思われることを読みましたが、この実際のパフォーマンスはC ++とどのように比較されますか?
F#を使用すると、C ++よりもコードの開発がはるかに簡単かつ高速になります。これは、メンテナンスだけでなく最適化にも当てはまります。したがって、プログラムの最適化を開始するときに、C ++の代わりにF#を使用すると、同じ量の作業でパフォーマンスが大幅に向上します。ただし、F#は高級言語であるため、パフォーマンスの上限が低くなります。したがって、最適化に無限の時間を費やす場合は、理論的には、常にC++でより高速なコードを生成できるはずです。
もちろん、これは、C ++がFortranに対して、Fortranが手書きのアセンブラーに対して持っていたのとまったく同じ利点です。
ケーススタディ:QR分解これは、LAPACKなどのライブラリによって提供される線形代数からの基本的な数値手法です。参照LAPACK実装は、Fortranの2,077行です。同じレベルのパフォーマンスを実現するF#実装を80行未満のコードで記述しました。ただし、リファレンス実装は高速ではありません。IntelのMath Kernel Library(MKL)のようなベンダーが調整した実装は、多くの場合10倍高速です。驚くべきことに、私はF#コードを、インテルハードウェアで実行されているインテルの実装のパフォーマンスをはるかに超えて最適化することができました。その一方で、コードは150行未満のコードであり、完全に汎用的です(単精度、倍精度、複雑なシンボリックマトリックスも処理できます)。背の高い薄いマトリックスの場合、私のF#コードはIntelMKLよりも最大3倍高速です。
このケーススタディの教訓は、F#がベンダーが調整したライブラリよりも高速であることを期待する必要があるということではなく、Intelのような専門家でさえ、低レベルの言語のみを使用する場合、生産的な高レベルの最適化を見逃すことに注意してください。Intelの数値最適化の専門家は、並列処理を十分に活用できなかったのではないかと思います。なぜなら、彼らのツールは並列処理を非常に面倒にするのに対し、F#は並列処理を簡単にするからです。
浮動小数点はどれくらいうまく機能しますか?
パフォーマンスはANSICに似ていますが、一部の機能(丸めモードなど)は.NETからは利用できません。
ベクトル命令を許可しますか
いいえ。
コンパイラーの最適化に対してどれほど友好的ですか?
この質問は意味がありません。F#は、単一のコンパイラを備えたMicrosoft独自の.NET言語です。
メモリーフットプリントはどれくらいの大きさですか?
空のアプリケーションはここで1.3Mbを使用します。
メモリの局所性をきめ細かく制御できますか?
ほとんどのメモリセーフ言語よりは優れていますが、Cほどではありません。たとえば、F#で任意のデータ構造を「構造体」として表すことにより、ボックスを解除できます。
Crayなどの分散メモリプロセッサ用の容量はありますか?
「容量」の意味によって異なります。そのCrayで.NETを実行できる場合は、(次の言語と同じように)F#でメッセージパッシングを使用できますが、F#は主にデスクトップマルチコアx86マシンを対象としています。
大量の処理が含まれる計算科学にとって興味深い機能は何ですか?
メモリの安全性とは、セグメンテーション違反やアクセス違反が発生しないことを意味します。.NET4での並列処理のサポートは良好です。Visual Studio 2010のF#インタラクティブセッションを介してオンザフライでコードを実行する機能は、インタラクティブなテクニカルコンピューティングに非常に役立ちます。
それを使用する実際の科学計算の実装はありますか?
F#の科学計算用の商用製品には、すでに数百人のユーザーがいます。
しかし、あなたの質問の行は、科学計算をインタラクティブな技術計算(MATLAB、Mathematicaなど)ではなく、高性能計算(Crayなど)と考えていることを示しています。F#は後者を対象としています。