« Pythonと深層学習と | トップページ | Deep Learning と演算器の考察 »

2017年6月24日 (土)

LLVM

今更ですが LLVM を調べ中です。

以前、自作のシェーダー作りたいなぁ、的なことを書きましたが、コンパイラどうしようかというのが一番の悩みでした。

なんとなくな勉強はしつつもコンパイラは、作業量自体が多そうで手を出すのに二の足を踏んでいました。
それに比べて、LLVM だとかなり整理された中間言語体系からバックエンドだけ考えれば済みそうです。

拙作のJelly(コンパイラが作れないのでMIPS互換)の経験上、FPGAのプロセッサの速度を上げる弊害が幾つかあり

  ・ データ依存のインターロック(分岐ミスとかキャッシュミスとかいろいろ)
  ・ RAWハザードのような、演算器の完了待ち
  ・ フォワーディングのような1サイクルで回さないと意味が薄い部分の判定

  など、思いつくものがいろいろあります。
  が、これらはリング保護のような仕組みを考えないDSP的なものであれば、その気になればコンパイラに追い出すことも十分可能なものが多いです。
 そしてそれらをコンパイラに追い出すのを一番困難にしているのが、命令互換性の問題です。
  パイプライン段数が変わった瞬間から、互換性がなくなってしまいます。

  一方で、GPUなどのシェーダープログラムのように、リング0のデバイスドライバでコンパイルして使うことを前提としたアーキテクチャでは、そのほぼすべてをセキュアなまま隠蔽することが出来るので、プロセッサとコンパイラの役割分担を自由に弄れるはずです。

 本当に作れるかは別として、コンパイラ分野が非常に進化してきているのは、夢が広がりますね。

« Pythonと深層学習と | トップページ | Deep Learning と演算器の考察 »

FPGA」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/560384/65452052

この記事へのトラックバック一覧です: LLVM:

« Pythonと深層学習と | トップページ | Deep Learning と演算器の考察 »