Halideは画像処理を高速に行うためのDSLです。Halideで適切なコードを書けば、CPUの拡張命令などを適切に使用して高速に画像処理を行うプログラムを作成することができます。
HalideはAndroidにも対応しています。より具体的に言うと、Qualcomm Snapdragon 820以降に搭載されているQualcomm Hexagon DSPで使うことができる拡張命令 (HVX) を使用したプログラムを作成することができます。
以下のREADMEに従って進めてみました。
Halideをビルドする
libHalide.a が必要なので、最初にHalideをビルドします。zlibをリンクする必要があるので、インストールしておきましょう。
$ sudo apt install zlib1g-dev
あとは Halide のルートディレクトリで make するだけです
$ git clone --depth 1 https://github.com/halide/Halide.git
$ cd Halide
$ make -j3
LLVMをビルドする
このREADMEの中ではSubversionを使ってLLVMのソースコードのダウンロードを行うこと勧めています。それに従ったのですが、少し時間がかかったので git --depth 1
オプションを付けてGitでダウンロードしたほうが高速かもしれません。
Hexagon SDKをインストーする
少し面倒ではありますが、インストーラをダウンロードする際にサインアップを要求されます(登録は無料)。
ここには罠が2つあります。
- Hexagon SDK 3.0を入れるとHexagon Tools 8.0がインストールされそうな雰囲気の説明がされていますが、Hexagon SDK 3.0に含まれているHexagon Toolsは7.2.12なので問題が起こります。Hexagon SDK 3.1を入れるとHexagon Tools 8.0.08がインストールされるので、Hexagon SDK 3.0とHexagon SDK 3.1を両方インストールしましょう。注意点として、Hexagon SDK 3.1に含まれるHexagon Toolsのインストール先は
$HOME/Qualcomm/Hexagon_SDK/3.1/tools/HEXAGON_Tools/8.0.08/Tools
です。 - Hexagon SDKとHexagon Toolsをインストールすればよいと書いてありますが、実際にはAndroid NDKも後で必要になってきます。↓のダイアログが表示されたときにはチェックを入れておきましょう。Eclipseは不要です。Hexagon SDK 3.0の場合は1. で述べた理由によりHexagon Toolsも不要です。
Hexagon HVXのデモをシミュレータ上で動作させる
HL_HEXAGON_TOOLS
の環境変数を設定するときは、場所が変わっているので注意しましょう。
export HL_HEXAGON_TOOLS=$HOME/Qualcomm/Hexagon_SDK/3.1/tools/HEXAGON_Tools/8.0.08/Tools
シミュレータ上では動作したので、ビルド手順は正しいはずです。
Hexagon HVXのデモをAndroidの実機上で動作させる
実機がないので未確認です。