EVENT REPORTイベントレポート

ヒカラボレポートとは、開催されたヒカラボにおいて、登壇者が伝えたい講演内容を記事としてまとめたものです。ご参加された方はもちろん、ヒカラボに興味があるという方も是非ご覧ください。

イベントレポートvol.44

「画像処理を簡単に高速化してみませんか!?」 Halideによる画像処理プログラミング入門

2017/12/05(火)更新2017/11/16(木)19:30~21:30

  • このエントリーをはてなブックマークに追加

11月16日のヒカラボでは、画像処理の高速化を実現するプログラミング言語、Halideをテーマに、株式会社フィックスターズの丸岡氏と近村氏に登壇いただきました。Halideの基本的な構造や活用事例、フィックスターズのHalideについての取り組みなどについて詳しくお話しいただいたので、レポートをお届けします。

講演者プロフィール

株式会社会社フィックスターズ
丸岡 晃 氏
大学時代は自動並列化コンパイラの研究開発に従事。
株式会社フィックスターズでは、自社製品の研究開発に携わる。

講演者プロフィール

株式会社会社フィックスターズ
近村 啓史 氏
大学時代にハードウェアとソフトウェアの協調設計に関する研究を行ったのち、 大手メーカーのR&D部門に就職し、
専用ハードウェアやプロセッサアーキテクチャの開発に携わる。
2008年7月にフィックスターズに中途入社し、
画像処理やストレージ関連のプロジェクトに従事。

 

アルゴリズムとスケジュールを分けて記述することにより高速化作業の煩雑さを軽減

Halideは、画像処理の計算に特化したドメイン固有言語(DSL)。C++の内部DSLとして提供されているため、C++と組み合わせて活用できます。
Halideの最大の特徴は「アルゴリズム」と「スケジュール」を分けて記述できるところ。「アルゴリズム」は「計算式」を記述するもの、「スケジュール」は「計算の順序やデータの持ち方などをはじめとした、ハードウェアに対する最適化方法」を記述するもので、これらを分けることによってコード量を大幅に短縮できるそうです。

▲C++ではこのように書かれるコードも、下記のように簡潔に記述できる。

 

▲上の画像と同じ処理のコードを、Halideで書いた例。

そして、Halideの2つ目の特徴は、マルチプラットフォームに対応していること。Halideだけでも主要なCPUやGPUに対応していますが、C言語のソースコードも出力できるため、Cコンパイラを持つプラットフォームであれば、Halideの恩恵を受けることができます。また、ハードウェアごとに異なるスケジュールを記述できるので、コードに対する変更を最小限に抑えてさまざまハードウェアに対して最適化することができます。

▲CPUとGPUの切り替えも1行で可能。

講演ではこうした機能を実現するコンパイラそのものについても話が及び、会場に訪れたエンジニアのみなさんも熱心に耳を傾けていました。

 

Halideによる実装とスケジューリングで、127倍の処理速度を実現

続いて、画像のぼかし処理や、輪郭を抽出するエッジ処理などに使用される「2次元コンボリューション」を例に取り、Halideの言語仕様と実装例についても紹介いただきました。下記は、アルゴリズムを記述するために使用する関数の定義方法について。

▲Halideにおける関数の定義方法の1例。

▲2次元コンボリューション処理を行うアルゴリズムの記述例。

続いてスケジュールの実装例について。スケジュールはハードウェアによって効果が異なるということでしたが、今回はCPUの場合について解説いただきました。

▲「void schedule() {」以下が、スケジュールの記述。ループ展開を行う「unroll」や、スレッド並列化を行う「parallel」が使用されている。

Halideを使ってこのように記述することで、Intelの6コアCPU上では、C++で書いたコード(最適化なし)に比べて、なんと127.7倍も処理速度が向上するそうです。

▲②は①をHalideで書き換えただけ(アルゴリズムのみ)の記述。それだけで60倍の速度向上がみられたそうです。③はスケジュールにunrollを使用した記述で、②から1.14倍の向上、④はそれらにparallelというスケジュールの記述を加えたもので、全体で127.7倍の速度向上を実現できるとのこと。

さらに講演では、近村氏からフィックスターズでのHalideの取り組みについても語られました。フィックスターズでは、HalideからFPGA向けのC/C++コードを出力するコンパイラを開発しており、このコンパイラを使用して開発されたFPGA向けIPコアをHalide to FPGAというベータ版サイトにて提供しているそうです。興味のある方はぜひ下記のリンクをチェックしてみてください。

Halide to FPGA

 

終わりに

質疑応答だけでなく、講演中にも積極的に質問が飛び交い、Halideは非常に注目度の高いプログラミング言語であることが感じられました。
より深くHalideについて理解を深めたい方は、イベントで使用されたスライドを読んで、その魅力を感じ取ってみてください。

  • このエントリーをはてなブックマークに追加
  • 正社員求人・転職支援はこちら
  • 年収800万円以上の転職を目指す エキスパートのハイクラス転職 エンジニア・クリエイター専門 レバテックエキスパート