読者です 読者をやめる 読者になる 読者になる

プログラミングの実験場

Haskell/Webアプリ/画像処理/可視化/ITによる生産性向上 など

MIT Halideのインストール方法

C++(とOCaml)で書かれた高速画像処理ライブラリである MIT Halide の自分の環境(Mac OSX 10.8)でのインストール方法の覚書。

ここからコンパイル済みのものがダウンロードできる。解説のスライドや論文へのリンクもここに載っている。
MIT Halide
http://halide-lang.org/

アーカイブを展開するとlibHalide.aとHalide.hという2つのファイルができるので、然るべき場所(/opt/local/includeと/opt/local/libなど)にコピーしておく。

プログラムの例はHalideのgitレポジトリを持ってくれば、testフォルダとappsフォルダに入っている。コンパイルは以下のようにg++を使ってやればよい。僕の環境にはg++が、g++-4.2, g++-mp-4.6, g++-mp-4.7 といろいろ入っているのだが、バージョン>=4.6が必要と思われる。

$ git clone https://github.com/halide/Halide
$ cd Halide/test
$ g++-mp-4.6 -std=c++0x vectorize.cpp -L halide -ldl -lpthread -I/opt/local/include /opt/local/lib/libHalide.a
$ ./a.out
HL_TARGET not set - inferring from host architecture...got x86_64
1.37134e+12 1.37134e+12 1.37134e+12
Vectorized vs scalar (float x 4): 0.519ms 1.76ms. Speedup = 3.400
1.37134e+12 1.37134e+12 1.37134e+12
Vectorized vs scalar (float x 8): 0.819ms 3.41ms. Speedup = 4.167
1.37134e+12 1.37134e+12 1.37134e+12
Vectorized vs scalar (double x 2): 0.687ms 0.917ms. Speedup = 1.335
1.37134e+12 1.37134e+12 1.37134e+12
Vectorized vs scalar (uint8_t x 16): 0.515ms 5.69ms. Speedup = 11.045
1.37134e+12 1.37134e+12 1.37134e+12
Vectorized vs scalar (int8_t x 16): 0.587ms 8.41ms. Speedup = 14.334
1.37134e+12 1.37134e+12 1.37134e+12
Vectorized vs scalar (uint16_t x 8): 0.551ms 3.02ms. Speedup = 5.477
1.37134e+12 1.37134e+12 1.37134e+12
Vectorized vs scalar (int16_t x 8): 0.523ms 3.41ms. Speedup = 6.521
1.37134e+12 1.37134e+12 1.37134e+12
Vectorized vs scalar (uint32_t x 4): 0.516ms 1.5ms. Speedup = 2.914
1.37134e+12 1.37134e+12 1.37134e+12
Vectorized vs scalar (int32_t x 4): 0.553ms 1.43ms. Speedup = 2.584
Success!

なお、まだAPIの仕様変更があるためか、公式サイトから持ってきたバイナリでは、Githubの最新のテストコードの中には、関数が見つからないといってコンパイルできないものが多かった。

追記:https://github.com/halide/Halide/blob/master/INSTALLにしたがってビルドできた。LLVMの3.2以上が必要(sudo port install llvm-3.2で入る)。それと、僕の環境では、llvm-configをln -s /opt/local/bin/llvm-config-mp-3.2 /opt/local/bin/llvm-configで作ってやる必要があった。makeでbin/libHalide.a, bin/libHalide.so, と include/Halide.hが生成され、しかるべきところにコピーすれば使える。ちゃんと最新のtestフォルダ内のコードもコンパイルが通った。