FPGA開発日記

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

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

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

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

docs.google.com


次はTensorFlowのExampleの例を見る。TensorFlowもMLIRをサポートしているらしい。

f:id:msyksphinz:20200705000420p:plain:w400

TensorFlowのコンパイラエコシステムでは、TensorFlowのグラフからXLAのHLOに変換し、それをIRに変換しているらしい。HLOは"High Level Optimizer"のことを言うらしい。

f:id:msyksphinz:20200705000402p:plain:w400

TensorFlowのGraphをTF Graph.mlirというものに変換し、これをHLO.mlirに変換する。これをXLO HLOに変換するらしい。このTF Graph.mlirとHLO.mlirがどういうフォーマットになっているのか気になる。

f:id:msyksphinz:20200705000350p:plain:w400

TensorFlowの計算グラフをMLIRで表現すると以下のようになるらしい。これはLLVM IRと似ていると思う。

f:id:msyksphinz:20200705000339p:plain:w400

Bridgeをビルドする。

  1. グラフの変換と最適化のパスを追加する。
  2. オペレーションの書き換えルールを追加する。
f:id:msyksphinz:20200705000324p:plain:w400

次はMLIRユーザによるいくつかの例を見ていく。

  • ステンシル計算の表現形式としてMLIRを使用する。ステンシルの計算では格子の隣接したセルの計算が必要になるという訳か。
f:id:msyksphinz:20200705002445p:plain:w400

これの意味がまだ理解できない。ステンシルの計算を表現しているらしい。

f:id:msyksphinz:20200705002430p:plain:w400
  • Fortran向けの最適化コンパイラFLANG。FIR(High-level Fortran IR)をMLIR形式で表現し、これをLLVM IRに変換してアセンブリコードを生成する。
f:id:msyksphinz:20200705002418p:plain:w400
  • XilinxのAIエンジンではMLIRを使っている。
f:id:msyksphinz:20200705002405p:plain:w400
f:id:msyksphinz:20200705002355p:plain:w400