Loading article…
| パラダイム | 機能的、並列 |
|---|---|
| デザイン: | ジョナサン・ラガン・ケリー アンドリュー・アダムス |
| 開発者 | MIT、(スタンフォード、Google、Adobeの協力を得て) |
| 初登場 | 2012年 |
| タイピングの規律 | 静的 |
| 実装言語 | C++ |
| OS | macOS、主流のLinuxディストリビューション、Windows |
| Webサイト | halide-lang.org |
Halideは、メモリの局所性、ベクトル化された計算、マルチコアの中央処理装置(CPU)とグラフィックス処理装置(GPU)を活用するデジタル画像処理コードを記述するために設計されたコンピュータプログラミング言語です。 [1] Halideは、C++の内部ドメイン固有言語(DSL)として実装されています。
言語
Halide がもたらす主な革新は、実装されているアルゴリズムとその実行スケジュール(つまり、ループ ネスト、並列化、ループ展開、ベクトル命令を指定するコード) を分離したことです。通常、これら 2 つは一緒にインターリーブされており、スケジュールの変更を試行するには、変更のたびにプログラマーがアルゴリズムの大部分を書き直す必要があります。Halide を使用すると、スケジュールの変更にアルゴリズムの変更は必要なく、プログラマーはスケジュールを試して最も効率的なスケジュールを見つけることができます。
サンプルソースコード
次の関数は、2 つの 3×1 パスのシリーズとして定義される 3×3ボックス フィルターのスケジュールを定義および設定します。
Func blur_3x3 ( Func input ) { Func blur_x 、blur_y ; Var x 、y 、xi 、yi ;
// アルゴリズム - ストレージも順序もありません
blur_x ( x , y ) = ( input ( x -1 , y ) + input ( x , y ) + input ( x + 1 , y )) / 3 ; blur_y ( x , y ) = ( blur_x ( x , y -1 ) + blur_x ( x , y ) + blur_x ( x , y + 1 )) / 3 ;
// スケジュール - 順序、局所性を定義します。
ストレージを意味します。blur_y.tile ( x , y , xi , yi , 256,32 ) .vectorize ( xi , 8 ) .parallel ( y ) ; blur_x.compute_at ( blur_y , x ) .vectorize ( x , 8 ) ;
blur_yを返します; }
使用
GoogleはPixel 2 Pixel Visual CoreにHalideとTensorFlowを採用した。[2] Adobe PhotoshopもHalideを採用している。[3] GoogleとAdobeはどちらもHalideの研究に携わっている。[4]
参照
参考文献
- ^ 「Halide: 画像処理のための新しい言語」 2012年. 2013年9月20日閲覧。
- ^ 「GoogleとIntelがAIチップ、ニューラルネットワーク交換などを開発」The Register . Situation Publishing.
- ^ 「Halide Bottlenecks で起動時に Photoshop がフリーズする」 2020 年. 2020 年4 月 27 日閲覧。
- ^ 「ツリー探索とランダムプログラムによるHalideの最適化の学習」(PDF) 2019年。 2019年7月1日閲覧。
外部リンク
- 公式サイト
- 画像処理パイプラインの最適化を容易にするためにスケジュールからアルゴリズムを切り離す
- 「Halide: 画像処理パイプラインにおける並列性、局所性、再計算を最適化する言語とコンパイラ」(PDF)。(8,259 KB)
