3

F# は、デフォルトでデータが不変である関数型言語として宣伝されることがよくありますが、F# Powerpack の行列型とベクトル型の要素は変更可能です。どうしてこれなの?

さらに、通常の行列とは対照的に、スパース行列が不変として実装されているのはどのような理由ですか?

4

2 に答える 2

3

真に高いパフォーマンスを得るには、ある特定のケースで可変性が必要です。コードが完全に最適化されており、プログラムのキャッシュ (L1、L2) アクセス パターンに至るまですべてをマスターしている場合、低に勝るものはありません。レベル、メタルアプローチへ。

これは、よく特定された問題が 20 年間一定である場合にのみ発生します。これは主に科学的なタスクでよく知られています。

この特定のケースから離れるとすぐに、99.99% のボトルネックは、(低レベルの言語によって引き起こされる) あまりにも低レベルの表現を持つことから発生し、最終的な現実世界の最適化のトレードオフを表現できません。目前の問題。

要するに、パフォーマンスのために、次のアプローチが唯一の方法です(私は思います):

  • 高レベル / アルゴリズムの最適化が最初
  • すべての高レベルの方法が調査されたら、低レベルの最適化

その結果として、次のことがわかります。

  • FIRST で影響を測定せずに、何も最適化しないでください。改善は、大幅なパフォーマンスの向上が得られる場合、および/またはドメイン ロジックを低下させない場合にのみ行う必要があります。

  • 問題が安定していて明確に定義されている場合、最終的には、低レベルに移動してメモリ/可変性で遊ぶしかないポイントに到達します

于 2013-04-11T17:23:37.427 に答える