FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

LLVMの新しい中間言語表現 MLIRを試す(6. MLIRに関する発表資料を読む)

MLIRについてもう少し具体的な例を勉強するために、資料を読み込んでいくことにした。前回の続き。

以下の資料を参考にした。Chris Lattnerの所属がSiFiveに変わっているので、比較的最近の資料だ。

docs.google.com


MLIRとLLVM IR

MLIRをLLVM IRの代替として使う方法

f:id:msyksphinz:20200707232012p:plain:w400

MLIRにはLLVM IRを組み込むことができ、既存のLLVM IRパスを移動して再実装することができる。ただし、これには非常に膨大な作業が必要となってしまう。

f:id:msyksphinz:20200707232027p:plain:w400

LLVM IRをMLIRに移行することで、より優れたデータ構造に移行することができる。MLIR実装チームはLLVMでの多くの実装経験がある。

f:id:msyksphinz:20200707232045p:plain:w400

最大の機能は、マルチスレッドコンパイルが可能になった。MLIRは最初からこれをサポートするように設計されている。MLIR PassManagerには優れた機能が搭載されており、インスタンス固有のパスオプションと、Statistics、パイプラインクラッシュの再現の生成などが含まれている。

f:id:msyksphinz:20200707232100p:plain:w400

LLVM IRのPHIノードについて取り上げる。PHIノードをスキャンした場合、ブロックの先頭などに命令を挿入する必要がある。PHIノードのエントリは順序図消されていないため、ルックアップテーブルを利用してオペランドリストをスキャンする必要があり、これに時間がかかる。

f:id:msyksphinz:20200707232113p:plain:w400
f:id:msyksphinz:20200707232130p:plain:w400

さらに、MLIRのデバッグ情報はLLVM IRのデバッグ情報よりも優れている。

LLVMのループ最適化を再実装するよりも、MLIRを使用することで効率的に実装できる。

f:id:msyksphinz:20200707232143p:plain:w400