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のトップページにリダイレクトし、そこを探してもプラグインは見つかりません。

MATLABGPUを扱う場合、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なりを使うのが良さそうです。