1. ホーム
  2. performance

[解決済み】GHCコアの読み込み

2022-04-19 22:35:17

質問

CoreはGHCの中間言語です。Coreを読むことで、プログラムの性能をよりよく理解することができます。ある人から Core を読むためのドキュメントやチュートリアルがないかと聞かれたのですが、あまり見つかりませんでした。

GHC Coreを読むためのドキュメントはありますか?

今までに見つけたものは以下の通りです。

どのように解決するのか?

GHCコアは システムFC に翻訳されている。Coreの(おおよその)文法は次のように与えられる。

Coreは、よりシンプルでよく知られた システムF . すべて GHC が Core レベルで行う変換 は、パフォーマンスを向上させるために、このCore表現を型保存してリファクタリングしたものです。そして、あまり知られていませんが、GHCをプログラムするために、直接Coreで書くことができます。

GHC Coreはコンパイラのパイプラインに適合します(2002年、sans-LLVM、CMMのときと同じです)。

GHC Coreを知るための主なドキュメントを紹介します。

理解を助ける関連資料。

  • その GHC -fext-core の出力
  • GHCのソースを読みながらCoreの勉強に時間を費やしました。その一部は、私の 学位論文 2002年、16ページ目から。
  • を使用することから ghc-コア というツールを使って、Coreを自分好みのフォーマットで生成しています。

CoreをSTGのコードに変換すると、次のようになります。

Coreのおかしな名前は、"Z-encoding"でエンコードされています。

GHC Coreの型と種類(Tolmachの論文より)。

最後に、GHCの プリモプス は、GHC が知っている基本的な命令まで Haskell を最適化したとき、GHC Core の出力に定期的に現れます。プリモプセットは、Core 関数のセットとして 前処理されたファイルです。