2010年9月18日土曜日

SDPA-M on Octave

ずっと以前に octave で SDPA-M をコンパイルしようとしたところ、あまりにたくさんのエラーが出たために断念していたが、今日もう一度コンパイルしてみたところ、ある程度の修正で実行できることがわかった。
どうやら、octave にかなりの機能追加があったようだ。

実際に SDPA-M をコンパイルするには、octave3.2, octave3.2-headers をインストールしておいて、
mex コマンドを mkoctfile --mex に修正し、-largeArrayDims を外し、CC=${CC} CXX=${CXX} -O -g などのオプションも外す。
これによって、コンパイルが通るようになる。

ただし、mxGetCell のあたりでメモリーリークかなにかで挙動がおかしくなることがあるので、mexsdpa.cpp では
cell_ptr = mxGetCell(F_ptr, cell_index);
の行の後に、
dims = (mwIndex*)mxGetDimensions(F_ptr);
で挙動がおかしくなる dims を上書きする。

あと、param.m の maxNumCompThreads も octave には存在しないので、これも修正する。
この場合は、Matlab との互換性を維持するため、
try
OPTION0.NumThreads = maxNumCompThreads;
catch
OPTION0.NumThreads = 1;
end
のように回避する。


同じ問題を SDPA (コマンドライン) と SDPA-M (Matlab) で解いた場合、オーバーヘッドがある分 SDPA-M のほうが若干遅い。octave にしても、やはり若干遅くなる。


今日の作業内容: SDPA-M on Octave 6h

0 件のコメント:

コメントを投稿