18

ほとんどすべての関数が何らかの形でポリモーフィックであるという点で「不必要に」ポリモーフィックなコードベースを持っていますが (できるのになぜそうしないのですか?)、最終プログラムはほんの一握りの具体的な型を持つ関数を使用します。私は、このすべてのポリモーフィズムのパフォーマンス コストを引き下げようとSPECIALIZE、プラグマを投入するのに時間を費やし始めましたが、私のコードのサイズでは、かなり行き当たりばったりです。INLINABLE関数ごとに、実行時に「ポリモーフィズムが必要とすることを行う」ためにどれだけの時間が費やされたかをプロファイリングから知る方法はありますか?

(注:そのようなことが技術的に可能かどうか、または「ポリモーフィズムに必要なもの」が十分に定義されているかどうかを知らずに、この質問をしました)。

4

1 に答える 1

8

コストを決定するプロセスは次のとおりです。

  • ベンチマークを構築する - 基準またはその他の測定ツールを使用
  • プロファイル - ghc のプロファイリング サポートあり
  • コアを読む - パフォーマンスの原因が明らかでない場合は、ghc-core を使用

通常、遅すぎる操作を特定します。プロファイリングを使用してコンパイルし、どのコンポーネントがコストがかかるかを正確に判断し、コードを検査して最適化します (たとえば、データ構造または関数の特殊化、アルゴリズムの変更、またはその他の変更を行うことによって)。

パフォーマンスが重要な作業については、コアを調べて、コンパイラのマイクロチューニングが役立つかどうかを確認します。

于 2012-07-18T14:11:13.567 に答える