LLVM
今更ですが LLVM を調べ中です。
以前、自作のシェーダー作りたいなぁ、的なことを書きましたが、コンパイラどうしようかというのが一番の悩みでした。
なんとなくな勉強はしつつもコンパイラは、作業量自体が多そうで手を出すのに二の足を踏んでいました。
それに比べて、LLVM だとかなり整理された中間言語体系からバックエンドだけ考えれば済みそうです。
拙作のJelly(コンパイラが作れないのでMIPS互換)の経験上、FPGAのプロセッサの速度を上げる弊害が幾つかあり
・ データ依存のインターロック(分岐ミスとかキャッシュミスとかいろいろ)
・ RAWハザードのような、演算器の完了待ち
・ フォワーディングのような1サイクルで回さないと意味が薄い部分の判定
など、思いつくものがいろいろあります。
が、これらはリング保護のような仕組みを考えないDSP的なものであれば、その気になればコンパイラに追い出すことも十分可能なものが多いです。
そしてそれらをコンパイラに追い出すのを一番困難にしているのが、命令互換性の問題です。
パイプライン段数が変わった瞬間から、互換性がなくなってしまいます。
一方で、GPUなどのシェーダープログラムのように、リング0のデバイスドライバでコンパイルして使うことを前提としたアーキテクチャでは、そのほぼすべてをセキュアなまま隠蔽することが出来るので、プロセッサとコンパイラの役割分担を自由に弄れるはずです。
本当に作れるかは別として、コンパイラ分野が非常に進化してきているのは、夢が広がりますね。
« Pythonと深層学習と | トップページ | Deep Learning と演算器の考察 »
「FPGA」カテゴリの記事
- LUT-Networkの蒸留とMobileNet風構成とセマンティックセグメンテーション(2020.03.09)
- LUT-Networkの蒸留(Distillation)について(2019.12.29)
- FPGAでのDNN(Deep Neural Network)の整理(LUT-Netまとめ)(2019.12.15)
- LUT-NetのFPGAリソースについて(2019.12.08)
- MNIST認識のリアルタイム動作環境更新(2019.09.02)
この記事へのコメントは終了しました。
コメント