foxcを使ってGPUのない環境でもOpenCLをつかえるようにしてみる。

ちょっとOpenCLを使ってみようと思ったのですが、手元のPCにはGPUがついていませんでした。GPGPUの速度はともかく、OpenCLの動く環境が作れないかと探してみたところfoxcを発見しました。これを使ってみようと思います。理解が正確かどうか分かりませんが、foxcOpenCLの記法で書いたコードを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を展開するだけです。

note:(LD_LIBRARY_PATHは使わない)

コンパイル時にはパスを指定する必要があると別途のREADME.txtに書いてあります。そこでは、ホームディレクトリに展開した場合には、環境変数を以下のように設定すると書いてありますが、

export LD_LIBRARY_PATH=$HOME/foxc/lib

この方法はつかいません。変わりに.pcファイルを作成してpkg-configをつかえるようにします。

.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!

*1:ない場合には、apt-get install ruby