35
Yuichi Yoshida Chief engineer, DENSO IT Laboratory, Inc. @sonson_twit © 2014 DENSO IT Laboratory, Inc., All rights reserved. Redistribution or public display not permitted without written permission from DENSO IT Laboratory, Inc. 最近,作業が地味すぎて疲れた男の勉強レポート Research 新技術研究会 並列処理最適化言語の研究

Halide, Darkroom - 並列化のためのソフトウェア・研究

Embed Size (px)

Citation preview

Page 1: Halide, Darkroom - 並列化のためのソフトウェア・研究

Yuichi YoshidaChief engineer, DENSO IT Laboratory, Inc.

@sonson_twit

© 2014 DENSO IT Laboratory, Inc., All rights reserved. Redistribution or public display not permitted without written permission from DENSO IT Laboratory, Inc.

最近,作業が地味すぎて疲れた男の勉強レポート

Research 新技術研究会

並列処理最適化言語の研究

Page 2: Halide, Darkroom - 並列化のためのソフトウェア・研究

FPGA

ここに回路を書き込む

• 電気と通すと答えが出る • 余計な回路がないので電力使わない

• クロックはそんなに高くない • 状態を保存する必要があると苦手

[17]

Page 3: Halide, Darkroom - 並列化のためのソフトウェア・研究

FPGA

人検出回路画像パッチ 人か否か

データを流すと答えが出る 数クロックで答えが出る

パイプライン化できれば見かけ1クロック

無駄な回路がないので電気代お得

Page 4: Halide, Darkroom - 並列化のためのソフトウェア・研究

FPGAの方式

• 回路を焼き切るタイプ • スイッチを切り替えるタイプ • LUTを使うタイプ

• 今はこれ

[1]

Page 5: Halide, Darkroom - 並列化のためのソフトウェア・研究

まとめてみる

自由度 速度 消費電力 開発コスト

CPU ◎ ? ◯ ◯

GPU ? ◯ × ?

FPGA ? ◯ ◯ ?

ASIC × ◎ ◎ ×

Page 6: Halide, Darkroom - 並列化のためのソフトウェア・研究

[2,3,4,5]

Page 7: Halide, Darkroom - 並列化のためのソフトウェア・研究

Microsoft - Bing

• 検索エンジン • 大規模化 • 電力効率向上

[6,7]

Page 8: Halide, Darkroom - 並列化のためのソフトウェア・研究

Microsoft - Bing• ポイント

• FPGAをフェーズ毎に使い分ける • 耐障害性のために壊れた時にreconfigure

• 特徴量抽出と合成 • 順序回路+メニーコア • 特化したCPUをFPGA上に多数構成→並列計算

• 検索? • 専用回路設計 • Deep LearningのFeed forwardをFPGA上で実装 • このために専用DSLを設計・実装

Page 9: Halide, Darkroom - 並列化のためのソフトウェア・研究

IBM

• NoSQL • クエリ文を発行しない • オンメモリデータベース

• ユーザのアカウント,属性,値の取得

• redis

Page 10: Halide, Darkroom - 並列化のためのソフトウェア・研究

IBM - Coherent Accelerator Processor Interface

• POWER8のキャッシュとデバイスのメモリを接続 • 外部デバイスをキャッシュとして爆速アクセス?

• 推察 • キャッシュにアクセスするように読み出し? • DBがキャッシュにあるように見える?

• 方式に応じたアクセス • get - FPGA • put - CPU

[5,8]

Page 11: Halide, Darkroom - 並列化のためのソフトウェア・研究

応用方法の大別?

ハードウェアからパターン

CPUの補助するパターン

[15,16,17]

Page 12: Halide, Darkroom - 並列化のためのソフトウェア・研究

FPGAの何が難しいのか1から8まで数えたい

1から8まで数える回路

手で作る

Page 13: Halide, Darkroom - 並列化のためのソフトウェア・研究

FPGAの何が難しいのか画像を微分してヒストグラムを作る

え・・・・?

手で・・??

Page 14: Halide, Darkroom - 並列化のためのソフトウェア・研究

FPGAの難しさ• デバイスに近い・・・勉強するしかない

• だから高速に処理できたりする • ソフトウェアの知識だけでは実装できない

• 高位合成が発展途上・・・小人さんに任せる • C/C++→論理回路(まだまだ研究領域) • OpenCL(FPGAのGPU的利用方法?)

• 並列化・・・がんばりどころか? • 状態管理等があるとCPUの方が早い • ハードウェアを理解し,並列化するのが難しい

Page 15: Halide, Darkroom - 並列化のためのソフトウェア・研究

並列化

• CPU, GPU, ASIC全部共通の課題 • ムーアの法則がやばくなってきた以上,並列化重要 • レベルの高いアルゴリズムを並列化するのは難しい

Page 16: Halide, Darkroom - 並列化のためのソフトウェア・研究

課題と最近出てきてる研究

• 実装に再利用性がない • SIMD, GPU, FGPA, ASIC • 対象で書き方が違う • 同じ対象でもハードウェアで違う

• 並列化で高速化するのが難しい • なるべくメモリを使わないように • なるべくパイプライン化して多段実行できるように • そして,矛盾しないように

Page 17: Halide, Darkroom - 並列化のためのソフトウェア・研究

Halide

• スレッド • SIMD • GPU • などなど・・・

[10]

[10]

Page 18: Halide, Darkroom - 並列化のためのソフトウェア・研究

Halide

[10]

• スレッド • SIMD • GPU • などなど・・・

Page 19: Halide, Darkroom - 並列化のためのソフトウェア・研究

