topimg_news44_01

パソコンを始めとして、様々な電子機器で、高度な画像処理が求められるようになってきている。

スマートフォンのアプリやデジカメでも、本格的なフォトレタッチ機能が搭載されており、これらを利用している人も多いだろう。
こうした画像処理プログラムの開発でキーとなるのが「並列化」だ。画像を処理する場合、大量のデータに対して同じ変換処理を行っていくことが多い。こうした処理を行う際、画像を細かな単位に分割して、同時に処理を行うことができれば実行時間を短くできる。今ではスマートフォンにも搭載されているGPUは、処理を同時並列的に、実行するために設計された画像処理用のプロセッサだ。しかし、並列処理に最適化されたプログラムコードを書くのは、非常に手間がかかる。プログラマーは、どのようなアルゴリズム(計算方法)で画像処理を行うかということに加え、それをどう並列化するかということまで考えないといけないからだ。

MITはこうした問題を解決するために、画像処理専用のプログラミング言語「Halide」をスタンフォード大学やアドビと開発し、オープンソースとして公開した。

Halideの特徴は、画像処理のアルゴリズム部分と、並列化の実行手順部分を分離したことにある。プログラマーは画像をどう処理するかを考えることに専念できるので、プログラムコードの作成効率が上がる。また、開発者本人以外にもとっても理解しやすいコードになるためメンテナンスもしやすくなる。加えて、実行効率がよいことも大きなアドバンテージだ。MITの論文によれば、画像処理として広く使われているC++(汎用プログラミング言語の一つ)とHalideを比較したところ、C++のプログラムコードは262行で、実行時間は335ミリ秒。これに対してHalideのコードは62行で、実行時間は158ミリ秒だった。その他の処理についても、Halideは半分程度のコード分量、実行時間もC++の数分の1になるケースが多い。

Halideは、パソコンやサーバーで標準的に使われているインテルのx86プロセッサのほか、スマートフォンやタブレットで主流になっているARMプロセッサに対応している。アプリなどの生産効率、性能の向上が期待できそうだ。

写真:同じ処理をC++とHalideで記述して、コード分量と実行時間を比較する。Photo Credit: Jonathan Ragan-Kelley, Andrew Adams, Sylvain Paris, Marc Levoy, SamanAmarasinghe, Fredo Durand.

(文/山路達也)

記事提供:テレスコープマガジン