Matlab Compiler

とりあえず使ってみるまでのメモをば。

インストール

インストール自体は通常のツールボックスと同様。自身のライセンス管理ページにて、ライセンス番号にMatlab compiler がひも付けされていることを確認。後にインストール対象として選択すればよい。download_agent をダウンロード後、javawsからroot権限で実行。今回はMatlab自身のアップデートも込みで作業した。

プラットフォームのCentoOS 5.x に対して、最新版のR2013bは未対応。なので R2012b をインストールしてみた(え。R2012b 対応のgcc/g++ のバージョンはここ(http://www.mathworks.co.jp/support/compilers/R2012b/glnxa64.html)で確認できる。CentOS 5.x では gcc の最新バージョンは 4.1.x,だがgcc44/g++44 として gcc/g++ の4.4.x が yum でインストールできる。gfortran は4.3.x以上なので、gfortran44が入っていれば大丈夫だろう、多分。

初期設定

"Matlab"+"toolbox"+"matlab compiler" のインストールが終了したら、Matlab compiler の初期設定を行う。Linux 用の初期設定方法は以下に書いてある内容を参考にした。なお、インストールとは異なり、この初期設定はユーザーごとに行う必要がある。
http://www.mathworks.co.jp/jp/help/compiler/configuring-your-options-file-with-mbuild.html#bsgpsg3-3

デフォルトの設定ファイルは以下の場所にある。

/usr/local/MATLAB/R2012b/bin/mbuildopts.sh

次のコマンドを実行し,

$ mbuild -setup

表示された選択肢 1 を選ぶ。すると

 /home/username/.matlab/R2012b/mbuildopts.sh

というコピーが生成される。この設定ファイルのgcc/g++ の箇所をgcc44/g++44に変更すればおk。
ついでに, mex -setup に対しても同様の設定をしておく。mex の場合は /home/username/.matlab/R2012b/mexopts.sh ファイルを編集する。mex に対してはgfortran も gfortran44にしておく。

function script 作成 => compile

Matlab compiler では function ファイルしかコンパイル出来ない。今回作成したテスト用のコードが以下。

function test_M_compiler(filename)
img = imread(filename);
imshow(img);

雑だけど、まあ、テストだしいいか。

端末上で以下のコマンド、

$ mcc -m test_MatCompiler.m

で以下のファイルが生成される。

run_test_MatCompiler.sh test_MatCompiler readme.txt

readme.txt に実行方法が書いているので、基本的にはそれに従う。ともあれ、MCRのインストールが必要。

MCR (Matlab Compiler Runtime) のインストール

各バージョンに対する Matlab Runtime Component は以下からダウンロードできる。今回はLinux Mint 13 64bit の上で実行したいので、R2012b の Linux 64 bit を選択.
http://www.mathworks.co.jp/products/compiler/mcr/

圧縮ファイルを展開、root権限でinstall を実行すれば良い。なお、Matlab Compiler をインストールしたマシンには、MCRがインストール済みなので改めてインストール必要はない。インストール場所も同じ。

実行

生成したファイルを実行したいマシン上の適当なディレクトリにコピー。今回は表示させたいtif画像も同じディレクトリにおく。端末で以下を実行

$ ./run_test_MatCompiler.sh /usr/local/Matlab/MATLAB_Compiler_Runtime/v80/ Camera.tif

すると、第2引数に指定した画像を表示する。第1引数にMCRをインストールしたディレクトリを指定する必要がある。
あ、権限追加がひつようですけどぉ。chmod +x


利用方法

シェル使って引数のパラメータを変えながら計算させるよりかは、あらかじめm-file としてバッチファイルを作っておく方が楽そう。計算結果は Matfile で保存しておけば良いかと。


なお、Matlab Compiler をインストールしたマシンで 生成した実行ファイルを実行している間、Matlabは起動は出来てるし、操作も出来るようだ。生成した実行ファイルを実行した直後はmatlabコマンドラインが入力を受け付けなくなるが、一度エディタをいじったりすると、コマンドライン入力ができるようになる。なんじゃそりゃ。

dllとしてmファイルを吐き出すこともできるようだが、ひとまずはこれで十分。C++の一部にmatlabで作成した関数をdllとして組み込む、という必要性があるかは分からない。