2010年1月18日月曜日

Mac と Matlab と gcc4.3 (つづき2)

今日も Mac で SDPA-M が動くかどうかの挑戦。
この前の時点で、64bit バイナリの SDPA はできているので、これに使った libsdpa.a を使って mex をすれば大丈夫、と思いきや、これが案外簡単ではなかった。

これに関して少しメモ。

Matlab は、R2009b の 64bit 版をインストール。
しかし、このバージョンの mex は maci64 のアーキテクチャでコンパイルしようとすると、gcc へのオプションが適切でなく、うまくいかない。(fink でインストールした gcc 4.4 を利用しているための可能性あり。)

まずは、Matlab の中で
mex -setup
として、~/.matlab/R2009b/mexopts.sh
を作る。これは、拡張子が示すとおり、シェルスクリプトなので、シェルスクリプトの要領で書き直すことができる。

fink の gcc4.4 を利用している場合、いくつかの変更が必要である。
まず、maci64 の部分を探して、以下の修正をする。
1. CC,CXX は gcc-4, g++-4 に変更する。gcc-4.0 などになっていることがある
2. gcc-4 は -arch をコマンドオプションとして受け付けないようなので、-arch $ARCH となっているところは削除する(g++-4にも注意)
3. LD も gcc-4 となっているので、これは g++-4 にする(しなくてもいいかもしれない)
4. LDFLAGS に -bundle があると crt1.10.5.0 にぶつかるので、このオプションは削除する
5. LDFLAGS に -dynamiclib をつけないと、
_main referenced in crt1.10.5.0
_MAIN__ referenced in libgfortranbegin.a
などと文句を言われる。Linux なら -shared で *.so が作られるが、Mac の場合は *.dylib なので -dynamiclib になる
6. CFLAGS, CXXFLAGS, LDFLAGS には -m64 オプションをつける

また、SDPA の make.inc からも -lcrt1.10.5 となっているところを削除する。

これらの修正をすると、SDPA-M を Mac のR2009b でコンパイルして実行できる。
ここまで長かった。

あと、BLAS/LAPACK のスレッド数を切替える maxNumCompThreads は将来的に消えてなくなる、という Warning が R2009b から出るようになった。
これがなくなると、Matlab が持っている MKL にリンクする理由がなくなるので、将来的に ATLAS か GotoBLAS にリンクするようにしたほうがいいのかもしれない。


あとは、SNL の計算。pertubation を加えて、すこし変更してみたが、このときに選ばれる枝まで変更されてしまい、位置が問題なのか枝が問題なのか切り分けがうまくいってない。これは明日調べてみよう。

今日の作業内容: Matlab との戦い 4h + SNL 2h
今日のBGM: ARIA OST [1-2]
今日のランチ: 味庵 ジャンボ餃子とピータンがゆ
明日の予測作業時間: 6h

0 件のコメント:

コメントを投稿