[解決済み】GHCコアの読み込み
2022-04-19 22:35:17
質問
CoreはGHCの中間言語です。Coreを読むことで、プログラムの性能をよりよく理解することができます。ある人から Core を読むためのドキュメントやチュートリアルがないかと聞かれたのですが、あまり見つかりませんでした。
GHC Coreを読むためのドキュメントはありますか?
今までに見つけたものは以下の通りです。
- HaskellをC言語並みに速く書く:厳密性、遅延性、再帰性を利用する
- C言語並みに速いHaskell: 低レベルのパフォーマンスを高い高度で実現する
- RWH:第25章。プロファイリングと最適化
- CUFPでの高性能Haskellの講演 (スライド65-80)
どのように解決するのか?
GHCコアは システムFC に翻訳されている。Coreの(おおよその)文法は次のように与えられる。
Coreは、よりシンプルでよく知られた システムF . すべて GHC が Core レベルで行う変換 は、パフォーマンスを向上させるために、このCore表現を型保存してリファクタリングしたものです。そして、あまり知られていませんが、GHCをプログラムするために、直接Coreで書くことができます。
GHC Coreはコンパイラのパイプラインに適合します(2002年、sans-LLVM、CMMのときと同じです)。
GHC Coreを知るための主なドキュメントを紹介します。
- GHCコア言語の外部表現 トルマック、2001
- ghc/compiler/CoreSyn GHCの定義そのもの
- Glasgow Haskell Compiler インライナーの秘密 , Peyton Jones and Marlow, 1999. Coreについては、出現分析アノテーションの詳細も含め、2.3節で説明します。
- Haskell 用の変換ベースのオプティマイザ , Peyton Jones and Santos, 1998. Coreについては、S3でポリモーフィズムの議論やCoreの運用上の読み方などを解説しています。
理解を助ける関連資料。
- その GHC -fext-core の出力
- GHCのソースを読みながらCoreの勉強に時間を費やしました。その一部は、私の 学位論文 2002年、16ページ目から。
- を使用することから ghc-コア というツールを使って、Coreを自分好みのフォーマットで生成しています。
CoreをSTGのコードに変換すると、次のようになります。
Coreのおかしな名前は、"Z-encoding"でエンコードされています。
GHC Coreの型と種類(Tolmachの論文より)。
最後に、GHCの プリモプス は、GHC が知っている基本的な命令まで Haskell を最適化したとき、GHC Core の出力に定期的に現れます。プリモプセットは、Core 関数のセットとして 前処理されたファイルです。
関連
-
[解決済み] なぜベクトル化、ループよりも一般的に速いのですか?
-
[解決済み] spark.sql.shuffle.partitionsとspark.default.parallelismの違いは何ですか?
-
[解決済み] 効率的なアウトオブコアソーティング
-
[解決済み】インターネット接続が遅い場合のシミュレーション【終了しました
-
[解決済み] GHCはどのような最適化を確実に実行することが期待できますか?
-
[解決済み] 3Dゲームってなんであんなに効率的なの?[クローズド]
-
[解決済み] gccのffast-mathは実際に何をするのですか?
-
[解決済み] Scalaのlazy valの(隠れた)代償は何なのか?
-
[解決済み] GHCはなぜこんなに大きいのか/大きいのか?
-
[解決済み】Haskell/GHCの`forall`キーワードは何をするのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] なぜベクトル化、ループよりも一般的に速いのですか?
-
[解決済み] LOWER LIKE vs iLIKE
-
[解決済み】HTTPとHTTPSのパフォーマンス比較
-
[解決済み】2つの範囲が重なっているかどうかをテストする最も効率的な方法は何ですか?
-
[解決済み】再帰と反復のどちらを選ぶ?
-
[解決済み】Goはどうしてそんなに早くコンパイルできるのですか?
-
[解決済み】長さnのソートされていない配列の中でk番目に大きい要素をO(n)で見つけるにはどうすればよいですか?)
-
[解決済み】ウェブサイトのストレステストに最適な方法【重複あり
-
[解決済み] t-sqlのクエリ実行にかかる時間の測定
-
[解決済み] 与えられた数の除数の数を計算するアルゴリズム