foxcを使ってGPUのない環境でもOpenCLをつかえるようにしてみる。
ちょっとOpenCLを使ってみようと思ったのですが、手元のPCにはGPUがついていませんでした。GPGPUの速度はともかく、OpenCLの動く環境が作れないかと探してみたところfoxcを発見しました。これを使ってみようと思います。理解が正確かどうか分かりませんが、foxcはOpenCLの記法で書いたコードをSSEなどの命令を利用したコードに置き換えてくれるコンパイラ(トランスレータ?)のようです。
また、FOXCはOpenCL C言語からSSE組み込み関数を使ったC言語へのソース to ソースコンパイラとなっており、 OpenCL C言語で書かれたプログラムと実際のプログラムの対応をC言語レベルで確認できるようになっています。
http://www.fixstars.com/foxc/
今回はこれをubuntuの環境で導入したいと思います。
download
ベータ版ダウンロード | FOXC(Fixstars OpenCL Cross Compiler) - フィックスターズ
ページの記述にしたがってdownloadしてください。
install
tar zxvf foxc_beta_linux64.tar.gz
DLしてきたtar.gzを展開するだけです。
.pcファイルの作成
以下のようなMakefileと.erbファイルを用います。これはgistに挙げてあります。動作にはもちろん、erbが実行できることが必要です*1。
gistから2つのファイルを取ってきたらmakeを使ってinstallしてください。
## 2つのファイルを取ってくる wget http://gist.github.com/raw/642213/751159ecf928d66b89b1818fa644e75db1ddc787/foxc.pc.erb wget http://gist.github.com/raw/642213/417b17a15e368226d97b4ba9c2fdeeadaf450d0d/Makefile ## install sudo make install
動作確認
foxcに付属しているhelloのサンプルを実行してみます(添付されているもう1つのサンプルdataParallelの方も実行できます)。
cd share/foxc/sample/hello/ gcc -o hello hello.cpp `pkg-config --libs --cflags foxc` ./hello # Hello World!