Halide

Halideなら,このコードで全ての環境にポートできる

[10]

• スレッド • SIMD • GPU • などなど・・・

Page 20: Halide, Darkroom - 並列化のためのソフトウェア・研究

色々,すごいところ

• 論文として • SIGGRAPH採択

• 実装すごすぎ • ガチに実装してる • ARM, Intel, GPUに出力可能 • C++にインラインでかける

• コミュニティにバカ受け • CVPR2015で専用チュートリアル[13] • 開発がガリガリ,Google, Adobeなどが投資?

Page 21: Halide, Darkroom - 並列化のためのソフトウェア・研究

Halideの使い方ー以下を書く

• 何をするか • 処理内容

• いつやるか • ループの場所

• どこでやるか • バッファ

Page 22: Halide, Darkroom - 並列化のためのソフトウェア・研究

[11]

Page 23: Halide, Darkroom - 並列化のためのソフトウェア・研究

何を?

処理内容を書く

依存関係は勝手に解釈される

[10]

Page 24: Halide, Darkroom - 並列化のためのソフトウェア・研究

いつ?

256x32のタイルを作成し,タイル内で

8ピクセルずつ処理し,縦方向にタイルを並列処理する

[10]

Page 25: Halide, Darkroom - 並列化のためのソフトウェア・研究

いつ?

8ピクセルずつ処理する

[10]

Page 26: Halide, Darkroom - 並列化のためのソフトウェア・研究

どこで?

バッファ

[10]

Page 27: Halide, Darkroom - 並列化のためのソフトウェア・研究

DemoBrightening, blurring for 768x1024 image [14]

Page 28: Halide, Darkroom - 並列化のためのソフトウェア・研究

Darkroom

• 並列化のためのDSLという点ではHalideと同じ

• 課題 • キャッシュが大きいとダメ • パイプライン化しやすい • メモリへのアクセスが最も電気代や速度を食う

[12]

Page 29: Halide, Darkroom - 並列化のためのソフトウェア・研究

Richardson-Lucy deconvolutionCCDの隣のセルに光子がポアソン仮定で,

飛んでいくので,それをキャンセルする?

• 誤差 = 観測値 x パラメタ畳み込み • 真値(t) / 誤差 x パラメタ畳み込み • 真値(t+1)

観測値:カメラのピクセル値 真値:求めたい真のピクセル値

繰り返して真値を求める

[18]

Page 30: Halide, Darkroom - 並列化のためのソフトウェア・研究

カメラ真値(t)

エラー真値(t+1)

[12]

Page 31: Halide, Darkroom - 並列化のためのソフトウェア・研究

カメラ真値(t)

エラー真値(t+1)

[12]

Page 32: Halide, Darkroom - 並列化のためのソフトウェア・研究

カメラ真値(t)

エラー真値(t+1)

[12]

Page 33: Halide, Darkroom - 並列化のためのソフトウェア・研究

これを離散最適化に置き換え

時間的整合性 処理の前後関係の保証

コスト関数 キャッシュの総和

n(c,p,d ) = sc − sp − dn(c,p,d ) ≥ 0

S = ( max(c,p,d )∈U

n(c,p,d ) )∗p∈F∑ bp

notationがよくわからなかった・・・・

Page 34: Halide, Darkroom - 並列化のためのソフトウェア・研究

まとめ

• 並列化 • 色々なコーディングで問題がある • 機械学習でアプローチするのいいね • 実装して使ってもらうアプローチもいいね!

• llvmとかの応用を始めてもいいかも

Page 35: Halide, Darkroom - 並列化のためのソフトウェア・研究

参考文献1. 奈良先端科学技術大学院大学 高前田先生のslide share - http://www.slideshare.net/shtaxxx/

2015-0918veriloggen?next_slideshow=1 2. http://jp.reuters.com/article/2015/06/01/intel-to-acquire-altera-idJPKBN0OH2JT20150601 3. http://techon.nikkeibp.co.jp/article/NEWS/20141128/391400/ 4. http://itpro.nikkeibp.co.jp/article/NEWS/20140617/564785/ 5. https://twitter.com/Daniel_Bowers/status/372101503936253952 6. A Reconfigurable Fabric for Accelerating Large-Scale Datacenter Services 7. マイクロソフトはどうやってBingをFPGAで実装したか - http://qiita.com/kazunori279/items/

6f517648e8a408254a50 8. XilinxがIBM POWER8とFPGAをつなげてKVS作った話 - http://qiita.com/kazunori279/items/

5668350ef6273d21ecf7 9. きつねさんでもわかるLLVM ~コンパイラを自作するためのガイドブック~

10. Decoupling algorithms from schedules for easy optimization of image processing pipelines 11. Halide Talk - https://www.youtube.com/watch?v=3uiEyEKji0M 12. Darkroom : Compiling High-Level Image Processing Code into Hardware Pipelines 13. Google Computer Vision research at CVPR 2015 - http://halide-lang.org/cvpr2015.html 14. Halide事始め - http://nebuta.hatenablog.com/entry/2013/08/04/135932

15. http://japan.xilinx.com/products/boards-and-kits/dk-z7-video-g.html 16. https://ja.wikipedia.org/wiki/ARMアーキテクチャ#/media/File:VY86C06020FC-2_02.jpg

17. https://en.wikipedia.org/wiki/Field-programmable_gate_array#/media/File:Fpga_xilinx_spartan.jpg 18. Richardson–Lucy deconvolution - https://en.wikipedia.org/wiki/Richardson–Lucy_deconvolution