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フォルダ内のコードもコンパイルが通った。