cvチーム勉強会 halide編
TRANSCRIPT
Halide勉強会@teamLab.cv
Halide(http://halide-lang.org/)
• 概要は前回話したので割愛
• 作っている人たち MITコンピュータ科学・人工知能研究所
Adobe、スタンフォード大学
!
• ライセンス:MIT
LLVMを使ったJITコンパイル
ヘッダ+オブジェクトファイルの出力も可能
3x3のボックスフィルタで最適化のイロハを学ぶ
• 学ぶこと
1. Vectorize (= SIMD)
2. Parallelize (= OpenMP)
3. Tiling and Fusion
さまざまなフィルタの実装は今日の範囲外
先行研究• コンパイラのループ最適化
• 画像処理の場合、一度計算したものを何度も読むよりも再計算した方が速いことがある(memory band width)
• 並列計算系
• CUDA、OpenMPなど
• 処理の最適化はすべてプログラマに委ねられている
• 記述が複雑になる&アーキテクチャごとの最適化が必要。
• 画像処理用の言語
• AppleのCoreImageやAdobeのPixelBlenderなど。
• ピクセルごとの処理を記述したカーネルを書ける。ただしカーネル間の最適化は考慮されていない
実験
3x3のボックスフィルタを例に、
さまざまなスケジュールで試してみる
スケジュールは難しい
スケジュールをもっと簡単に決めれる方法・指針があれば、Halideはちょう流行る可能性がある。
ってみんなが言ってるし、作者もわかっていて、スケジュールを遺伝的アルゴリズムで最適化するとかってトピックもあるみたい。
感想など!
• 移植性が高いとはいえ、アーキテクチャごとにスケジュールの部分は最適解が変わるのか?タイリングの大きさとか。
• KinectのDepth画像高精度化とかに使えたらいいなぁ
http://nma.web.nitech.ac.jp/fukushima/research/weightedjointbilateralfilter.html
参考文献今日はこれだけでした。Halideの最初の論文
Decoupling Algorithms from Schedules for Easy Optimization of Image Processing Pipelines http://people.csail.mit.edu/jrk/halide12/halide12.pdf !
次の論文(halide13.pdf)にスケジュールの決め方とかが議論されているようです。(未読)
大塚さんのAndroidでHalide講座に期待しています!!
追加 参考になる日本語資料
• 一番くわしい
• http://nebuta.hatenablog.com/entry/2013/08/04/135932
• 我らがパヤシム先生
• http://derivecv.tumblr.com/post/70538301269
• ぼくが書き残した、Marvericksでのビルド手順
• http://nistetsurooy.tumblr.com/post/73830964082/halide
追加 今日使ったコード
• https://gist.github.com/nistetsurooy/9088633