MacでCUDAなMEXファイルをコンパイルする
MATLABで書かれたフィルタリングをするプログラムが遅かったので、C言語化してGPUで計算させることにしました。
MEXファイルとはMATLABから呼び出せるC言語のファイルで、CUDAとはNVDIA社製のGPGPUの統合開発環境です。
実行環境はOS X(10.8.2)、MATLAB(R2012b)、CUDA(5.0)です。
公式サイトによると、CUDAなMEXファイルを動かすのにはプラグインが必要とのことですが、ダウンロードのリンクをクリックするとDeveloperのトップページにリダイレクトし、そこを探してもプラグインは見つかりません。
MATLABでGPUを扱う場合、Parallel Computing Tool Boxを使うのが標準なのかなと思います。
しかし、先にMATLABのプログラムをMEX化しちゃったので(これだけで約5倍速くなった)せっかくなのでCUDAを使います。
ここからプラグインを入手することができました。
nvmexというperlのスクリプトです。
これは32 bitのWindows用のもので、設定ファイルを変えてMacで動くようにしようと思ったのですが、どうもうまくいかない…
そこで、nvmexは内部的にnvcc(CUDAのコンパイル) + mex(MEXファイルをコンパイル)しているだけだったので、コンパイルオプションをいろいろ試してくと、コンパイルに成功しました。
他にもOpenMP + MEXもやってみたのですが、どうも思っているパフォーマンスが出ない…
MATLABプログラムを高速化するにはParalell Computing Tool Boxを使うか、MEXではなく、普通にC言語化してCUDAなりOpenMPなりを使うのが良さそうです。